-1

手書き認識プロジェクトを開発しています。このプロジェクトの要件の1つは、画像入力を取得することです。この画像には、ランダムな場所にある文字オブジェクトのみが含まれています。最初に、この文字を抽出して次のステップで処理する必要があります。

今、私はそのような難しい問題を混乱させています:黒/白(バイナリ)画像から1つの文字を抽出する方法、または黒-白(バイナリ)画像で文字のバインドされた長方形を描画する方法?

どうもありがとう!

4

3 に答える 3

2

MATLABを使用している場合(このようなタスクには最適なので、ぜひ使用してください)、組み込み関数bwlabel()とregionprops()を調べることをお勧めします。これらは、すべての文字をセグメント化し、それらのバウンディングボックス情報を取得するのに十分なはずです。

いくつかのサンプルコードを以下に示します。

%Read image
Im = imread('im1.jpg');

%Make binary
Im(Im < 128) = 1;
Im(Im >= 128) = 0;

%Segment out all connected regions
ImL = bwlabel(Im); 

%Get labels for all distinct regions
labels = unique(ImL);

%Remove label 0, corresponding to background
labels(labels==0) = [];

%Get bounding box for each segmentation
Character = struct('BoundingBox',zeros(1,4));
nrValidDetections = 0;
for i=1:length(labels)
    D = regionprops(ImL==labels(i));
    if D.Area > 10
        nrValidDetections = nrValidDetections + 1;
        Character(nrValidDetections).BoundingBox = D.BoundingBox;
    end
end


%Visualize results
figure(1);
imagesc(ImL);
xlim([0 200]);
for i=1:nrValidDetections
    rectangle('Position',[Character(i).BoundingBox(1) ...
                          Character(i).BoundingBox(2) ...
                          Character(i).BoundingBox(3) ...
                          Character(i).BoundingBox(4)]);

end

ここで読み込んだ画像は0〜255なので、バイナリにするためにしきい値を設定する必要があります。iとjの上のドットが問題になる可能性があるため、個別の領域を構成するピクセル数にもしきい値を設定します。

結果はここで見ることができます: https ://www.sugarsync.com/pf/D775999_6750989_128710

于 2011-08-07T18:16:53.187 に答える
1

私の場合、文字を抽出するためのより良い方法は、いくつかの論文しか共有できないヒストグラムのセグメンテーションでした。

http://cut.by/j7LE8

http://cut.by/PWJf1

これはあなたを助けることができるかもしれません

于 2011-08-07T23:32:22.900 に答える
0

簡単なオプションの1つは、次のような全数検索を使用することです(テキストが黒で、背景が白であると想定)。

  1. 左端の列から始めて、すべての行をステップ実行し、黒いピクセルを確認します。
  2. 最初の黒いピクセルに遭遇したら、現在の列インデックスをとして保存しますleft
  3. 黒のピクセルが含まれていない列が見つかるまで列をトラバースし続け、この列インデックスをとして保存しますright
  4. 次に、同様の方法で行をトラバースします。一番上の行から開始して、その行の各列をステップスルーします。
  5. 最初の黒いピクセルに遭遇したら、現在の行インデックスをとして保存しますtop
  6. 黒のピクセルが含まれていない行が見つかるまで行をトラバースし続け、この行を`bottomとして保存します。

あなたのキャラクターは、(left - 1, top - 1)左上隅と(right, bottom)右下隅として定義されたボックス内に含まれます。

于 2011-08-07T12:58:51.377 に答える