1、Matlab簡述
Matlab是國際上最流行的科學與工程計算的軟件工具,它起源于矩陣運算,已經(jīng)發(fā)展成一種高度集成的計算機語言。有人稱它為“第四代”計算機語言,它提供了強大的科學運算、靈活的程序設計流程、高質量的圖形可視化界面設計、便捷的與其它程序和語言接口的功能。隨著Matlab語言功能越來越強大,不斷適應新的要求并提出新的解決方法,可以預見,在科學運算,自動控制與科學繪圖領域,Matlab語言將長期保持其獨一無二的地位。
2、幾種常用的邊緣檢測算子
邊緣是圖像的最重要的特征,。邊緣是指周圍像素灰度有階躍變化或屋頂變化的那些像素的集合。邊緣檢測主要是灰度變化的度量、檢測和定位。有很多種不同的邊緣檢測方法,同一種方法使用的濾波器也不盡相同。圖像邊緣檢測就是研究更好的邊緣檢測方法和檢測算子。
邊緣檢測的基本思想首先是利用邊緣增強算子,突出圖像中的局部邊緣,然后定義象素的“邊緣強度”,通過設置閾值的方法提取邊緣點集。由于噪聲和模糊的存在,監(jiān)測到的邊界可能會變寬或在某點處發(fā)生間斷。因此,邊界檢測包括兩個基本內容:
l 用邊緣算子提取出反映灰度變化的邊緣點集
l 在邊緣點集合中剔除某些邊界點或填補邊界間斷點,并將這些邊緣連接成完整的線
常用的檢測算子有微分算子、拉普拉斯高斯算子和canny算子。
在Matlab圖像處理工具箱中,提供了edge函數(shù)利用以上算子來檢測灰度圖像的邊緣。
2.1微分算子法
經(jīng)典的邊緣提取方法是考察圖像的每個像素的某個鄰域內灰度的變化,利用邊緣鄰近一階或二階方向導數(shù)變化規(guī)律,用簡單的方法檢測邊緣,稱為微分算子法。
導數(shù)算子具有突出灰度變化的作用,對圖像運用導數(shù)算子,灰度變化較大的點處算得的值較高,因此我們將圖像的導數(shù)算子運算值作為相應的邊界強度,所以可以通過對這些導數(shù)值設置閾值,提取邊界的點集。
一階導數(shù)是最簡單的導數(shù)算子。已知在點f(x,y)處,梯度grad(F(x,y))的幅度為:
它們分別求出了灰度在x和y方向上的變化率,但是要對每一個像素進行以上的運算,運算量較大,所以在實際應用中常用小區(qū)域模板卷積運算來進行近似計算。模板運算的想法是將賦予某一個像素的值作為它本身灰度值和相鄰象素灰度值的函數(shù)。運用中,對x,y方向各用一個模板。
2.1.1 Sobel算子
Sobel算子是濾波算子的形式來提取邊緣。X,Y方向各用一個模板,兩個模板組合起來構成1個梯度算子。X方向模板對垂直邊緣影響最大,Y方向模板對水平邊緣影響最大。
圖1 Sobel算子模板
2.1.2 robert算子
Robert算子是一種梯度算子,它用交叉的差分表示梯度,是一種利用局部差分算子尋找邊緣的算子,對具有陡峭的低噪聲的圖像效果最好:
模板如圖:
圖2 Robert算子模板
2.1.3 prewitt算子
prewitt算子是加權平均算子,對噪聲有抑制作用,但是像素平均相當于對圖像進行地同濾波,所以prewitt算子對邊緣的定位不如robert算子。模板如圖;
圖3 prewitt算子模板
代碼如下:
原始圖像為三位編織復合材料二維截面圖,對原始圖像進行前期處理
i=imread('d1.jpg');
i2=im2double(i);
ihd=rgb2gray(i2);
[thr,sorh,keepapp]=ddencmp('den','wv',ihd);
ixc=wdencmp('gbl',ihd,'sym4',2,thr,sorh,keepapp);
figure,imshow(ixc),title('消噪后圖像 ');
k2=medfilt2(ixc,[7 7]);
figure,imshow(k2),title('中值濾波');
isuo=imresize(k2,0.25,'bicubic');
%sobert、robert和prewitt算子檢測圖像邊緣
esobel=edge(isuo,'sobel');
erob=edge(isuo,'roberts');
eprew=edge(isuo,'prewitt');
subplot(2,2,1);
imshow(isuo);title('前期處理圖像');
subplot(2,2,2);
imshow(esobel);title('sobel算子提取');
subplot(2,2,3);
imshow(erob);title('roberts算子提取');
subplot(2,2,4);
imshow(eprew);title('prewitt算子提取');
2.2 Laplacian算子
拉普拉斯高斯算子是一種二階導數(shù)算子,將在邊緣處產(chǎn)生一個陡峭的零交叉。前面介紹的幾種梯度法具有方向性,不能對各種走向的邊緣都具有相同的增強效果。但是Laplacian算子是各向同性的,能對任何走向的界線和線條進行銳化,無方向性。這是拉普拉斯算子區(qū)別于其他算法的最大優(yōu)點。
對一個連續(xù)函數(shù),它在位置
的拉普拉斯算子定義如下:
在圖像邊緣檢測中,為了運算方便,函數(shù)的拉普拉斯高斯算子也是借助模板來實現(xiàn)的。其模板有一個基本要求:模板中心的系數(shù)為正,其余相鄰系數(shù)為負,所有系數(shù)的和應該為零。
圖5 Laplacian算子模板
2.3 Canny邊緣檢測法
Canny邊緣檢測是一種比較新的邊緣檢測算子,具有很好的邊緣監(jiān)測性能,在圖像處理中得到了越來越廣泛的應用。它依據(jù)圖像邊緣檢測最優(yōu)準則設計canny邊緣檢測算法:
(1) 首先用2D高斯濾波模板進行卷積以消除噪聲
(2) 利用導數(shù)算子找到圖像灰度地沿著兩個方向的偏導數(shù),并求出梯度的大小:
(3) 利用(2)的結果計算出梯度的方向
(4) 一旦知道了邊緣的方向,就可以把邊緣的梯度方向大致分為四種:水平、豎直、45度方向、135度方向。通過梯度的方向,就可以找到這個像素梯度方向的鄰接像素。
(5) 遍歷圖像,若某個像素的灰度值與其梯度方向上前后兩個像素的灰度值相比不是最大的,那么這個像素值置為0,即不是邊緣。
(6) 使用累計直方圖計算兩個閾值,大于高閾值的一定是邊緣,小于低閾值的一定不是邊緣,介于之間的,看這個像素的鄰接像素中有沒有超過高閾值的邊緣像素,如果有的話那么它就是邊緣了,否則它就不是邊緣。
調用Laplacian算子、canny算子檢測法檢測圖像邊緣的程序如下:
elog=edge(isuo,'log');
ecanny=edge(isuo,'canny');
subplot(1,2,1);
imshow(elog);title('log算子提取');
subplot(1,2,2);
imshow(ecanny);title('canny算子提取');
圖6 canny算子、Laplacian算子檢測結果
3.邊緣檢測結果比較
Roberts算子檢測方法對具有陡峭的低噪聲的圖像處理效果較好,但是利用roberts算子提取邊緣的結果是邊緣比較粗,因此邊緣的定位不是很準確。
Sobel算子檢測方法對灰度漸變和噪聲較多的圖像處理效果較好,sobel算子對邊緣定位不是很準確,圖像的邊緣不止一個像素。
Prewitt算子檢測方法對灰度漸變和噪聲較多的圖像處理效果較好。但邊緣較寬,而且間斷點多。
Laplacian算子法對噪聲比較敏感,所以很少用該算子檢測邊緣,而是用來判斷邊緣像素視為與圖像的明區(qū)還是暗區(qū)。
Canny方法不容易受噪聲干擾,能夠檢測到真正的弱邊緣。優(yōu)點在于,使用兩種不同的閾值分別檢測強邊緣和弱邊緣,并且當弱邊緣和強邊緣相連時,才將弱邊緣包含在輸出圖像中。
參考文獻
[1] 趙春暉.現(xiàn)代圖像處理技術及Matlab實現(xiàn)[M].北京:人民郵電出版社,2001.
[2] 阮秋琦.數(shù)字圖像處理學[M].北京:電子工業(yè)出版社,2001.
[3] 何斌.數(shù)字圖像處理[M].北京:人民郵電出版社,2001.