删除重叠的MSERs-matlab

时间:2016-12-08 09:32:34

标签: matlab image-processing mser

detectMSERFeatures方法产生几个重叠的msers。有没有办法去除重叠区域?感谢

1 个答案:

答案 0 :(得分:0)

有一个实现允许您检索FileExchange中椭圆下的绘制区域。

我简单地调查了一下,你可能需要稍微调整它,或者以一种稍微有点时髦的方式使用它:

I = imread('cameraman.tif');
regions = detectMSERFeatures(I);

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

[~,idx] = sort(sum(regions.Axes,2),'descend');

sortedAxes = regions.Axes(idx,:)/2; %division for later use in ellipseMatrix
sortedLocations = regions.Location(idx,:);
sortedOrientations = rad2deg(regions.Orientation(idx,:)); %degree for later use in ellipseMatrix

Ellipses

现在根据轴的总和对区域进行排序,这些轴或多或少与它们占用的大小成比例,您可以迭代它们,并使用FileExchange中的代码来检索它们各自的二进制映射。你必须改变代码,以便它不会返回图像,但这应该是相当简单的。如何调用它的一个例子:

i=1;
x0 = sortedLocations(i,1);
y0 = sortedLocations(i,2);
a = sortedAxes(i,1);
b = sortedAxes(i,2);
theta = sortedOrientations(i);

I2 = ellipseMatrix(x0,y0,a,b,theta,I',128,128,2)';


figure;
subplot(1,2,1);
imshow(I2);

subplot(1,2,2);
imshow(I2);
hold on;
plot(regions);

First Ellipse

如果对较小尺寸的剩余椭圆执行此操作(假设您已调整方法不在返回值中包含图像内容),并将交叉点的大小非常容易地与较小椭圆的大小进行比较:

intersection = EllipseMap1 & EllipseMap2;
sizeOfIntersection = sum(intersetion(:));
sizeOfSmallerEllipse = sum(EllipseMap2(:));

这不是一个好方法,但应该可以解决这个问题。