从MATLAB中的MSER检测中获取区域点?

时间:2012-12-28 04:44:44

标签: matlab opencv image-processing computer-vision matlab-cvst

MSER detection in Matlab之后,返回的MSER区域是省略号。我们如何得到构成每个区域的确切点?

简单的代码:

REGIONS = detectMSERFeatures(I)

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

然而,有没有办法获得构成区域的实际点,而不是拟合的椭圆?

2 个答案:

答案 0 :(得分:3)

修改: 例如,您可以使用Plot MSER regions property获取所需的点数(来自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将为您提供信息regarding the Centroid (X0,Y0) the orientation angle (phi) and the minor and major axes(或他们的一半:椭圆的a,b参数)。

Centroid :M-by-2数组的[x y]质心坐标的椭圆,其具有与MSER区域相同的秒矩。 :双元素矢量,[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' );

enter image description here

答案 1 :(得分:0)

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

for i=1:length(regions) 
    coordinates=getfield(regions(i),'PixelList');
end