国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

opencv python Canny邊緣檢測

whinc / 1783人閱讀

摘要:雖然邊低于,但它連接到邊,因此也被視為有效邊,我們得到完整的曲線。但邊緣雖然高于并且與邊緣的區域相同,但它沒有連接到任何真實邊緣,因此被丟棄。

Canny Edge Detection

Canny邊緣檢測是一種流行的邊緣檢測算法.它是由John F. Canny開發的,

這是一個多階段算法.

減少噪音
由于邊緣檢測易受圖像中的噪聲影響,因此第一步是使用5x5高斯濾波器去除圖像中的噪聲.

計算圖像梯度
對平滑后的圖像使用sobel算子在水平與豎直方向上計算一階導數,得到圖像梯度(Gx和Gy)。根據梯度圖找到邊界梯度和方向
$$ Edge\_Gradient ; (G) = sqrt{G_x^2 + G_y^2} $$
$$ Angle ( heta) = an^{-1} igg(frac{G_y}{G_x}igg) $$
梯度方向一般與邊界垂直,有四類:垂直、水平、兩個對角線

非極大值抑制
在獲得梯度幅度和方向之后,完成圖像的全掃描以去除可能不構成邊緣的任何不需要的像素.為此,在每個像素處,檢查像素是否是其在梯度方向上的鄰域中的局部最大值.


A點位于邊緣(垂直方向),梯度方向與邊緣垂直. B點和C點處于梯度方向。 因此,用點B和C檢查點A,看它是否形成局部最大值.如果是這樣,則考慮下一階段,否則,它被抑制(置零).

滯后閾值
這個階段決定哪些邊緣是邊緣,哪些邊緣不是邊緣. 為此,我們需要兩個閾值,minVal和maxVal. 強度梯度大于maxVal的邊緣肯定是邊緣,而minVal以下的邊緣肯定是非邊緣的,因此被丟棄. 兩者之間的值要判斷是否與真正的邊界相連,相連就保留,不相連舍棄.

邊緣A高于maxVal,因此被視為“真實邊緣”。
雖然邊C低于maxVal,但它連接到邊A,因此也被視為有效邊,我們得到完整的曲線。
但邊緣B雖然高于minVal并且與邊緣C的區域相同,但它沒有連接到任何“真實邊緣”,因此被丟棄。
因此,我們必須相應地選擇minVal和maxVal才能獲得正確的結果

我們最終得到的是圖像中的強邊緣

OpenCV中的Canny邊緣檢測

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

image:輸入圖像

threshold1和threshold2:minVal和maxVal

apertureSize:用于查找圖像漸變的Sobel內核的大小,3(默認

L2gradient:指定用于查找梯度幅度的等式,如果它是True,它使用上面提到的更準確的等式,否則它=False(默認)使用:

$$Edge\_Gradient ; (G) = |G_x| + |G_y|$$

代碼

import cv2
from matplotlib import pyplot as plt

img = cv2.imread("img.jpg",0)

edges = cv2.Canny(img,100,200)

plt.subplot(121),plt.imshow(img,cmap = "gray")
plt.title("Original Image"), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = "gray")
plt.title("Edge Image"), plt.xticks([]), plt.yticks([])

plt.show()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42007.html

相關文章

發表評論

0條評論

whinc

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<