2014-02-18 51 views
1

Point-Set如何在點集/ 2D形狀中找到「中心」定位點?

2D體素的中心座標表示2D點集。使用這些座標,畫面中的紅點指的是質量/重力的(近似)中心,即所有座標的平均值。忽略不同的灰度值,儘管它們巧合地提供了2D體素稍微更好的可見性:-)

綠點(大致)是我想得到的,但是如何(?)以原理方式?)。所以基本上我們在2D體素空間中有一個連通集,或者一組2D點,如果有幫助,可以假設整數座標。我想確定一個關於形狀「中心」的點,但是確定在形狀上,即該組的一部分。

僞代碼和/或C/C++歡迎:-)

更新:如果結構較厚,其實我喜歡綠點是有些中央而不是在輪廓上。

+1

也許你想用最少的形狀點均方距離,形狀的所有其他點? –

+0

@Niklas:聽起來很不錯。我能做到明顯小於O(N^2)嗎? –

+0

你可以在n log n中做所有對最遠的點。這給了你與任何其他點的最小距離的點。不確定所有點的平均距離。聽起來不可能,也許你可以向Google諮詢提示。 –

回答

0

這裏是解決方案,可以在O(N)找到綠點: -

Find mean (xm,ym) 

Suppose (xm+a),(ym+b) is a point in the dataset 

E(xi,yi) = sum of squared distances of all points from (xi,yi) 

E(xm,ym) = k because it is the mean. 

E(xm+a,ym+b) = summation => (xi-(xm+a))^2 + (yi-(ym+b))^2 

      = summation => ((xi-xm)-a)^2 + ((yi-ym)-b)^2 

      = summation => (xi-xm)^2 + (yi-ym)^2 + a^2 + b^2 - 2a*(xi-xm) - 2b*(yi-ym) 

      = summation => (xi-xm)^2 + (yi-ym)^2 + summation => a^2 + b^2 +..... 

    summation => (xi-xm)^2 + (yi-ym)^2 = E(xm,ym) = k 

Hence 

E(a,b) = summation => a^2 + b^2 - 2a*(xi-xm) - 2b*(yi-ym) 

as a,b are constant in summation 

E(a,b) = (a^2+b^2)*N - 2a*(summation=>(xi-xm)) - 2b*(summation=>(yi-ym)) 

summation=>(xi-xm) = 0 
summation=>(y1-ym) = 0 

E(a,b) = a^2 + b^2 

Now to get green point which will minimize E(a,b) 

a = xk-xm 
b = yk-ym 

find (xp,yp)=>minimum{E(a,b)} among all (xk,yk) 

summation=>(xi-xm) and summation=>(yi-ym) can be found in O(N) after finding mean 

hence E(a,b) can be found in O(1) and (xp,yp) in O(N) 
+2

非常有趣,但不是summation =>(xi-xm)= 0,其中xm = 1/N * summation - >(xi)和summation = >(xi-xm)= -N * xm +求和=>(xi)。我真的很喜歡這個派生(!)。看來你的方法只是找到最接近平均值的點,對吧? ...這不是一個不好的解決方案... –

+0

@ Dr.D在那裏很好的觀察(沒有期望它簡化得如此之多)。是的,公式表明它找到最接近平均值的點,任何這樣的點都會使均方距離最小化。 –

+0

@ Dr.D你可以有多個點,所以可以找到他們在x座標或y座標中的中位數以獲得一箇中心點 –