bwboundaries関数についてです。
4 views (last 30 days)
Show older comments
画像のセグメンテーション後、
閾値を設定し、
画像の二値化、
’imfill’を用いた二値化画像の穴埋め、
’bwmorph’によるエッジ化、
’imbidilate’,’imfill’,’imerode’を用いたモルフォロジー処理、
二値化画像のクリーンナップを行ったあと、bwboundaries関数を使いたいのですが、うまくいきません。
jpg拡張子の画像を読み込ませています。
解決策はありますか?
2 Comments
Yoshio
on 11 Oct 2019
どのようにうまくいかないのか、エラーが出るのか、意図したように動作しないのか、具体的に、できればデータとうまくいかないプログラムを添付して説明いただけないでしょうか。
Accepted Answer
Etsuo Maeda
on 17 Oct 2019
Edited: Etsuo Maeda
on 17 Oct 2019
レスポンスが止まっているみたいなので、回答しておきます。
エラー出力を下から読んでみてください。
エラー: 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
More Answers (0)
See Also
Categories
Find more on モルフォロジー演算 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!