forを使って測定した情報すべてを纏めるにはどのようにすればいいでしょうか?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Akira Agata
le 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
Plus de réponses (1)
Shunichi Kusano
le 17 Nov 2020
こんにちは。
このコードですと各ピクセルにおいて周辺のzeroの数はnumでいったん計算され、それをI2に保存しているようです。全ての情報はI2に保存されてるのではと思います。
Voir également
Catégories
En savoir plus sur Blue dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!