できる限り次の画像からテキストを再構築したいと思います。トリッキーな部分は、画像の形態学的操作を使用してのみやりたいことです
侵食、膨張、開閉を使用してみましたが、結果はあまり良くありません。
これも可能ですか?
できる限り次の画像からテキストを再構築したいと思います。トリッキーな部分は、画像の形態学的操作を使用してのみやりたいことです
侵食、膨張、開閉を使用してみましたが、結果はあまり良くありません。
これも可能ですか?
回答:
形態学的に変換された画像などを加算/減算したい場合、各ピクセルの近くにある信号ピクセルの数と、その数に基づいたしきい値をカウントできます。
img = imread('http://i.stack.imgur.com/wicpc.png');
n = false(3);n(4) = 1;
s = false(3);s(6) = 1;
w = false(3);w(2) = 1;
e = false(3);e(8) = 1;
%# note that you could convolve with a cross instead
fourNeighbourCount = imerode(img,n) + imerode(img,s) + imerode(img,w) + imerode(img,3) + img;
%# require at least two neighbours
img = fourNeighbourCount > 1;
その後、中央に穴がある3x3マスクで畳み込むと、次のようなものが得られます。
何らかの理由でモルフォロジー演算の使用に限定されている場合、指向のクローズ演算の「投票スキーム」の使用を検討できます。
モルフォロジー演算の1つの問題は、方向性を実際に考慮していないことです。中央のピクセルの場合、このような近傍
1 0 0
1 1 0
0 1 1
本当にこのような近所と違いはありません
0 1 0
1 1 0
1 1 0
膨張と収縮は、必要に応じて方向に偏っていないため、問題を引き起こす可能性があります。したがって、できることの1つは、次のようなカーネルを使用して、最も適切な方向に偏った形態学的操作を見つけることです。
1 1 0 1 0 0 1 0 0
0 1 0 1 1 0 1 1 0
0 1 1 0 1 1 0 1 1 . . .
これは5 x 5カーネルではより良いでしょうが、その考えは十分に明確だと思います。基本的に、コーナー検出カーネルの概念は少し拡張されているため、ラインセグメント検出カーネルになります。また、これを使用して最適な曲線を見つけることもできます。
0 0 0 1 1
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
明らかにこれは膨大な数のカーネルにつながりますが、基本的なアイデアがうまく機能する場合は、最適なカーネルがシングルパスで見つかるようにテクニックを最適化する方法があります。
いずれにせよ、複数のカーネルといくつかのロジックを使用する場合、(x、y)での各操作には、従来の形態学的ステップよりも多くの計算が必要です。
カーネルのサイズは、入力のサイズと一致する必要があります。より大きなカーネルを使用する代わりに、「スプレッド」カーネルを使用して操作の数を減らすことができます。次のカーネルは、半径が1より大きい3 x 3カーネルです。
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1