質問: 2値化した画像内のピクセル周りに0と1がそれぞれいくつあるかを調べる方法が知りたい matlab r2020b(windows)を使っております。 以下の2値化した画像にある1つのピクセルの周り(8方向)に"0"と"1"がそれぞれいくつあるかを調べたいです。 画像内にある全てのピクセルを調べたく、結果的に"0"が3つあるかどうか等を判断するようにしたいです。 説明が苦手で申し訳ございません。 宜しくお願い致します。
回答: こんにちは、計算が速くなるようにいろいろとコーディングの工夫は考えられるのですが、まずは、最もシンプルな方法を提案させて頂きます。 ちょうど画像の左上から1ピクセルごとに周辺の0の数を数える、ということを想像してください。同じ操作を繰り返すので、forを使えばよく、ひとまず画像の左から右なので、for m=1:size(i,2)などとします。iは上の2値化画像で、sizeは画像のサイズ、2は横方向を意味します。 そして、要素を検索するためにfind関数を使って、find(xx==0)とします。xxは対象とする画像の範囲なので i(m-1:m+1,n-1:n+1)とすればよいです。 i=imread('binary_image.jpg'); i2=zeros(size(i)); for m=2:size(i,2)-1 for n=2:size(i,1)-1 xx=i(n-1:n+1,m-1:m+1); num=find(xx==0); i2(n,m)=num; end end 計算時間は置いておいて、このような感じで書いていけば、周辺の0の数は数えられると思います。適宜目的にあうように加筆・修正ください。