我在二進制圖像中有一些損壞的線段,我需要修復它們(使它們變直並處於原始厚度)。爲了做到這一點我必須找到段的中間點,所以當我檢查附近找到線條的粗細我就可以找到像素停在那裏是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