2

Matlab 中检测 MSER后,返回的 MSER 区域是椭圆。我们如何获得构成每个区域的确切点?

简单的代码:

REGIONS = detectMSERFeatures(I)

在 OpenCV 中,我们得到拟合的椭圆以及区域的点(作为轮廓)。我找不到任何从 Matlab MSER 参数到 OpenCV 参数的直接映射。所以坚持使用 Matlab 检测 MSER。

但是,除了拟合椭圆之外,有没有办法获得构成区域的实际点?

4

2 回答 2

3

编辑:您可以使用Plot MSER 区域属性获得所需的点,例如(来自 matlab 文档):

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 参数)的信息。

质心:一个 M×2 数组,由 [xy] 质心坐标组成,椭圆的二阶矩与 MSER 区域相同。 Axes:一个二元素向量,[majorAxis minorAxis]。该向量指定椭圆的长轴和短轴,它们具有与 MSER 区域相同的二阶矩。 方向:从 -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 回答
0

您可以使用以下方法获取每个区域中的所有坐标:

for i=1:length(regions) 
    coordinates=getfield(regions(i),'PixelList');
end
于 2017-08-26T05:15:39.263 回答