8.霍夫變換:線條——霍夫的效果、噪聲對霍夫的影響、霍夫拓展_5
目錄
霍夫的效果
噪聲對霍夫的影響
霍夫拓展
本環節結束
霍夫的效果
這裡我將給你們展示一個Hough執行在真實影象上的例子來告訴你們它做得好和做得不好。
這是一張美國足球場的照片:
這是美式足球,你知道,用的球不是圓的。
我們執行一個有味道的邊緣探測器,我們得到這些邊緣,這些是一些有趣的邊緣:
然後我們要做的是通過一個霍夫累加器陣列來執行它:
你可以看到這裡的正弦曲線,有點分散:
但是你可以看到這些,這些方塊都是這些發現的峰值,這是用一些程式碼試圖尋找峰值:
你會注意到它們有很多很接近,對吧?
所以非常接近意味著:它們的角度是相同的,而且它們的位置大致相同。
相同的角度,相同的位置,是的,我的意思是,這是相同角度的線在這裡,這裡,這裡:
即使在這裡,相同的角度,相同的位置:
你會發現附近有峰值。
我給你們看這個峰值影象:
如果我畫出與這些峰中的每一個相聯絡的線,我會看到像這樣的東西。這裡有好訊息和壞訊息。
好訊息:它發現了大量的線段。
壞訊息:你會注意到它也漏掉了一些:
為什麼呢? 這與投票箱中發現的邊的性質有關,這些都是關於如何找到邊緣的細節。
你也會注意到這裡有一條青色的線,這是找到的最長的線段:
現在,應該有人會說:“等一下,這線段是什麼意思?”
在霍夫變換中,當你找到 m 和 b,這是一條無限長的線。這條線可以一直延伸到整個影象。
如果你想找到線段,選了這條線的點,把它們連起來或者把兩個最遠的點連起來。
或者做一些其他的操作沿著這條無限的線執行,看看在這附近有一個邊緣點或者在這附近的任何地方。
所以你必須做一些其他的操作,除了我們剛剛展示的投票為了找到線段。
對你們來說好訊息是,在你們的習題集裡,我只想讓你們找到無限長的直線。
你不必擔心找到影象中實際支援的線段。
噪聲對霍夫的影響
剩下的一些東西。
首先是噪聲對霍夫變換的影響。
所以,在這裡你能看到的是左邊的一個影象我們取了相同的一組卡通點,我們把它們打亂了一點:
我們給它們的位置添加了一些噪聲。
在右邊的影象,你看到的是霍夫的投票。
你會注意到,峰值,不是很精確:
事實上,如果我們有非常非常好的箱子,我們可能會完全錯過那個峰值:
所以,等下我們會講一點關於改變箱子的大小,關於噪音,作為一種使它工作的方法。
但是,會發生的是,少量的噪音會把你撞飛。
順便說一下,你能做的一件很酷的事,如果你想找到這裡的一般峰值,你會怎麼做?
你可以平滑這個影象,對吧?
你可以把它作為影象進行過濾,然後找到峰值。
現在你知道你已經移動了一些峰頂,因為你把它弄模糊了。
但現在你至少找到了峰值,你會說,我要再做一次霍夫變換,但這次我只關注那個區域:
好,所以我要建立一個新的陣列,帶有更精細的箱子,但只有在那裡,如果d或θ在那邊,我甚至不去計算那些選票,
那會讓你從一個嘈雜的影象到一個更好的影象。
還有一個問題:
如果我們有很多噪音怎麼辦?
假設我們只有噪音。在左邊,你得到的是一堆點,它們都是隨機的。
在右邊,每個人都有投票權。
去投票吧。結果是沒有真正的候選人。
但也許我們不知道,你可以偶然發現峰值。
所以有時候你不得不擔心,我發現的峰值是否真實?
如果你已經知道了,假設你知道這幅圖中有六條線,那麼你只找到六條最高峰,但是如果你不知道有多少個高峰,
你有一個問題,什麼時候一個高峰是真正的高峰,什麼時候它只是選票的意外排列?
霍夫擴充套件
我想談談霍夫變換的幾個擴充套件。
然後這些擴充套件中的一些會繼續,下一個環節或者下下一個環節。
到目前為止,人們使用最多的擴充套件是這裡顯示的使用梯度的擴充套件:
你會注意到我們的演算法幾乎完全一樣。
我們初始化累加器陣列:
我們遍歷每個點,但現在不是迴圈或遍歷所有可能的方向,
我們實際上在那個點取梯度,
我們從這個梯度取θ:
現在你可以拿一個θ,或者你甚至可以採取一系列的θ,你說,嗯,我知道它是,大約45度加上或減去10,
所以我會投票給 -35 到 55 ,但我不必擔心投票給所有其他人。
我把它寫在這裡就好像你只有一個值。
現在你有θ,你可以直接求解方程,就像我們以前一樣,我們增加累加器陣列。
好的是,通過使用梯度,你大大減少了投票時間,對吧?
你不用擔心,你只有一個點。另外,稍後,您可以使用它來減少維度。
這是人們最常使用的擴充套件。
事實上,整個方向的概念我們以後會講到其他一些擴充套件。
另外一個是拓展,記住當我們做邊緣檢測時,我們說一些邊緣比其他邊緣具有更強的幅度:
你必須設定一個閥值。好吧,你可以降低閥值,試著得到更多的邊。
但是你可能想要用更高的臨界值來計算邊緣。
那麼,更多地計算它們意味著什麼呢?
好吧,你可以想象更強的優勢會得到更多的選票。
另一個拓展,和我之前講的很相似,就是改變 和 d 的箱子大小。
拓展3:改變(d,)的取樣,以提供更多/更少的解析度。
正如我們之前所說的:大箱子很容易投票,它很快。
但有時你也會遇到類似的情況:
要找到一個箱子,你會遇到這樣的問題,因為噪音的原因,實際的路線是支援不同的箱子,所以擴充套件是分層進行的。
首先,做一個粗略的裝箱,你有一些更大的箱子,箱子能捕獲更多的值。
一旦你在那裡找到了峰值,你就可以在這些區域內找到更精細的陣列,而你,你可以提高模型的恢復能力。
最後,它不僅僅是一個擴充套件,而是一種全新的做事方式。
我們這樣做是為了線,但你可以很容易做到這一點。
我不應該這麼說。對於其他引數化的形狀,比如圓,你可以很直接地做這個,事實上,我們稍微做一下,你也可以的。
或者實際上,任何其他形狀,包括由它們的模板定義的形狀。
本環節結束
這個環節就到這裡。
毫無疑問,你們會回過頭來仔細看這個問題,因為這個演算法和資料集的操作將作為霍夫問題集第一部分的基礎。
當你在網上查這個東西的時候,你們中的很多人會想把它和我們在這裡看到的聯絡起來。
我要告訴你們的是,實現霍夫變換感覺比較簡單。
他們後來報告說,他們花了大約10個小時來做這個習題集。這是因為拓展等等。
我們在報紙上說的話幾乎都不起作用,因為我們必須讓它聽起來很適合發表。
在實際情況下,你可以使用理論,然後你必須對影象和AL和演算法進行揣摩。
——學會編寫自己的程式碼,才能練出真功夫。