2012-10-08 24 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部件。

相关问题