regionprops関数の応用について。

2 Ansichten (letzte 30 Tage)
Nagae Ryoya
Nagae Ryoya am 21 Nov. 2019
Kommentiert: Kenta am 25 Nov. 2019
beboundaries関数の後にregionprops関数を使用し、画像の楕円に沿わせた曲線の長さを測りたいのですが、プログラムがうまく行きません。
regionprops関数の例が載っているページを確認しましたが、自分のプログラムと合わせることができません。
プログラムは以下の通りです。
%%画像入力
kaki_img=imread('box_dark.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>180;
figure(4)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像の穴埋め
kaki_th=imfill(kaki_th,'holes');
figure(5)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像のクリーンナップ(周囲の白を除去)
cc1=bwconncomp(kaki_th);
main1=regionprops(cc1,'Area');
A=[main1. Area];
[~,biggest]=max(A);
kaki_th(labelmatrix(cc1)~=biggest)=0; %最大の塊となっている1の要素以外の1の要素を0にする
figure(6)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%牡蠣の二値化画像の外周に色付け
BW=imbinarize(I);
%%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
  2 Kommentare
Kenta
Kenta am 21 Nov. 2019
box_dark.jpgを添付していただけますか?
Nagae Ryoya
Nagae Ryoya am 23 Nov. 2019
box_dark.jpg

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Kenta
Kenta am 24 Nov. 2019
BW = kaki_thとして、進めれば実行できました。
以下のような図が最終的に作られました。これでいかがでしょうか。
%%画像入力
kaki_img=imread('box_dark.jpeg'); %画像読み込み
%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>180;
figure(4)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像の穴埋め
kaki_th=imfill(kaki_th,'holes');
figure(5)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%二値化画像のクリーンナップ(周囲の白を除去)
cc1=bwconncomp(kaki_th);
main1=regionprops(cc1,'Area');
A=[main1. Area];
[~,biggest]=max(A);
kaki_th(labelmatrix(cc1)~=biggest)=0; %最大の塊となっている1の要素以外の1の要素を0にする
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
title(sprintf('boundary length is %d',size(B{1},1)))
result.PNG
  8 Kommentare
Nagae Ryoya
Nagae Ryoya am 25 Nov. 2019
スケーリングについて、やり方などあれば、教えていただきたいです。
Kenta
Kenta am 25 Nov. 2019
スケーリングは、撮影する対象の横に、リファレンスといって、何か長さが既知のものを置いておくのが一般的と思います。例えば、画像の横に、一辺10cmの紙をおいておき、それが今回の画像では何ピクセル分に相当するのかを見て、その比率で比例計算をすれば計算できます。ただ、今回の画像だとその基準となるマークも見つけにくそうですね。
今回は、うまくコードが走ったということで話を落ち着け、再度、上のことに取り組んでいただくのはいかがでしょうか。もしわからなそうなら、また今度聞いてもらえればと思います。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!