成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

opencv python Canny邊緣檢測

whinc / 1792人閱讀

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

Canny Edge Detection

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

這是一個多階段算法.

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

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

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


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

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

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

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

OpenCV中的Canny邊緣檢測

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

image:輸入圖像

threshold1和threshold2:minVal和maxVal

apertureSize:用于查找圖像漸變的Sobel內(nèi)核的大小,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()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42007.html

相關(guān)文章

發(fā)表評論

0條評論

whinc

|高級講師

TA的文章

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