我有一個二進制圖像,我想檢測不連續的線並將它們鏈接起來。 我什麼都不知道(座標,角度等)。 任何人都可以引導我如何開始?假設我有這樣的形象:連接不連續的骨架形狀和不連續的線
我想加入不連續的線。並且我想存儲加入的行的信息(在一個數組中)以後使用。
我有一個二進制圖像,我想檢測不連續的線並將它們鏈接起來。 我什麼都不知道(座標,角度等)。 任何人都可以引導我如何開始?假設我有這樣的形象:連接不連續的骨架形狀和不連續的線
我想加入不連續的線。並且我想存儲加入的行的信息(在一個數組中)以後使用。
我發現你的問題很有趣,我會嘗試給你一些想法,但不幸的是不是一個完整的算法(你知道,這需要時間...)。我也會給你留下一些沒有答案的問題。
我認爲您發佈的圖像是二進制圖像,即黑色像素值爲零,白色像素值爲1。我忽略了紅色像素,因爲我認爲您已經繪製了它們以突出顯示您想要連接虛線的位置;忽略紅色像素意味着我將它們的值設置爲零。
首先我們需要一些定義。
非邊界像素具有8鄰居(西北,北,東北,東,東南,南,西南,西)像素:
abc
h*d
gfe
上圖中
該像素由*
及其8個鄰居a,b,c,d,e,f,g
和h
指示。
我限定端點像素作爲與一種的值與僅一個鄰居之一值的像素,剩餘鄰居具有零的值,因此,例如此圖顯示的端點像素
000
011
000
因爲d=1
和所有其餘的鄰居都是零。 下圖顯示了代替的像素這是不和端點像素,因爲它有兩個鄰居等於一(a=1
和e=1
)
100
010
001
現在我們可以開始描述一個簡單的算法的一部分。
在第一步找到所有的端點像素,並把它們放在一個向量中:在下面的圖像中,我標記了從1到15的端點(請注意,端點15在您發佈的圖像中未突出顯示)。
在第二步中,爲每個端點,發現其最接近的端點:例如考慮端點4,其最近的端點5.現在,如果你遵循一個連接端點的簡單規則的最接近的端點,你將有連接4-5,10-11,13-14的段,這些都很好。但考慮1:其最接近的端點是2或可能是3,但我希望算法只是連接2和3,而將1連接到最左邊的垂直線。我也想要6,9和12的相同的行爲。
現在不同的情況:什麼關於6,7和8?忽略8,最接近6的端點是7,但它們已經連接,我們如何管理這種情況?
最後,考慮15:爲什麼沒有在你張貼的圖片中突出顯示它?也許它應該被忽略?
感謝您的回覆,推理您提出的建議很明確,但我認爲他無法處理所有可能存在的案例。所以要回答你的問題案例15它將被忽略,我不知道我們如何能夠處理這個案件1,6,9和12.我認爲你的推理有所改進,我們如何能夠管理所有案件 – Bertrand
可能會有所幫助。
end-point
。稱這些爲reference point
。端點和參考點之間的矢量將給出擴展的方向。希望它有幫助。
您可以從某種線條檢測算法開始:http://www.ipol.im/pub/art/2012/gjmr-lsd/ 或Matlab的Hough-lines函數。 – GilLevi