李華琛
摘要:數(shù)字圖像邊緣檢測技術(shù)是信息科學(xué)中近些年來發(fā)展最為迅速的學(xué)科之一。圖像邊緣是圖像最基本的特征之一,在圖像分割、圖像識別以及其他圖像相關(guān)等領(lǐng)域中有著廣泛的應(yīng)用,其主要圖像處理方法就是精確定位圖像其邊緣,同時利用高斯濾波有效地抑制噪聲。邊緣檢測是圖像處理和計算機(jī)視覺中的一個重要分支,并且它也在圖像的分析中有著重要的意義,邊緣檢測的原理是識別圖像中亮度改變較為明顯的點(diǎn),其本質(zhì)是采用不同的算子進(jìn)行邊緣檢測并進(jìn)行修整。本文就是基于visual studio 2013和opencv通過C++綜合實現(xiàn)編程,分別用不同的算子,例如Laplacian算子、Scharr算子和Canny算子來實現(xiàn)靜態(tài)圖像的邊緣檢測,并且在檢測結(jié)束時進(jìn)行算法運(yùn)行結(jié)果的比對,在一些應(yīng)用實踐中選擇出適合的算法。
關(guān)鍵詞:opencv 邊緣檢測 算子
中圖分類號:TG409 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2016)11-0040-01
隨著數(shù)字計算機(jī)和計算機(jī)技術(shù)的發(fā)展和普及,數(shù)字圖像處理也迎來了快速發(fā)展時期,而數(shù)字圖像處理就是利用數(shù)字計算機(jī)以及其它的硬件設(shè)備對圖像信息轉(zhuǎn)換而獲得電信號進(jìn)行簡單的數(shù)學(xué)處理,以便提升圖像的實用性。隨著時代的進(jìn)步,邊緣檢測的精度和速度都在不斷提高,但是在邊緣較為復(fù)雜的情況下,常規(guī)的檢測算子無法檢測出所有類型的邊緣;而現(xiàn)今有些產(chǎn)品的要求是對某些較為明顯的輪廓有較高程度的要求,比如說人和景物的輪廓精確識別,其他淺顯的線條可以忽略等等不同的設(shè)計要求往往需要不同的算法才能達(dá)到目的。故而如今邊緣檢測在某些方向的應(yīng)用如檢測工業(yè)檢工件的邊沿、攝像機(jī)人臉輪廓選定等方面仍有巨大的發(fā)展空間。
1 邊緣檢測原理
邊緣是指圖像像素進(jìn)行灰度后階躍變化或類屋頂狀變化的像素集合,它經(jīng)常存在于目標(biāo)與背景、目標(biāo)與目標(biāo)、基元與基元,以及區(qū)域與區(qū)域之間。 因此它是圖像處理的首要任務(wù),同樣還是圖像形狀特征的基礎(chǔ);圖像的其他特征都是由邊緣和區(qū)域這些基本特征推導(dǎo)出來的。邊緣具有方向以及幅度兩個特征。如果沿邊緣方向,像素值變化相對平緩;而垂直與邊緣方向,則像素值變化又相對劇烈。而這種程度的劇烈有可能呈現(xiàn)斜坡狀,也可能呈現(xiàn)階躍狀。 邊緣上像素值的一階偏導(dǎo)偏大;二階偏導(dǎo)在邊緣處值接近于零,則結(jié)果呈現(xiàn)零交叉。最簡單的邊緣檢測方法是對原始圖像按像素其鄰域構(gòu)造邊緣算子。因為初始圖像包含噪聲,但是邊緣和噪聲的空間域表現(xiàn)為灰度有明顯的起落;在頻域通常的反應(yīng)為同是高頻分量,這就給圖像的邊緣檢測帶來了很多麻煩。
2 算子原理和使用流程
對圖像進(jìn)行邊緣檢測需要達(dá)到兩個基本條件:首先能夠有效地消除噪聲;再而準(zhǔn)確確定邊緣的位置。
(1)Canny邊緣檢測算子是根據(jù)對信噪比與定位乘積進(jìn)行檢測,從而得到最優(yōu)化算子。它的實現(xiàn)流程是①平滑圖像,抑制噪聲;②計算梯度方向和幅值;③非極大值抑制;④滯后其閾值。
(2)Laplacian 算子是歐幾里德空間中常用的二階微分算子,它的實現(xiàn)步驟是①對變量進(jìn)行定義;②使用高斯濾波消除噪聲;③轉(zhuǎn)換為灰度圖;④使用Laplace函數(shù);⑤計算絕對值,并將結(jié)果轉(zhuǎn)換成8位。
(3)scharr算子在某種程度上來說,更應(yīng)該算是一個濾波器,而不是算子,它在opencv中主要是配合Sobel算子而存在。它的實現(xiàn)流程與Sobel算法相似,但最后會進(jìn)行一個有目的的濾波過程。
3 部分程序及分析
Blur(edges3, edges3, 7); // 定義濾波處理后的圖像
cvtColor(frame, edges1, CV_BGR2GRAY); //顏色轉(zhuǎn)換函數(shù),彩色轉(zhuǎn)為灰色
Canny(edges1, edges1, 0, 30, 3); //canny算子邊緣檢測,閾值為0,30
Laplacian(src1_gray,dst,CV_16S,3,1,0, BODER_DEFAULT); // Laplacian算子邊緣檢測
Scharr(src,grad_x,CV_16S,1,0,1,0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Scharr(src,grad_y,CV_16S,0,1,1,0, BORDER_DEFAULT); cvtColor(src1, src1_gray, CV_RGB2GRAY);
convertScaleAbs(grad_y,abs_grad_y); // Scharr算子邊緣檢測
Laplacian(src1_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT)。
4 實驗結(jié)果
因本實驗的初衷是對對象按不同的算子進(jìn)行邊緣檢測并進(jìn)行修整,在試驗過程中發(fā)現(xiàn)對人像進(jìn)行的處理可以達(dá)到素描的效果。
程序在樹莓派上運(yùn)行:四個顯示框圖分別代表了source(原始)圖像、Canny算子、Laplacian 算子、首先對人進(jìn)行檢測(即實現(xiàn)了美拍效果)選取了2個樣本,如圖1所示。
5 實驗結(jié)論(表1)
Canny算子不僅可以進(jìn)行抗噪處理,還可以維持弱邊緣化的一種算子,在本實驗中改變了邊緣檢測算子對邊緣的敏感性,此種算子對噪聲的敏感性也會相應(yīng)的改變。因此,Canny算法的抗干擾能力和邊緣定位能力相互矛盾,找到一個恰當(dāng)?shù)?Canny算子的閾值,可以取得理想的效果。
用scharr算子進(jìn)行邊緣檢測,相對更加簡單方便,在生產(chǎn)實踐中被大量使用。但是,scharr算子無法將圖像的主體與背景嚴(yán)格地區(qū)分出來,因此提取的輪廓有時效果沒有其它算法精確。當(dāng)對提取結(jié)果精度要求比較低時,這種檢測方法得到了廣泛的應(yīng)用。
使用Laplacian算子只需要考慮邊緣的位置而不需對其周圍的象素灰度差值時效果更好。Laplacian算子對一些孤立像素的響應(yīng)要比對邊緣的響應(yīng)要效果跟好,一般用于無噪聲的圖像。
不同的算子有著不同的特點(diǎn)和提取效果,算子的評價指標(biāo)也是基于低錯誤率,高定位性以及其最小響應(yīng),在實際工程中,也是利用其不同特點(diǎn)來進(jìn)行邊緣檢測及圖像處理。
參考文獻(xiàn)
[1]劉瑞禎,于仕琪.OpenCV教程--基礎(chǔ)篇[M].北京航空航天出版社,2008.
[2]陳勝勇,劉盛.基于OpenCV計算機(jī)視覺技術(shù)實現(xiàn)[M].北京:科學(xué)技術(shù)出版社,2008.