Canny邊緣檢測

2021-09-17 02:35:05 字數 1955 閱讀 6160

在 opencv 中只需要乙個函式:cv2.canny(),就可以完成以上幾步。讓我們看如何使用這個函式。這個函式的第乙個引數是輸入影象。第二和第三個分別是 minval 和 maxval。第三個引數設定用來計算影象梯度的 sobel卷積核的大小,預設值為 3。最後乙個引數是 l2gradient,它可以用來設定求梯度大小的方程。如果設為 true,就會使用我們上面提到過的方程,否則

使用方程:

消除雜訊:使用高斯平滑濾波器卷積降噪。

計算梯度幅值和方向:此處按照sobel濾波器的步驟來操作:(1)運用一對卷積陣列(分別作用於x和y方向),(2)計算梯度幅值和方向,梯度方向一般取0度、45度、90度、135度這4個可能的角度之一。

非極大值抑制:這一步排除非邊緣畫素,僅僅保留了一些細線條(候選邊緣)

滯後閾值:滯後閾值需要兩個閾值(高閾值和低閾值) 

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

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

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

void canny(inputarray,outputarray,double threshold1,double threshold2,int aperturesize=3,bool l2gradient=false) 

*第乙個引數,輸入影象,且需為單通道8位影象。 

*第二個引數,輸出的邊緣圖。 

*第三個引數,第乙個滯後性閾值。用於邊緣連線。 

*第四個引數,第二個滯後性閾值。用於控制強邊緣的初始段,高低閾值比在2:1到3:1之間。 

*第五個引數,表明應用sobel運算元的孔徑大小,預設值為3。 

*第六個引數,bool型別l2gradient,乙個計算影象梯度幅值的標識,預設值false。

r=cv2.canny(o,100,200)

o:原影象

100:最小閾值

200:最大閾值

import cv2

import numpy as np

import matplotlib.pyplot as plt

o=cv2.imread("image\\lena.bmp",cv2.imread_grayscale)

r=cv2.canny(o,100,200)

#使用cv2中的imshow()函式進行繪圖

兩個閾值threshold1和threshold2兩個值越小,內容越豐富

Canny邊緣檢測

1.canny邊緣檢測基本原理 1 圖象邊緣檢測必須滿足兩個條件 一能有效地抑制雜訊 二必須盡量精確確定邊緣的位置。2 根據對訊雜比與定位乘積進行測度,得到最優化逼近運算元。這就是canny邊緣檢測運算元。3 類似與marr log 邊緣檢測方法,也屬於先平滑後求導數的方法。2.canny邊緣檢測演...

Canny邊緣檢測

canny運算元是邊緣檢測運算元中最常用的一種,是公認效能優良的一種運算元,常被其它邊緣檢測運算元作為標準運算元進行優劣分析。canny演算法基本可以分為3個步驟 平滑 梯度計算 基於梯度值及梯度方向的候選點過濾 1 平滑 影象梯度的計算對雜訊很敏感,因此必須首先對其進行低通濾波。在這裡使用5 5的...

Canny邊緣檢測

canny邊緣檢測是一種非常流行的邊緣檢測演算法,是john canny在1986年提出的。它是乙個多階段的演算法,即由多個步驟構成。1.影象降噪 2.計算影象梯度 3.非極大值抑制 4.閾值篩選 我們就事後諸葛亮,分析下這個步驟的緣由。首先,影象降噪。我們知道梯度運算元可以用於增強影象,本質上是通...