スケーリングがうまくいきません。

조회 수: 2 (최근 30일)
Nagae Ryoya
Nagae Ryoya 2019년 11월 29일
답변: Kenta 2019년 11월 30일
%%画像入力
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))
size=stats*pix;
以上のプログラムを用いて、statsというものを算出しました。画像に青い円を描きその長さを出力しています。
このstatsはピクセル数にあたるため、実際の長さに変換したいと考えています。
以下のプログラムから、使用している画像における、スケールを出力し、算出しようとしましたが、うまくできませんでした。
どのようなプログラムを使用すれば可能でしょうか。
%% 画像入力(寸法計算用)
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]を算出
エラーは以下の通りです。
'table' 型の入力引数の演算子 '*'
未定義です。
エラー: sisaku (line 43)
size=stats*pix;
よろしくお願いします。
それぞれの画像は、二枚あるため、リンク先に載せてあります。画像(''box_base.jpg''と''kaki_prototype.jpg'')
  댓글 수: 3
Nagae Ryoya
Nagae Ryoya 2019년 11월 30일
ワークスペースかなんかに、入力して、値は出ましたが、実際の値ではなく、ピクセル値が出てきてしまいます。
Kenta
Kenta 2019년 11월 30일
はい、それでピクセル値(ピクセル間距離の総和)がでますよね、それでピクセルあたりの実距離を掛け算して、距離をだそうとしているのですよね。stats自体は構造体で、出るはずで、エラーの原因はそのせいのはずです。つまり、エラーの原因はstats.Perimeterなどとしていないからで、ご質問にある目的を果たすためには、その値をもとにスケーリングしたらいいのではないでしょうか。

댓글을 달려면 로그인하십시오.

채택된 답변

Kenta
Kenta 2019년 11월 30일
ご質問の目的の値自体は、以下のようなコードで計算できます。
stats.Perimeterとして、ピクセル単位の距離を計算して、5回の平均で求めたピクセルあたりの距離でスケーリングしています。ただ、実際の値と整合性があるかは実際に正解と比べてみないとわからないです。
%%画像入力
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;

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 イメージ에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!