2013-02-27 102 views
1

所以我試圖找到圖像中的條紋線的旋轉角度,如附圖所示。 唯一的假設是這些線是平行的,它們的方向大約在90度左右[比如5度容差]。 我必須確保結果圖像中的條紋線是%100垂直。圖像的質量以及它們的直方圖/灰度值不同。所以基於非自適應閾值處理的方法已經在我的情況下失敗了[如果我不能使其適應性,我對基於閾值的方法不感興趣]。此外,有時在條紋線上有一些隨機的黑色簇。查找條紋/角度的角度

我做了什麼至今: 當然一)HoughLines是第一選擇,但我不能讓我的所有圖像的工作,我雖然這篇大文章下面的一些部分成功: http://felix.abecassis.me/2011/09/opencv-detect-skew-angle/。 我的理解失敗的主要原因是,我需要微調不同圖像的參數。參數如Canny/BW /形態學邊緣檢測(如果需要)| minLinelength/maxLineGap /等的參數。肯定有辦法破解這個並且使它工作,但是,對我來說這是一個脆弱的解決方案!

2)什麼我的工作,現在,是將圖像劃分到頂部片和底部片,然後找到每個片的波峯和波谷。然後基本上使用圖像的寬度和峯的平移來找到角度。我目前正在研究發現頂部切片的哪個峯值屬於底部切片中的哪一個峯值,因爲在我的計算中會存在一些假陽性峯值,這是由於在帶狀線上存在黑/白星團。

實施例:峯的位置爲切片: 頂分層= {1,33,67,90,110} BottomSlice = {3,14,35,63,90,104}

我實際上得到時類似載體提取峯值。因此可以看出,向量的長度可能會有所不同,任何想法我怎麼能得到一組這樣的:

{{1,3},{33,35},{67,63},{90,90 },{110104}}

我接受關於改善任何這些算法或一種全新的方法的想法。如果需要,我可以上傳更多圖片。

enter image description here

+0

只是想知道,這是一個微米級的光柵嗎? – 2013-02-27 19:07:32

+0

你是對的,它是。 – Hamed 2013-02-27 19:38:54

回答

1

如果你能得到點的列表爲單行,linear regression會給你的直線最適合點的公式。一個簡單的trig操作會將直線公式轉換爲一個角度。

你或許可以使用一些在線細化操作打開條紋變成點的列表。

+0

謝謝馬克。聽起來很棒,雖然它有點貴。如果我錯了,請糾正我。所以,我們基本上需要每行更多的樣本,這意味着更多的圖像切片和更多的峯值檢測。目前爲止,但現在我將擁有5數組_類似於我們的TopSlice = {1,33,67,90,110},其中第一個元素是_probably_表示第一行。 「不好」的部分是,我應該爲這些行中的每一行運行迭代算法,如線性迴歸?這將是超級昂貴的。 – Hamed 2013-02-27 18:04:13

+0

@如果你知道一行代表整個圖像,那麼就不需要在所有圖像上運行算法。 – 2013-02-27 18:09:10

+0

你是對的,但我想我應該使用我擁有的數據,而不是過濾掉很多有用的觀點。至少我可以有一個更好的近似值。無論如何,線性迴歸不是100%準確的。就像一個想法一樣,如何使用類似於http://en.wikipedia.org/wiki/RANSAC的算法。我基本上試圖用更少的迭代使用更多的數據點!我知道我的想法並不清楚,只是一個想法... – Hamed 2013-02-27 18:13:29

0

可以運行沿不同角度空間衍生物的一個累加器。如果您需要半角精度和5行樣本,則最多有10 * 5 * 1500 = 7.5m的迭代次數。您可以安全地將採樣率降低10倍,這將使您獲得每個樣本150個樣本的樣本量,從而將迭代次數減少到不到一百萬次。在那個點附近的某處,矯正圖像的操作應該成爲瓶頸。

+0

感謝您分享您的想法。你認爲在這些圖像上比較這種狹義衍生物的結果是可能的嗎? – Hamed 2013-02-28 14:28:07

+0

總之是的,但我相信你會讓我們知道,如果你嘗試它。 – 2013-02-28 14:43:59