2017-02-17 74 views
1

以下面的掃描圖像爲例:如何找到文檔的旋轉?

enter image description here

通過查看邊界,你可以清楚地看到,它是稍微向左旋轉。我如何檢測這個旋轉量? (爲了解決它)

邊緣檢測將「突出」邊界,但除了嘗試許多旋轉和建立x/y直方圖我不知道如何使用這些信息。迭代方法似乎比適合這樣一個簡單問題的計算量更大。

我在尋找僞代碼/算法的想法。因此,我沒有用編程語言來標記這個問題。但是,如果您想提供代碼,我更喜歡Python。

回答

1

什麼有關以下的方法(假設旋轉量小,並且的確是有足夠的文檔中水平/垂直線功能):經由Hough transform

  1. 提取所有(參數)線在文檔中,
  2. 分類線如任一接近水平或垂直(並且簡單地丟棄不能被分類到一些公差的那些),
  3. 魯棒適合旋轉的線的偏離它們的預期取向最小化(帶旋轉求解器的變體)。

對於3.,可以開始沒有任何RANSAC(只適合所有水平/垂直線的最佳旋轉),只有在需要照顧的明顯失誤時才添加它。

關於擬合線條的旋轉,每條線可以用單位2D矢量n和標量d s.t.參數化。 2D點M屬於該行iff n . M + d = 0。矢量n給出該線的方向,並基於分類預計接近參考矢量n_0e_x,-e_x,e_y-e_y,這取決於實際分類)。因此,一個可能的目標函數將是F(theta) = argmax_theta 1/2 sum_i | (R(theta) n^i) . n_0^i |^2其中theta是應用2D旋轉的角度,R(theta)對應的2 x 2旋轉矩陣。該目標函數可以找到最大化旋轉線向量和預期線向量之間對齊的旋轉。如果平方從目標函數中刪除,那麼目標函數實際上歸結爲2D中的簡化的絕對定向,而不用可以用SVD求解的平移/尺度。