邊緣偵測是電腦視覺中的一種影像處理技術,涉及辨識影像中物件的輪廓。
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)。
例如:
弱邊緣像素(
以上是Canny 邊緣偵測的詳細內容。更多資訊請關注PHP中文網其他相關文章!