2012-07-07 31 views
5

Tôi muốn thử nhận dạng văn bản, vì vậy tôi đã sử dụng opencv để theo dõi các cạnh và C++ để tìm các sườn, đường cong vv, thuật toán cạnh hoạt động tốt trên các tập lớn và gọn gàng của nhân vật nhưng khi nói đến văn bản in hoặc văn bản nhỏ với rất nhiều tiếng ồn nền như nhúng trong hình ảnh xác thực, nó không thể thiết lập các giá trị ngưỡng một cách chính xác và thử các giá trị khác nhau mà không thành công.Điều chỉnh ngưỡng trong thuật toán cạnh canny

enter image description here

enter image description here

Đây là mã của tôi:

#include "cv.h" 
#include "highgui.h" 
using namespace cv; 
const int low_threshold = 50; 
const int high_threshold = 150; 


int main() 
{ 

    IplImage* newImg; 
    IplImage* grayImg; 
    IplImage* cannyImg; 

    newImg = cvLoadImage("ocv.bmp",1); 

    grayImg = cvCreateImage(cvSize(newImg->width, newImg->height), IPL_DEPTH_8U, 1); 

    cvCvtColor(newImg, grayImg, CV_BGR2GRAY); 
    cannyImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 1); 

    cvCanny(grayImg, cannyImg, low_threshold, high_threshold, 3); 
    cvNamedWindow ("Source", 1); 
    cvNamedWindow ("Destination",1); 
    cvShowImage  ("Source", newImg); 
    cvShowImage  ("Destination", cannyImg); 
    cvWaitKey(0); 
    cvDestroyWindow ("Source"); 
    cvDestroyWindow ("Destination"); 
    cvReleaseImage (&newImg); 
    cvReleaseImage (&grayImg); 
    cvReleaseImage (&cannyImg); 

return 0; 

} 

Tôi đã nhìn qua mạng và đã thấy một số điều kiện ngưỡng phức tạp như trong mã này từ trang web này:

% Set direction to either 0, 45, -45 or 90 depending on angle. 
[x,y]=size(f1); 
for i=1:x-1, 
    for j=1:y-1, 
     if ((gradAngle(i,j)>67.5 && gradAngle(i,j)<=90) || (gradAngle(i,j)>=-90 && gradAngle(i,j)<=-67.5)) 
      gradDirection(i,j)=0; 
     elseif ((gradAngle(i,j)>22.5 && gradAngle(i,j)<=67.5)) 
      gradDirection(i,j)=45; 
     elseif ((gradAngle(i,j)>-22.5 && gradAngle(i,j)<=22.5)) 
      gradDirection(i,j)=90; 
     elseif ((gradAngle(i,j)>-67.5 && gradAngle(i,j)<=-22.5)) 
      gradDirection(i,j)=-45; 
     end 
    end 
end 

Nếu đây là t ông giải pháp ai đó có thể cung cấp cho tôi tương đương C++ của thuật toán này, nếu nó không phải những gì khác tôi có thể làm gì?

Trả lời

5

Máy dò cạnh cận cảnh là bộ dò tìm nhiều bước bằng cách sử dụng quá trình làm trễ trễ (nó sử dụng hai ngưỡng thay vì một) và theo dõi cạnh (đoạn cuối của bạn là một phần của bước này). Tôi khuyên bạn nên đọc mục nhập wikipedia trước tiên. Một giải pháp có thể có thể là chọn ngưỡng cao, ví dụ: 70% pixel hình ảnh sẽ được phân loại là cạnh (ban đầu - bạn có thể thực hiện điều này nhanh chóng bằng cách sử dụng biểu đồ), hơn là chọn ngưỡng thấp như ví dụ: 40% ngưỡng cao. Nó có thể là một ý tưởng tốt để cố gắng thực hiện phát hiện cạnh trên khối hình ảnh chứ không phải là toàn bộ hình ảnh, do đó thuật toán của bạn có thể tính các ngưỡng khác nhau cho các khu vực khác nhau. Lưu ý rằng CAPTCHA-s được thiết kế khó phân đoạn, và thêm tiếng ồn mà phát hiện cạnh phá vỡ là một kỹ thuật để đạt được điều này (bạn có thể cần phải làm mịn hình ảnh đầu tiên).

+0

Tôi chưa sử dụng openCV nhưng bạn cũng có thể chơi với tham số sigma của đầu dò cạnh canny trước. – WebMonster

+0

Bạn sẽ phải tính các giá trị này từ biểu đồ của hình ảnh độ dốc, phải không? –

Các vấn đề liên quan