首頁  >  文章  >  後端開發  >  Canny 邊緣偵測

Canny 邊緣偵測

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 19:01:20167瀏覽

邊緣偵測是電腦視覺中的一種影像處理技術,涉及辨識影像中物件的輪廓。

Canny Edge Detection

Canny 邊緣偵測是邊緣偵測的最佳技術之一。它旨在檢測清晰、清晰的邊緣,同時減少噪音並避免錯誤邊緣。它使用雙閾值方法來檢測影像中的邊緣:高閾值和低閾值。

img = cv2.Canny('photo.jpg')
img_edges = cv2.Canny(img, 100, 200)
// 100 is the low threshold
// 200 is the high threshold

閾值決定什麼成為邊緣,什麼不成為邊緣。為了做出這個決定,我們使用梯度值:

  • 如果梯度值高於高閾值,則將其視為強邊緣並添加到邊緣圖中。 (強邊緣)
  • 如果低於低閾值,則會被忽略。 (非邊緣)
  • 如果它在高閾值和低閾值之間,則僅當它連接到強邊緣時才保留。 (潛在優勢)

什麼是梯度值?

梯度值不是原始影像值。它們是透過檢查影像中像素強度變化的程度從原始影像中計算得出的數字。我們使用梯度值是因為原始影像值不能直接告訴我們邊緣在哪裡。

一個簡單的例子來說明像素強度的變化:如果兩個相鄰像素具有非常不同的值(例如 50 和 200,梯度值為 150),則存在很大的變化 - 它可能是邊緣。但如果兩個相鄰像素具有相似的值(例如 50 和 52,梯度值為 2),則變化很小,成為邊緣的可能性也很小。

計算出梯度值後,將它們與閾值進行比較,以確定什麼是強邊緣、潛在邊緣或非邊緣。

我們如何知道閾值之間的值與強邊緣相關?

透過使用一種稱為遲滯邊緣追蹤的方法,該方法決定連接的邊緣並應保持VS丟棄。演算法的工作原理是查看每個潛在邊緣像素的 8 個鄰居(直接相鄰的像素 - 頂部、底部、左側、右側和對角線)。任何直接或間接連接到強邊緣的像素都包含在最終結果中。

邊緣追蹤的工作原理:

   50   80  110   90
   70  250  190  120
   60  180  150   70
   40   60   80   50

想像一下上面的漸層圖:

應用閾值(低 = 100,高 = 200)後,強邊緣像素(> 200)立即保留為邊緣。這裡,只有像素 250 被標記為強邊緣。

潛在邊緣像素 (100–200) 為 110、190、120、180 和 150。現在我們有了潛在邊緣池,我們執行邊緣追蹤來決定哪些要保留,哪些要丟棄。此演算法檢查是否有任何潛在邊直接或間接連接到強邊 (250)。

例如:

  • 190 是 250 的鄰居,它直接連接到強邊,因此保留。
  • 150 是 190 的鄰居,它間接連接到強邊,因此也被保留。

弱邊緣像素(

以上是Canny 邊緣偵測的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn