2016-12-08 6 views
0

を削除すると、detectMSERFeaturesメソッドはいくつかのオーバーラップするmsersを生成します。重複する領域を削除する方法はありますか?ありがとうoverlapping MSERs-matlab

+0

実際の領域はピクセルのリストとして与えられます。私は、MSERRegionsオブジェクトのLocationとAxesのプロパティで記述された省略記号の間に重なりが生じることを意味していると思いますか? –

+0

はい。私はより大きな楕円の中に含まれているすべての楕円を削除したい。 –

+0

含まれているか重複していますか? 2つの領域の小さな部分が重なるとどうなりますか? –

答えて

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(:)); 

をそれは素敵なアプローチではないのですが、それはトリックを行う必要があります。

関連する問題