邊緣檢測 Canny運算元

2021-10-03 09:53:04 字數 1790 閱讀 8574

一. canny 演算法簡介

canny邊緣檢測運算元是 john f.canny 於 1986 年開發出來的乙個多級邊緣檢測演算法。更為重要的是,canny 創立了邊緣檢測計算理論(computational theory ofedge detection),解釋了這項技術是如何工作的。canny邊緣檢測演算法以canny的名字命名,被很多人推崇為當今最優的邊緣檢測的演算法。

二. canny 邊緣檢測的步驟

高斯模糊 - gaussianblur

灰度轉換 - cvtcolor

計算梯度幅值和方向 - sobel / scharr

非最大訊號抑制 ?說明

排除非邊緣畫素,僅僅保留一些細線條(候選邊緣)。

滯後閾值

滯後閾值需要兩個閾值,高閾值t1 和 低閾值t2

① 若某一畫素位置的幅值超過了高閾值,該畫素被保留為邊緣畫素。

② 若某一畫素位置的幅值小於低閾值,該畫素被排除。

③ 若某一畫素位置的幅值在兩個閾值之間,該畫素僅僅在連線到乙個高於高閾值的畫素時被保留。

④ 推薦高低閾值比在 2:1 到 3:1 之間。

三. canny() 函式介紹

void

canny

(inputarray image,outputarray edges,

double threshold1,

double threshold2,

int aperturesize=3,

bool l2gradient=

false

)

四. **示例

int

main

(int argc,

char

** ar**)

imshow

("src img"

, src)

;// 轉為灰度影象

mat gray;

cvtcolor

(src, gray, cv_bgr2gray)

;// 高斯模糊

gaussianblur

(gray, gray,

size(3

,3),

0,0, border_default)

;// canny檢測

mat cannyimg;

canny

(gray, cannyimg,

100,

100*

2.5,3,

false);

imshow

("canny img"

, cannyimg)

; mat cannycolor;

cannycolor.

create

(src.

size()

, src.

type()

);// 二值影象cannyimg中為1的部分,src的值賦給cannycolor

src.

copyto

(cannycolor, cannyimg)

;imshow

("cannycolor img"

, cannycolor)

;waitkey(0

);return0;

}

結果示例:

邊緣檢測 Canny運算元

1 使用高斯濾波器,以平滑影象,濾除雜訊。2 計算影象中每個畫素點的梯度大小和方向。3 應用非極大值 non maximum suppression 抑制,以消除邊緣檢測帶來的雜散響應。4 應用雙閾值 double threshold 檢測來確定真實的和潛在的邊緣。5 通過抑制孤立的弱邊緣最終完成邊...

Canny運算元邊緣檢測資源

邊緣檢測是影象處理和計算機視覺中的基本問題,邊緣檢測的目的是標識數字影象中亮度變化明顯的點。影象屬性中的顯著變化通常反映了屬性的重要事件和變化。這些包括 i 深度上的不連續 ii 表面方向不連續 iii 物質屬性變化和 iv 場景照明變化。邊緣檢測是影象處理和計算機視覺中,尤其是特徵提取中的乙個研究...

Opencv學習 邊緣檢測 (Canny運算元)

一 canny邊緣檢測 void canny inputarray image,outputarray edges,double threshold1,double threshold2,int aperturesize 3,bool l2gradient false image 輸入影象 edge...