bwboundariesについてのエラーです。

3 views (last 30 days)
%%画像入力
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
color=['c'];
for kk=1:numel(B)
plot(B{kk}(:,2),B{kk}(:,1),'LineWidth',2)
end
のプログラムで、以下のようなエラーが出ます。
>> sisaku
エラー:
images.internal.imageDisplayValidateParams>validateCData
(line 122)
入力が logical (バイナリ) の場合は
2 次元でなければなりません。
エラー:
images.internal.imageDisplayValidateParams
(line 30)
common_args.CData =
validateCData(common_args.CData,image_type);
エラー:
images.internal.imageDisplayParseInputs
(line 79)
common_args =
images.internal.imageDisplayValidateParams(common_args);
エラー: imshow (line 253)
images.internal.imageDisplayParseInputs({'Parent','Border','Reduce'},preparsed_varargin{:});
エラー: sisaku (line 37)
どのように変更すれば、エラーが出なくなるのでしょうか。

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 20 Nov 2019
こんにちは。
上記のスクリプトを実行してみましたが、違うエラーになりますね。気付いた点として、
BW=imbinarize(I);
のIはスクリプト中には出てきません。おそらくkaki_thが入るのだと思います。エラーの内容からすると、作業の過程で残ってた変数が読みこまれて意図しない動きをしている可能性もありますので、スクリプトの先頭に
clear all, close all;
あたりを入れておくと、間違いが起きづらくなります。
さて、kaki_thの白い部分の外周に線を引きたいと想定して進めますと、そもそもkaki_thはすでに二値画像ですのでimbinarizeする必要はなく、削除しちゃって大丈夫です。
また、外周部分に線を引く際、色を指定できていないので
plot(B{kk}(:,2),B{kk}(:,1),'c','LineWidth',2)
とするか
plot(B{kk}(:,2),B{kk}(:,1),color(1),'LineWidth',2)
とplotの中に指定する色を入れてあげると色を変えることができます。あと、作成された書き方でもいいですし、線を引くだけならvisboundariesという関数も便利に使えます。
本題とはずれますが、構造体の中にアクセスするとき"."の後にスペースがあっても動作することを初めて知りました。ありがとうございます。
  1 Comment
Nagae Ryoya
Nagae Ryoya on 21 Nov 2019
エラーは出なくなりました。
ありがとうございます。

Sign in to comment.

More Answers (0)

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!