2012-10-08 29 views

回答

1

我們稱A點和B點爲模糊度A(Xa,Ya)和B(Xb,Yb)

讓C爲中點。

C(Xc, Yc) 
Xc = (Xa + Xb)/2 
Yc = (Ya + Yb)/2 

我們有四個有趣的數字,兩個用於X座標,兩個用於Y座標。

Xmin = floor(Xc) 
Xmax = ceil(Xc) 
Ymin = floor(Yc) 
Ymax = ceil(Yc) 

中點的X座標是Xmin或Xmax,中點的Y座標是Ymin或Ymax。

所以我們有四個潛在的要點:(Xmin, Ymin), (Xmin, Ymax), (Xmax, Ymin), (Xmax, Ymax)

所以,最後,我們必須決定哪個點是最接近C.

從P(XP,YP)到C(XC,YC)距離爲:

sqrt(sqr(Xp - Xc) + sqr(Yp - Yc)) 

計算四個距離從四點到C,選擇最小值,這將是最好的中點。

2

假設損壞的線段是直的,你可以使用MATLAB regionprops找到每個包圍盒的中心。因爲如果一個段是直線的,它總是邊界框的對角線,因此框的中心也是半的中心。

+0

不幸的是,這些部分並不直。你可以看到,這是形象我的意思[鏈接](http://imageshack.us/a/img825/1173/45157442.png) –

+0

這裏是我的想法,1找到段的兩個端點的大致位置,使用regionprops。 2.進行Canny邊緣檢測,以便獲取該細分的輪廓。 3.使用Dijkstra算法找出從一個端點到其他路徑。 4.找到路徑的中點。 – DXM

1

假設

A = [xa ya]; 
B = [xb yb]; 

然後

C = round(mean([A;B])); 

Matlab的round輪朝向它們的最接近的整數,所以這最大限度地減少從分析中心(mean([A;B]))的(城市街區)距離最近的像素。

如果要保持亞像素精度(對於大多數計算來說實際上是可取的,直到需要從結果到像素索引的顯式映射),只需刪除round並僅使用mean部件。

相關問題