forを使って測定し​た情報すべてを纏める​にはどのようにすれば​いいでしょうか?

4 views (last 30 days)
有那 小泉
有那 小泉 on 16 Nov 2020
Commented: 有那 小泉 on 26 Nov 2020
matlab R2020b(Windows)を使っております。
2値化した画像の1つのピクセルの回りに0がいくつあるかを調べる為に以下のプログラムを教えて頂きました。
img = imread('sen.jpg'); %画像読み込み
I = imbinarize(rgb2gray(img)); %2値化
I2=zeros(size(I));
for m=2:size(I,2)-1 %画像の左から右(2は横方向)
for n=2:size(I,1)-1
xx=I(n-1:n+1,m-1:m+1); %対象とする画像の範囲
num=length(find(xx==0)); %xxの中から0の所を探す
2I(n,m)=num;
end
end
numにそれぞれのピクセルの情報が入っているのかとおもったのですが、numの数値は0になっていました。
forを使っていますので、左上の一番最初に測定したものか、右下の一番最後に測定したものが入っているのか?と考えていますが、全てのピクセルの情報を纏めるにはどのようにすればよろしいでしょうか。
最終的に行いたいものは全てのピクセルの周りの情報を集め、周りに0が一定数以下のものはそのピクセルを膨張する、というものです。
そのために以下のプログラムを組もうと考えています。
se = strel('square',3);
kazu=find(num>2);
O = imdilate(kazu,se);
imshow(O);
また、使用する画像は以下になります。
説明が難しく申し訳ございません。
宜しくお願い致します。

Accepted Answer

Akira Agata
Akira Agata on 20 Nov 2020
とくに for ループを使う必要がなければ、filter2 関数で同じことが可能です。以下は簡単なサンプルコードです。
I = imread('image.jpeg'); %画像読み込み
BW = imbinarize(rgb2gray(I)); %2値化
% 各ピクセルについて、自身を含む周囲 3×3 領域内の 0 の数を数える
H = filter2(ones(3),~BW);
% 表示のためのカラーマップを準備
cMap = jet(10);
% 結果を表示
figure
imagesc(H,[-0.5 9.5])
colormap(cMap)
colorbar
  1 Comment
有那 小泉
有那 小泉 on 26 Nov 2020
ご回答ありがとうございます。
無事行いたいと思っていた事ができました。

Sign in to comment.

More Answers (1)

Shunichi Kusano
Shunichi Kusano on 17 Nov 2020
こんにちは。
このコードですと各ピクセルにおいて周辺のzeroの数はnumでいったん計算され、それをI2に保存しているようです。全ての情報はI2に保存されてるのではと思います。
  1 Comment
有那 小泉
有那 小泉 on 26 Nov 2020
ご回答ありがとうございます。
numではなくI2に保存されておりました。
ありがとうございました。

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!