画像の長手方向の最長距離と短手方向の最長距離を出すにはどうすればよいですか.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
%%画像入力
kaki_img=imread('EDGE1.bmp');
figure(2)
imshow(kaki_img)
title('kaki image');
%%画像全体のセグメンテーション
kaki_red=kaki_img(:,:,1);
figure(3)
imshow(kaki_red)
title('kaki red plane');
%%画像の二値化
thresh=graythresh(kaki_red);
kaki_th=imbinarize(kaki_red,thresh);
figure(4)
imshow(kaki_th);
title('kaki_th');
%%二値化画像の穴埋め
kaki_th=imfill(kaki_th,'holes');
figure(5)
imshow(kaki_th);
title('kaki_th(内部の穴埋め1回目)');
%%モルフォロジー処理
kaki_th=bwmorph(kaki_th,'remove');
figure(6)
imshow(kaki_th);
title('kaki_th(外周をプロット)');
%%モルフォロジー処理 膨張
kaki_th=imdilate(kaki_th,strel('disk',10));
figure(7)
imshow(kaki_th);
title('kaki_th(プロットした点を線で繋ぐ)');
%%モルフォロジー処理 画像の塗りつぶし
kaki_th=imfill(kaki_th,'holes');
figure(8)
imshow(kaki_th);
title('kaki_th(線内部の塗りつぶし)');
%%モルフォロジー処理 収縮
kaki_th=imerode(kaki_th,strel('disk',10));
figure(9)
imshow(kaki_th);
title('kaki_th(画像の収縮)');
%%二値化画像のクリーンアップ(周囲の白を除去)
cc1=bwconncomp(kaki_th);
main1=regionprops(cc1,'Area');
A=[main1.Area];
[~,biggest]=max(A);
kaki_th(labelmatrix(cc1)~=biggest)=0;
figure(10)
imshow(kaki_th);
title('kaki_th(周囲のノイズ除去)');
%%画像のエッジ検出
kaki_th_edge=edge(kaki_th);
figure(13)
imshow(kaki_th_edge);
[row,col]=find(kaki_th_edge);
for k=1:330
for i=k+1:330
I=((row(k)-row(i)).^2);
J=((col(k)-col(i)).^2);
dist=sqrt(I+J);
distmax=max(dist);
end
Distmax=max(distmax);
end
bwdist=bwdistgeodesic(kaki_th_edge,col(1),row(1),'quasi-euclidean');
bwdistmax=max(bwdist);
tatemax=distmax*pix;
%%重心の検出
cc2=regionprops(kaki_th,'Centroid');
centroids=cat(1,cc2.Centroid);
figure(11)
imshow(kaki_th);
hold on
plot(centroids(:,1),centroids(:,2),'r*');
hold off
%%画像を重ねる
C=imfuse(kaki_th,kaki_img);
figure(12)
imshow(C);
title('kaki_th(元画像との比較)');
0 Kommentare
Antworten (1)
Kei Otsuka
am 10 Feb. 2018
オブジェクトの形状にもよりますが、楕円として捉えたときの長軸および短軸の長さであればregionpropsで 求めることができます。
stats = regionprops(BW, 'MajorAxisLength', 'MinorAxisLength');
もしくは、
stats = regionprops(BW, 'Extrema');
にてオブジェクトの極値点の座標を8点だせますので、その情報から所望の値を計算することもできるかもしれません。
1 Kommentar
Nagae Ryoya
am 18 Sep. 2019
tatemax=distmax*pix;
についてですが、pixを用いずに、比較のためのデータとして、distmaxである最長距離を算出したいと考えています。
方法はありますか?
Siehe auch
Kategorien
Mehr zu 領域とイメージのプロパティ finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!