我在二进制图像中有一些损坏的线段,我需要修复它们(使它们变直并处于原始厚度)。为了做到这一点我必须找到段的中间点,所以当我检查附近找到线条的粗细我就可以找到像素停在那里是1变为0如何找到二进制图像中线段的x,y的中间点?
1
A
回答
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找到每个包围盒的中心。因为如果一个段是直线的,它总是边界框的对角线,因此框的中心也是半的中心。
1
假设
A = [xa ya];
B = [xb yb];
然后
C = round(mean([A;B]));
Matlab的round
轮朝向它们的最接近的整数,所以这最大限度地减少从分析中心(mean([A;B])
)的(城市街区)距离最近的像素。
如果要保持亚像素精度(对于大多数计算来说实际上是可取的,直到需要从结果到像素索引的显式映射),只需删除round
并仅使用mean
部件。
相关问题
- 1. 如何找到正在移动的二进制图像中的点的中心
- 2. 在二进制图像中找到物体之间的距离
- 3. 在线性时间内找到二进制图像中的特定索引?
- 4. JavaCV:如何在二进制图像中查找重要点
- 5. 试图找到二进制树中的节点的父节点
- 6. 如何在UIWebView中查找图像的中心/ x,y坐标
- 7. 如何清除二进制图像中未闭合的曲线?
- 8. 在图像中旋转后得到点(python,openCV)的点(x,y)
- 9. 如何从django-rest中的二进制字段获取图像
- 10. 查找图像中颜色的x,y坐标。节点JS
- 11. 如何绘制X轴,Y轴线图?
- 12. 如何在二进制图像中查找连接的组件?
- 13. 如何在Matlab中找到二进制图像中的所有连接组件?
- 14. 在二进制图像中查找直线和圆圈
- 15. 如何绘制(x,y)点中的点之间的路径图 - 逐步而不是直线?
- 16. 如何找到我的整个二进制图像的质量中心?
- 17. 如何绘制JPEG图像中的X和Y轴?
- 18. 如何绘制HTML中图像上项目的x,y坐标
- 19. 试图在swift中移动x和y字段中的图像
- 20. 翻转x = y线上的DICOM图像
- 21. 更改图像的x和y线
- 22. Matlab的:获取二进制图像轮廓的法线点
- 23. 二进制图像中2点之间的转换数0到1
- 24. 用x,y绘制图像与图像的中心点有关吗?
- 25. 如何在二进制3D图像中查找集群?
- 26. 将点(x,y)添加到具有时间轴x轴的d3多线图
- 27. 如何找到最接近点p(x,y,z)发出的矢量v(x,y,z)的椭球的切线?
- 28. VBScript - 图像到二进制
- 29. 如何在java中绘制x,y点的线,其中x和y是双精度型?
- 30. 如何将二进制图像转换为Java中的二进制数组?
不幸的是,这些部分并不直。你可以看到,这是形象我的意思[链接](http://imageshack.us/a/img825/1173/45157442.png) –
这里是我的想法,1找到段的两个端点的大致位置,使用regionprops。 2.进行Canny边缘检测,以便获取该细分的轮廓。 3.使用Dijkstra算法找出从一个端点到其他路径。 4.找到路径的中点。 – DXM