bwboundaries関数についてです。

4 次查看(过去 30 天)
Nagae Ryoya
Nagae Ryoya 2019-10-10
评论: Etsuo Maeda 2019-10-23
画像のセグメンテーション後、
閾値を設定し、
画像の二値化、
’imfill’を用いた二値化画像の穴埋め、
’bwmorph’によるエッジ化、
’imbidilate’,’imfill’,’imerode’を用いたモルフォロジー処理、
二値化画像のクリーンナップを行ったあと、bwboundaries関数を使いたいのですが、うまくいきません。
jpg拡張子の画像を読み込ませています。
解決策はありますか?
  2 个评论
Yoshio
Yoshio 2019-10-11
どのようにうまくいかないのか、エラーが出るのか、意図したように動作しないのか、具体的に、できればデータとうまくいかないプログラムを添付して説明いただけないでしょうか。
Nagae Ryoya
Nagae Ryoya 2019-10-15
%%画像入力
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');
%%エッジ化
kaki_th=bwmorph(kaki_th,'remove');
figure(6)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%モルフォロジー処理 膨張
kaki_th=imdilate(kaki_th,strel('disk',10));
figure(7)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%モルフォロジー処理 画像の塗りつぶし
kaki_th=imfill(kaki_th,'holes');
figure(8)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%モルフォロジー処理 収縮
kaki_th=imerode(kaki_th,strel('disk',10)); %モルフォロジー処理(元の画像大きさまで縮小)
figure(9)
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(10)
imshow(kaki_th,'Border','tight','InitialMagnification','fit');
%%bwboundaries
BW=~imbinarize(kaki_th);
B=bwboundarize(BW,'noholes');
figure(11)
imshow(BW)
hold on
for kk=1:numel(B)
plot(B{kk}(:,2),B{kk}(:,1),'r','LineWidth',2)
end
というプログラムです。
エラーは以下のように出ます。
エラー: imbinarize
I は以下のいずれかのタイプが必要です:
uint8, uint16, uint32, int8, int16,
int32, single, double
実際の型は logical でした。
エラー: imbinarize>validateImage (line
261)
validateattributes(I,supportedClasses,supportedAttribs,mfilename,'I');
エラー: imbinarize>parseInputs (line
197)
validateImage(I);
エラー: imbinarize (line 133)
[I,isNumericThreshold,options] =
parseInputs(I,varargin{:});
エラー: matumaru2 (line 52)
BW=~imbinarize(kaki_th);
regionprops関数を並行利用することも確認します。
よろしくお願いします。

请先登录,再进行评论。

采纳的回答

Etsuo Maeda
Etsuo Maeda 2019-10-17
编辑:Etsuo Maeda 2019-10-17
レスポンスが止まっているみたいなので、回答しておきます。
エラー出力を下から読んでみてください。
エラー: imbinarize
I は以下のいずれかのタイプが必要です:
uint8, uint16, uint32, int8, int16,
int32, single, double
実際の型は logical でした。
エラー: imbinarize>validateImage (line
261)
validateattributes(I,supportedClasses,supportedAttribs,mfilename,'I');
エラー: imbinarize>parseInputs (line
197)
validateImage(I);
エラー: imbinarize (line 133)
[I,isNumericThreshold,options] =
parseInputs(I,varargin{:});
エラー: matumaru2 (line 52)
BW=~imbinarize(kaki_th);
"二値化画像のクリーンナップを行ったあと、bwboundaries関数を使いたいのですが、うまくいきません。"
と質問されていますが、bwboundaries関数でエラーになっているのではなく、その一行前の imbinarize関数でエラーになっています。
matumaru2 の imbinarizeでエラーになっているのは、imbinarize の validateImageでエラーになっていることが原因です。
validateImageが何をしているのかは、一見わからないと思いますが、エラーメッセージを読めばわかるはずです。
エラー: imbinarize
I は以下のいずれかのタイプが必要です:
uint8, uint16, uint32, int8, int16,
int32, single, double
実際の型は logical でした。
つまり、imbinarizeは
uint8, uint16, uint32, int8, int16,
int32, single, double
の入力を受け付けますが、実際に入力された kaki_th は logical であったためにエラーになっています。
doc imbinarize
で入力引数の制限を確認してみてください。
imbinarizeは入力を1/ 0 にする関数で、logicalの配列は最初から1/ 0 なので、当たり前といえば当たり前のエラーですね。
BW を kaki_th の1/ 0 を反転したものにしたいのであれば、
BW = ~kaki_th;
としておけば良さそうです。
HTH
  5 个评论
Nagae Ryoya
Nagae Ryoya 2019-10-19
ありがとうございます。エラーは解決しました。
ですが、さらに問題があり、質問の際に使用した画像とは異なる画像で、プログラムを実行しましたが、うまく二値化の黒い部分に沿って赤いラインがでませんでした。
bwboundaries関数の例にあるように黒い部分に沿わせたいと考えています。
よろしくお願いいたします。
kaki_box_bw_boundaries_file.png
Etsuo Maeda
Etsuo Maeda 2019-10-23
BW — 入力バイナリ イメージ
の画をよくよく確認してみましょう。
HTH

请先登录,再进行评论。

更多回答(0 个)

产品

Community Treasure Hunt

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

Start Hunting!