MATLAB Answers

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

조회 수: 1(최근 30일)
有那 小泉
有那 小泉 2020년 11월 16일
댓글: 有那 小泉 2020년 11월 26일
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);
また、使用する画像は以下になります。
説明が難しく申し訳ございません。
宜しくお願い致します。

채택된 답변

Akira Agata
Akira Agata 2020년 11월 20일
とくに 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
有那 小泉
有那 小泉 2020년 11월 26일
ご回答ありがとうございます。
無事行いたいと思っていた事ができました。

댓글을 달려면 로그인하십시오.

추가 답변(1개)

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

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!