2012-07-07 12 views
5

私はテキスト認識に手を入れたかったので、opencvを使ってエッジをトレースし、C++を使ってスロープやカーブなどを見つけました。エッジアルゴリズムは大きくて整理されたセットしかし、それは苦労して不完全に見える、私の推測は私がしきい値を正しく設定していないと成功していない別の値を試していたことだった。ここで Cannyエッジアルゴリズムのしきい値を調整する

enter image description here

enter image description here

は私のコードです:私は、ネット全体で見てきたし、このサイトからこのコードのようにいくつかの複雑なしきい値条件を見てきました

#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; 

} 

% 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 

これがtの場合彼の解決策は誰かが私にこのアルゴリズムと同等のC++を提供することができます、それ以外の場合はどうすればいいですか?

答えて

5

キャニーエッジ検出器は、ヒステリシスのしきい値処理(1つではなく2つのしきい値を使用)とエッジトラッキング(最後のスニペットがこの手順の一部です)を使用するマルチステップ検出器です。最初にwikipediaの項目を読むことをお勧めします。 1つの可能な解決策は、高い閾値を選択することであり得る。画像のピクセルの70%はエッジとして分類されます(最初は - ヒストグラムを使用してこれを迅速に行うことができます)。高閾値の40%。イメージ全体ではなくイメージブロックでエッジ検出を実行することをお勧めします。そのため、アルゴリズムは異なる領域の異なるしきい値を計算できます。

CAPTCHAは分割が難しいように設計されており、エッジ検出を壊したノイズを追加することがこれを実現する1つの手法です(画像を最初に平滑化する必要があるかもしれません)。

+0

私はopenCVを使用していませんが、最初にキャニーエッジ検出器のsigmaパラメータで再生することもできます。 – WebMonster

+0

これらの値は、勾配の大きさ画像のヒストグラムから計算する必要があります。 –

関連する問題