canny邊(bian)緣檢測(cè)算法(canny邊緣檢測(cè)算法流程)
在本章中,我們將學(xué)習(xí)
Canny邊緣檢測(cè)的概念OpenCV函數(shù): cv.Canny()100理論Canny Edge Detection是一(yi)種流行的邊緣檢測(cè)算法。它由John F. Canny發(fā)明
這是一個(gè)多(duo)階段算法,我們將經(jīng)歷每個(gè)階段(duan)。
降噪
由于邊緣檢測(cè)容(rong)易受到圖像中噪聲的影響,因此第(di)一步是使用5x5高斯濾波器消除圖像中的噪聲(sheng)。我們已經(jīng)在前面(mian)的章節(jié)中看到了這一點(diǎn)。
查找圖像的強(qiáng)(qiang)度梯度
然后使用Sobel核在水平和垂直(zhi)方向上對(duì)平滑的(de)圖像進(jìn)行濾波,以在(zai)水平方向(Gx)和垂直方(fang)向(Gy)上獲得一階導(dǎo)數(shù)。從這兩張(zhang)圖片中,我們可以找到每個(gè)像素的邊緣(yuan)漸變和方向,如下所示:
漸變方向始終垂直于邊緣。將其舍入為(wei)代表垂直,水平和兩個(gè)對(duì)角線方向的(de)四個(gè)角度之一。
非極大(da)值抑制
在(zai)獲得梯度大小和方向后,將對(duì)圖像進(jìn)行全面掃描,以去(qu)除可能不構(gòu)成邊緣的所有不需要的(de)像素。為此,在每個(gè)像素(su)處,檢查像素是否是其在梯度方向上(shang)附近的局部最大值(zhi)。查看下面的圖片:
點(diǎn)A在邊緣(垂直方(fang)向)上。漸變方(fang)向垂直于邊緣。點(diǎn)B和C在(zai)梯度方向上。因此,將A點(diǎn)與B點(diǎn)和C點(diǎn)(dian)進(jìn)行檢查,看是否形成局部最大值。如(ru)果是這樣,則考(kao)慮將其用于下一階段,否則將其抑(yi)制(置為零)。 簡(jiǎn)而(er)言之,你得到的結(jié)果是帶有“細(xì)邊”的二進(jìn)制圖像。
磁滯閾值
該階段確定哪些邊緣全(quan)部是真正的邊緣(yuan),哪些不是。為(wei)此,我們需要兩個(gè)閾值minVal和maxVal。強(qiáng)度梯度大于maxVal的任何邊緣必定(ding)是邊緣,而小于minVal的那些邊緣必定是非邊緣(yuan),因此將其丟棄。介于(yu)這兩個(gè)閾值之間(jian)的對(duì)象根據(jù)其連通性(xing)被分類為邊緣或非邊緣(yuan)。如果將它們連接到“邊緣”像素,則將它(ta)們視為邊緣的一部(bu)分。否則,它們也(ye)將被丟棄。見下圖(tu):
邊緣A在maxVal之上,因此被視(shi)為“確定邊緣”。盡管邊(bian)C低于maxVal,但它連(lian)接到邊A,因此也被視為有效邊(bian),我們得到了完整的曲線。但是邊緣B盡管在minVal之上并且與邊緣C處于同一區(qū)域,但是它沒有連接到任何“確保邊緣”,因此被丟棄(qi)。因此,非常重要的一(yi)點(diǎn)是我們必須相應(yīng)地選(xuan)擇minVal和maxVal以獲得正確的結(jié)果。
在邊緣為長(zhǎng)線的假設(shè)下,該(gai)階段還消除了小像素(su)噪聲。
因(yin)此,我們最終得到的是(shi)圖像中的強(qiáng)邊緣。
OpenCV中的Canny Edge檢(jian)測(cè)OpenCV將以上所有內(nèi)容(rong)放在單個(gè)函數(shù)cv.Canny()中(zhong)。我們將看到如(ru)何使用它。第一個(gè)(ge)參數(shù)是我們的輸入圖像。第(di)二個(gè)和第三個(gè)參數(shù)分別(bie)是我們的minVal和maxVal。第三個(gè)參數(shù)是perture_size。它是用于查(cha)找圖像漸變的Sobel內(nèi)核的大小。默認(rèn)情況下為3。最后(hou)一個(gè)參數(shù)是L2gradient,它指定用于查(cha)找梯度幅度的方程式。如果為True,則(ze)使com用上面提到的更精確的(de)公式,否則使用以下函數(shù):$Edge_Gradient ; (G) = |Gx| + |Gy|$。默認(rèn)情況下(xia),它為False。
import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)edges = cv.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()附加資源(yuan)Canny edge detector at Wikipedia:http://en.wikipedia.org/wiki/CannyedgedetectorCanny Edge Detection Tutorial:http://dasl.unlv.edu/daslDrexel/alumni/bGreen/www.pages.drexel.edu/weg22/cantut.html by Bill Green, 2002.練習(xí)編寫一個(gè)小應(yīng)用程序以找到Canny邊緣檢測(cè),該檢測(cè)的閾值可(ke)以使用兩個(gè)跟蹤欄進(jìn)行更改。這樣(yang),您可以了解閾值的影(ying)響。
本文地址:http://www.help-services.cn/tech-detail/t239199.html
- ·國(guó)有控股是什么意思(國(guó)企控股51%的企業(yè)值得..
- ·450美(mei)元是多少人民幣(4505美元是多少人..
- ·美金對(duì)人(ren)民幣的匯率(一美元等于多少人..
- ·礦機(jī)挖幣合法嗎(礦機(jī)挖幣是怎么回事犯法嗎)
- ·一百英鎊等于多少人民幣?(一百英鎊等于多少..
- ·蕎麥米的(de)七大正確吃法(蕎麥米的功效與作..
- ·銀行股票適合長(zhǎng)期投資嗎(銀行股票持有多久才..
- ·解禁股(gu)票是什么意思?是好消息還是壞消息..
- ·雅詩(shī)蘭黛(dai)精華液的正確使用方法(雅詩(shī)蘭..
- ·90000日元是多少人民幣(90000000日元等于多..
- ·剝好的大蒜瓣怎么保存(剝好的大蒜瓣怎么保存..
- ·a股是什么意思(股市入門常識(shí))