2

MatlabでMSERが検出された後、返されるMSER領域は楕円になります。各地域を構成する正確なポイントを取得するにはどうすればよいですか?

簡単なコード:

REGIONS = detectMSERFeatures(I)

OpenCVでは、フィットした楕円と領域のポイント(等高線として)の両方を取得します。MatlabMSERパラメーターからOpenCVパラメーターへの直接マッピングが見つかりませんでした。そのため、MSERの検出にMatlabを使用することに固執しました。

ただし、フィットした楕円の代わりに、領域を構成する実際のポイントを取得する方法はありますか?

4

2 に答える 2

3

編集:たとえば、(matlab ドキュメントから) Plot MSER regions プロパティを使用して、必要なポイントを取得できます。

regions = detectMSERFeatures(I);
imshow(I);hold on;
plot(regions);

MSER 領域のプロット

figure; imshow(I);hold on;
plot(regions,'showPixelList',true, 'showEllipses',false);
hold off;

元の答え:

REGIONS は、重心 (X0、Y0)、方向角 (phi)、短軸と長軸(またはその半分: 楕円の a、b パラメーター) に関する情報を提供します。

Centroid : MSER 領域と同じ 2 次モーメントを持つ楕円の [xy] 重心座標の M 行 2 列の配列。 Axes : 2 要素ベクトル [majorAxis minorAxis]。このベクトルは、MSER 領域と同じ 2 次モーメントを持つ楕円の長軸と短軸を指定します。 Orientation : -pi/2 から +pi/2 ラジアンの範囲の値。この値は、X 軸から楕円の長軸までを測定した楕円の方向を表します。

格納された領域 (または COUNT プロパティ) ごとに、以下のコードを使用してループできます。

楕円の輪郭を描くには、次のコードを使用できます。

% These are just values to play with
a=10;
b=20;
phi=0.5236;
X0=40;
Y0=50;

 R  = [ cos(phi) sin(phi); -sin(phi) cos(phi) ];
 theta_r         = linspace(0,2*pi);
 ellipse_x_r     = X0 + a*cos( theta_r );
 ellipse_y_r     = Y0 + b*sin( theta_r );
 rotated_ellipse = R * [ellipse_x_r;ellipse_y_r];

 plot( rotated_ellipse(1,:),rotated_ellipse(2,:),'b' );

ここに画像の説明を入力

于 2012-12-28T05:53:44.727 に答える