在MSER detection in Matlab之后,返回的MSER区域是省略号。我们如何得到构成每个区域的确切点?
简单的代码:
REGIONS = detectMSERFeatures(I)
在OpenCV中,我们得到拟合的椭圆以及区域的点(作为轮廓)。我找不到Matlab MSER参数到OpenCV参数的任何直接映射。因此坚持使用Matlab来检测MSER。
然而,有没有办法获得构成区域的实际点,而不是拟合的椭圆?
答案 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' );
答案 1 :(得分:0)
您可以使用以下方法获取每个地区的所有坐标:
for i=1:length(regions)
coordinates=getfield(regions(i),'PixelList');
end