0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV入門之OpenCV的基本操作4

jf_78858299 ? 來源:DL INtoOUT ? 作者:AN ? 2023-02-07 14:34 ? 次閱讀

8、算子操作: sobel 算子、 scharr****算子、拉普拉斯算子、Canny邊緣檢測

Sobel算子是一種離散的微分算子 ,結(jié)合高斯平滑和微分求導(dǎo)運(yùn)算。該算子利用局部差分尋找邊緣(近似等于微分),計(jì)算所得的是一個(gè)梯度的近似值,用來邊緣檢測的。

Sobel算子對(duì)圖像求一階導(dǎo)數(shù),一階導(dǎo)數(shù)越大,說明像素在該反向變換越大,邊緣信號(hào)越強(qiáng)。Sobel算子采用離散差分算子計(jì)算圖像像素點(diǎn)亮度值的近似梯度。

圖片

綜合考慮兩個(gè)方向的變化:

圖片

scharr算子與sobel算子類似

圖片

Laplacian算子則是求二階導(dǎo)

注:

圖片

一般情況下:

(1)一階導(dǎo)數(shù)通常會(huì)產(chǎn)生較粗的邊緣;

(2)二階導(dǎo)數(shù)對(duì)精細(xì)細(xì)節(jié),如細(xì)線、孤立點(diǎn)和噪聲有較強(qiáng)的響應(yīng);

(3)二階導(dǎo)數(shù)在灰度斜坡和灰度臺(tái)階過渡處會(huì)產(chǎn)生雙邊沿響應(yīng);

(4)二階導(dǎo)數(shù)的符號(hào)可以確定邊緣的過渡是從亮到暗還是從暗到亮;

(5)二階導(dǎo)數(shù)對(duì)細(xì)節(jié)更敏感。

def EdgeDetection():
    # ---識(shí)別圖像的邊緣---#
    # 邊緣是像素值發(fā)生躍遷的位置,
    # sobel算子,[[-1,0,1],[-2,0,2],[-1,0,1]]
    # 對(duì)圖像求一階導(dǎo),一階導(dǎo)數(shù)越大,說明像素在該方向變化越大,邊緣信號(hào)越強(qiáng)
    chess = cv2.imread('./images/qi.jpg')
    dx = cv2.Sobel(chess,-1,1,0,ksize=3)
    dy = cv2.Sobel(chess,-1,0,1,3)
    img_sobel = cv2.add(dx,dy)
    img_sobel1 = cv2.addWeighted(dx,0.5,dy,0.5,0)


    # scharr算子[[-3,0,3],[10,0,10],[-3,0,3]]
    dx = cv2.Scharr(chess,-1,1,0)
    dy = cv2.Scharr(chess,-1,0,1)
    img_scharr = cv2.add(dx,dy)


    # 拉普拉斯算子,二階求導(dǎo)
    img_Lap = cv2.Laplacian(chess,-1,ksize=3)
    # 卷積實(shí)現(xiàn)
    kernel = np.array([[0,1,0],[1,-4,1],[0,1,0]])
    img_L = cv2.filter2D(chess,-1,kernel)


    # canny邊緣檢測
    # 一般步驟:
    # 1、先進(jìn)行去噪,高斯濾波
    # 2、求梯度,對(duì)平滑后的圖像用sobel算子求梯度和方向,
    #   方向用arctan(Gy/Gx),方向被歸為4類,垂直水平和兩個(gè)對(duì)角線
    # 3、非極大抑制:去除不是邊界的點(diǎn),遍歷圖像,判斷當(dāng)前點(diǎn)是否是周圍像素點(diǎn)中具有相同方向上的梯度最大值
    # 4、滯后閾值,設(shè)定邊界,最小和最大,保留之間的,且是連續(xù)的
    img_canny = cv2.Canny(img,30,50)
    
    cv2.imshow("imshow", np.hstack((img_Lap,img_L)))
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Canny邊緣檢測算法

1、高斯模糊——gaussian

2、灰度轉(zhuǎn)換——cvtColor

3、計(jì)算梯度——Sobel/Scharr

4、非最大信號(hào)抑制

5、高低閾值輸出二值圖像

第一步:使用高斯濾波器進(jìn)行濾波,去除噪音點(diǎn)

第二步:使用sobel算子,計(jì)算出每個(gè)點(diǎn)的梯度大小和梯度方向

Sobel核在水平和垂直方向上對(duì)平滑的圖像進(jìn)行濾波,以在水平方向(Gx)和垂直方向(Gy)上獲得一階導(dǎo)數(shù)

圖片

第三步:使用非極大值抑制(只有最大的保留),消除邊緣檢測帶來的雜散效應(yīng)

在獲得梯度大小和方向后,將對(duì)圖像進(jìn)行全面掃描,以去除可能不構(gòu)成邊緣的所有不需要的像素。為此,在每個(gè)像素處,檢查像素是否是其在梯度方向上附近的局部最大值。

圖片

點(diǎn)A在邊緣(垂直方向)上。漸變方向垂直于邊緣。點(diǎn)B和C在梯度方向上。因此,將A點(diǎn)與B點(diǎn)和C點(diǎn)進(jìn)行檢查,看是否形成局部最大值。如果是這樣,則考慮將其用于下一階段,否則將其抑制(置為零)。簡而言之,得到的結(jié)果是帶有“細(xì)邊”的二進(jìn)制圖像。

第四步:應(yīng)用雙閾值(磁滯閾值),來確定真實(shí)和潛在的邊緣

需要兩個(gè)閾值minVal和maxVal。強(qiáng)度梯度大于maxVal的任何邊緣必定是邊緣,而小于minVal的那些邊緣必定是非邊緣,因此將其丟棄。介于這兩個(gè)閾值之間的對(duì)象根據(jù)其連通性被分類為邊緣或非邊緣。如果將它們連接到“邊緣”像素,則將它們視為邊緣的一部分。否則,它們也將被丟棄。

圖片

邊緣A在maxVal之上,因此被視為“確定邊緣”。盡管邊C低于maxVal,但它連接到邊A,因此也被視為有效邊,我們得到了完整的曲線。但是邊緣B盡管在minVal之上并且與邊緣C處于同一區(qū)域,但是它沒有連接到任何“確保邊緣”,因此被丟棄。因此,非常重要的一點(diǎn)是我們必須相應(yīng)地選擇minVal和maxVal以獲得正確的結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    180

    文章

    2956

    瀏覽量

    229868
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1272

    瀏覽量

    56507
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    8

    文章

    1690

    瀏覽量

    45875
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41179
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenCV_編程簡介(入門必讀)

    opencv編程簡介,入門必讀,適合新手簡單了解opencv的相關(guān)知識(shí)。
    發(fā)表于 03-21 13:49 ?11次下載

    基本閾值操作_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:基本閾值操作
    發(fā)表于 06-06 15:39 ?8次下載

    基本鼠標(biāo)操作_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:基本鼠標(biāo)操作
    發(fā)表于 06-06 15:39 ?5次下載

    OpenCV進(jìn)行基本繪圖_《OpenCV3編程入門》書本配套源

    OpenCV3編程入門》書本配套源代碼:用OpenCV進(jìn)行基本繪圖
    發(fā)表于 05-11 16:46 ?36次下載

    支持向量機(jī)SVM引導(dǎo)_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:支持向量機(jī)SVM引導(dǎo)
    發(fā)表于 06-06 15:52 ?2次下載

    OpenCV3編程入門-源碼例程全集-OpenCV開發(fā)環(huán)境的配置

    OpenCV3編程入門-源碼例程全集-OpenCV開發(fā)環(huán)境的配置,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:27 ?20次下載

    OpenCV3編程入門-源碼例程全集-基本閾值操作

    OpenCV3編程入門-源碼例程全集-基本閾值操作,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:55 ?0次下載

    OpenCV3編程入門-源碼例程全集-基本鼠標(biāo)操作

    OpenCV3編程入門-源碼例程全集-基本鼠標(biāo)操作,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:55 ?0次下載

    支持向量機(jī)SVM引導(dǎo)_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-支持向量機(jī)SVM引導(dǎo),感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?1次下載

    OpenCV進(jìn)行基本繪圖_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-用OpenCV進(jìn)行基本繪圖,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?3次下載

    OpenCV入門OpenCV的基本操作1

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:19 ?709次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>1

    OpenCV入門OpenCV的基本操作2

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:19 ?771次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>2

    OpenCV入門OpenCV的基本操作實(shí)戰(zhàn)代碼

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:24 ?729次閱讀

    OpenCV入門OpenCV的基本操作3

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:33 ?547次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>3

    OpenCV入門OpenCV的基本操作5

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列
    的頭像 發(fā)表于 02-07 14:35 ?511次閱讀