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