画像における、最長の​部分と最短の部分を算​出することはできます​か。

3 views (last 30 days)
Nagae Ryoya
Nagae Ryoya on 3 Dec 2019
Commented: Kenta on 4 Dec 2019
以下の画像は、matlabのプログラムから、円を描かせたものです。
この画像の円の部分における、赤の線の長手方向の最長の長さ、緑の線の短手方向の最短の長さを算出するプログラムはありますか??
A5CC8CA8-9CE7-4590-8EEA-E65D44C2D526.jpg
kaki_black_light_max_complete.jpg
以下のURLにおいて、近しいことをしているのですが、この方法以外で、できれば、描いた青のラインを用いることができたらなと考えています。
青のラインを引くプログラムは以下に添付します。
%%画像入力
kaki_img=imread('kaki_prototype.jpg'); %画像読み込み
%kakiimg=imcrop(kakiimg)
figure(2)
imshow(kaki_img,'Border','tight','InitialMagnification','fit');
%%画像全体のセグメンテーション
kaki_red=kaki_img(:,:,1); %画像のセグメンテーション(赤要素検出)
figure(3)
imshow(kaki_red,'Border','tight','InitialMagnification','fit');
%%画像の二値化
kaki_th=kaki_red>145;
figure(4)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像の穴埋め
kaki_th=imfill(kaki_th,'holes');
figure(5)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像のクリーンナップ(周囲の白を除去)
kaki_th=bwareafilt(kaki_th,1);
figure(6)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%牡蠣の二値化画像の外周に色付け
% BW=imbinarize(I);
BW = kaki_th;
%%Detec boundarries
B=bwboundaries(kaki_th,'noholes');
figure(7)
imshow(BW)
hold on
for kk=1:numel(B)
%%'c'で色を固定
plot(B{kk}(:,2),B{kk}(:,1),'c','LineWidth',2)
end
stats=regionprops('table',BW,'Perimeter');
title(sprintf('boundary length is %d',stats.Perimeter))
%% 画像入力(寸法計算用)
sunpo=imread('box_base.jpg');
figure(1)
imshow(sunpo)
[x,y,P]=impixel(sunpo); %クリックしたpixelの座標
%注) クリックsuru画像の点は20mmと定める
[x,y]; %クリックした距離の間にあるpixelの数
Dis1=(((x(2)-x(1))^2)+((y(2)-y(1))^2))^(1/2); %1回目と2回目
Dis2=(((x(4)-x(3))^2)+((y(4)-y(3))^2))^(1/2); %3回目と4回目
Dis3=(((x(6)-x(5))^2)+((y(6)-y(5))^2))^(1/2); %5回目と6回目
Dis4=(((x(8)-x(7))^2)+((y(8)-y(7))^2))^(1/2); %7回目と8回目
Dis5=(((x(10)-x(9))^2)+((y(10)-y(9))^2))^(1/2); %9回目と10回目も距離
Disav=(Dis1+Dis2+Dis3+Dis4+Dis5)/5; %Dis1~5の平均値
pix=20/(Disav); %Disavの距離を20mmと最初に設定し,1pixelあたりの距離[mm]を算出
size=stats.Perimeter*pix;
プログラムで使用されている画像は以下のURLに添付してあります。
  1 Comment
Kenta
Kenta on 4 Dec 2019
こんにちは、URLにあるようなregionprops関数を利用するのがもっともよいと思うのですが
それではいけない理由はなんでしょうか。長軸と短軸は、どの関数を用いても同一になると思うのですが。

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!