forを使って測定した情報すべてを纏めるにはどのようにすればいいでしょうか?
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
有那 小泉
am 16 Nov. 2020
Kommentiert: 有那 小泉
am 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);
また、使用する画像は以下になります。
説明が難しく申し訳ございません。
宜しくお願い致します。
0 Kommentare
Akzeptierte Antwort
Akira Agata
am 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
Weitere Antworten (1)
Shunichi Kusano
am 17 Nov. 2020
こんにちは。
このコードですと各ピクセルにおいて周辺のzeroの数はnumでいったん計算され、それをI2に保存しているようです。全ての情報はI2に保存されてるのではと思います。
Siehe auch
Kategorien
Mehr zu Blue finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!