2

イメージをセグメント化し、セグメント化されたイメージの周りにバウンディング ボックスを配置する Matlab プログラムを作成しています。私のコードは以前は機能していましたが、現在エラーが発生しています:

  • 長方形の使用エラー
  • 値は 4 要素ベクトルでなければなりません

問題の配列は、regionprops によって作成された BoundingBox であり、 4 つの要素のみを含む必要がありますが、何らかの理由でより多くの要素が含まれています。これが私のコードです(defaultSegment関数はバイナリ画像を返します):

function [ boundImage ] = boundSegment( input_image )
image = defaultSegment(input_image);
clear s;
s = regionprops(image, 'Area', 'BoundingBox');
numObj = numel(s);
index = 1;
for k = 1: numObj-1
    if s(k+1).Area > s(index).Area
        index = k+1;
    else
        index = index;
    end
end
figure, imshow(input_image);
rectangle('Position',s(index).BoundingBox);
boundImage = null;

(実際には、コードをサブプロットするのではなく、画像にバウンディング ボックスを直接配置できる方が望ましいと思いますが、ビジョン ツールボックスを使用せずにそれを行う方法が見つかりませんでした)

ありがとう!

4

2 に答える 2

2

imageはそれが2つ以上の次元を持っていると思います。を使用して確認してくださいsize(image)。が2 次元のBoundingBox場合にのみ 4 つの要素を持ちます。Matlab の regionprops ヘルプimageから:

'BoundingBox' — 領域を含む最小の四角形、1 行 Q *2 のベクトル。ここで、Q はイメージの次元数 (ndims(L)、ndims(BW)、または numel(CC.ImageSize)) です。

画像が 3 次元を持つ理由は、複数のカラー チャネルのためです。処理のためにグレースケールに変換する場合は、rgb2grayを使用します。

于 2013-01-21T22:21:37.627 に答える
0

3 つのチャネルに関する @shoelzer の回答を続けると、各セグメントを異なる色でペイントimageするセグメンテーション アルゴリズム ( ) が原因で、カラー イメージが得られると思われます。セグメンテーション ラベルの 2D マトリックスに変換してdefaultSegmentみてくださいrgb2indimage

于 2013-01-23T19:34:27.330 に答える