5

テキスト認識を試してみたかったので、opencvを使用してエッジをトレースし、c ++を使用して傾斜や曲線などを見つけました。エッジアルゴリズムは、大きくて整理された文字セットでうまく機能しますが、小さな印刷テキストに対してはうまく機能します。または、キャプチャに埋め込まれているようなバックグラウンドノイズが多いテキストは、苦労して不完全に見えます。しきい値を正しく設定しておらず、別の値を試しても成功しなかったと思います。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

これが私のコードです:

#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

これが解決策である場合、誰かが私にこのアルゴリズムと同等のc ++を提供できますが、そうでない場合は他に何ができますか?

4

1 に答える 1

5

キャニーエッジ検出器は、ヒステリシスしきい値処理(1つではなく2つのしきい値を使用)とエッジ追跡(最後のスニペットはこのステップの一部です)を使用するマルチステップ検出器です。最初にウィキペディアのエントリを読むことをお勧めします。考えられる解決策の1つは、高しきい値を選択することです。たとえば、画像ピクセルの70%がエッジとして分類されます(最初は、ヒストグラムを使用してこれをすばやく行うことができます)。低しきい値を高しきい値の40%として選択するよりも。画像全体ではなく画像ブロックでエッジ検出を実行することをお勧めします。これにより、アルゴリズムがさまざまな領域に対してさまざまなしきい値を計算できるようになります。

CAPTCHAはセグメント化が難しいように設計されており、エッジ検出を壊したノイズを追加することは、これを実現するための1つの手法であることに注意してください(最初に画像を滑らかにする必要がある場合があります)。

于 2012-07-07T19:01:25.207 に答える