2017-04-08 8 views
0

私はコンピュータビジョンを学び、フィルタを使って遊んでいます。 1つの質問は、正方形が黒い背景に白いバイナリイメージの四角形の左上隅を検出するフィルタを思いついています。 MATLABで四角形の左上隅を検出する単純な画像フィルタですか?

、私は次のようになり、フィルタしてみてください。

ul = [0 0 0; 0 1 1; 0 1 1] 

しかし、私が欲しいものを私に与えていないようですが。コマンドimshowは基本的に元のイメージと同じイメージを表示します。

i = imread('white_square_on_black.png'); 
imshow(imfilter(i, ul, 'conv')); 

これを行うには適切なフィルターとは何か、一般的な原則は何ですか?

答えて

3

最初に、フィルタリング後に同じ画像に近づいている理由は、フィルタが右隣と下隣がすべてゼロ以外のピクセルをすべて検出しているためです。これには、画像の中央にあるすべてのピクセルが含まれます。これらのピクセルは、ゼロ以外の近隣ピクセルを持つためです。

この問題を解決するには、左または上の隣接ピクセルがゼロ以外の場合にペナルティを課す必要があります。フィルタを次のように変更することができます:

ul = [-5 -5 -5; 
     -5 1 1; 
     -5 1 1]; 

このように、望ましくないピクセルの1つでもゼロでない場合、値がゼロ以下に強制されます。

コードでこのフィルタを使用すると、右下の角がハイライト表示されていることがわかります。これは、convが畳み込みの前にカーネルを反転させるためです。 convcorrに変更するか、まったく削除するか、あらかじめフィルタを反転して修正することができます。

Iは、テスト画像作成:私は

sf = (imfilter(img, ul) >= 3); % make sure we get a full corner 

enter image description here

を使用してフィルタリングされた画像を作成

enter image description here

関連する問題