2016-01-24 83 views
-1

我正在嘗試實現邊緣繪製算法。我獲得了圖像的線條,下一步是用給定的閾值來擬合線條,我的問題是給定1和0的矩陣(線條的一部分)穿過所有像素並開始擬合線條。 這個想法是通過最小二乘線擬合方法生成一個最小長度的初始線段,然後通過向它添加更多的像素來擴展該線段。在檢測到最小長度的初始線段後,我們應該遍歷鏈中剩餘的像素並計算每個像素與當前擬合線的距離。只要像素距離當前線有一定距離,就會將像素添加到當前線。我們繼續向當前線段 添加像素,直到我們轉角並且線條的方向發生變化。那時,我們輸出當前的線段。然後遞歸處理鏈的剩餘像素以提取更多線段。在圖像中擬合線

我的問題是,我不知道如何下手去在像素......如果有一個特定的方向,我應該先......

+0

通過標記C++和Matlab,你的意思是任何解決方案都可以接受嗎?沒有像OpenCV這樣的CV庫的C++將非常困難和冗餘 –

+2

您無法提供足夠的上下文。沒有任何進一步的解釋,你談論的大部分內容都是毫無意義的。 – flawr

回答

0

flawr同意。沒有更多的信息像輸入圖像和想要的結果例子很難回答。我想你會得到一些物體的不完整輪廓,並想要回歸/外推2D空間中的空白。在這種情況下我也:

  1. 獲得可見的輪廓線

    你已經有這個。

  2. 排序線通過它的方向角

    如果線(i)端點是A(i),B(i)然後:

    ang(i)=atan2(B(i).y-A(i).y,B(i).x-A(i).x) 
    
  3. 合併線

    合併具有所有行:

    • 類似角度
    • 不太遠
    • 具有小的垂直距離(如,如果是平行)
    • 合併的線不相交的任何其他線路
  4. 封閉間隙

    合併後只需找到所有輪廓邊緣點。這些點連接到單線。現在你可以應用你在OP中推斷的外推法,但是我會嘗試用簡單的線代替(如果連接不穿過任何線)將最近的這樣的點彼此連接起來。