圖像增強:(一)邊緣檢測

 

以上三幅圖片只是提取裏圖像的邊緣,相信你很清楚的看出三張分別是飛機、手、和美女lean。所以得出結論:我們人類視覺通過物體邊緣就能夠做到識別物體。因此,物體邊緣是圖像中最基本也是最重要的特徵,圖像識別、理解的第一步就是邊緣檢測。

那麼什麼是圖像的邊緣:簡單的說,圖像的邊緣就是圖像變化顯著的地方。將圖像顯著變化的地方提取出來,就是邊緣檢測。

提到邊緣檢測,就要說到一個重要的數字圖像處理手段,圖像的卷積。

 

圖像卷積操作,或稱爲核操作,是進行圖像處理的一種常用手段,圖像卷積操作的目的是利用像素點和其鄰域像素之前的空間關係,通過加權求和的操作,實現模糊,銳化,邊緣檢測等功能。圖像卷積的計算過程就是卷積核(又稱卷積算子)按步長對圖像局部像素塊進行加權求和的過程。卷積覈實質上是一個固定大小的權重數組,該數組中的錨點通常位於中心。下面爲幾種常見的邊緣檢測卷積算子。​​​​​​

  1. 一階邊緣檢測                                                                                                                                                                                       (1)Sobel

 

該算子包含兩個3*3的矩陣,分別爲橫向和縱向。將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。

 

下圖爲sobel算子橫向和縱向matlab程序,及其效果圖。

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

h = [-1,0,1;-2,0,2;-1,0,1];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

 

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

%h = [-1,0,1;-2,0,2;-1,0,1];

h = [+1,+2,+1;0,0,0;-1,-2,-1];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

(2)Roberts

Roberts邊緣算子是一個2x2的模板,採用的是對角方向相鄰的兩個像素之差。從圖像處理的實際效果來看,邊緣定位較準,對噪聲敏感。適用於邊緣明顯且噪聲較少的圖像分割。

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

h = [1,0;0,-1];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

 

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

h = [0,1;-1,0];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

(3)prewitt

Prewitt算子是一階微分算子的邊緣檢測,利用像素點上下、左右鄰點的灰度差,在邊緣處達到極值檢測邊緣,去掉部分僞邊緣,對噪聲具有平滑作用。其原理是在圖像空間利用兩個方向模板與圖像進行鄰域卷積來完成,這兩個方向模板一個檢測水平邊緣,一個檢測垂直邊緣。同時,爲了在銳化邊緣的同時減少噪聲的影響,Prewitt算子從Robert算子的模板出發,由2x2擴大到3x3來計算差分,本質上是利用卷積運算的模板,最終效果是求灰度圖像各點的梯度,對應模板如下圖所示。

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

h = [1,1,1;0,0,0;-1,-1,-1];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

 

clear all;

close all;

I = imread('C:\Users\Administrator\Desktop\pic\lena.jpg');

h = [-1,0,1;-1,0,1;-1,0,1];

img = imfilter(I,h,'replicate');

figure(1);

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(img);

(4)canny

Canny邊緣檢測基本原理

     (1)圖象邊緣檢測必須滿足兩個條件:一能有效地抑制噪聲;二必須儘量精確確定邊緣的 位置。

     (2)根據對信噪比與定位乘積進行測度,得到最優化逼近算子。這就是Canny邊緣檢測 算子。

     (3)類似與Marr(LoG)邊緣檢測方法,也屬於先平滑後求導數的方法。

     2.Canny邊緣檢測算法:

     step1:用高斯濾波器平滑圖象;

     step2:用一階偏導的有限差分來計算梯度的幅值和方向;

     step3:對梯度幅值進行非極大值抑制;

     step4:用雙閾值算法檢測和連接邊緣。

 

2、二階邊緣檢測

(1)拉普拉斯

Laplace算子是二階微分線性算子,在圖像邊緣處理中,二階微分的邊緣定位能力更強,銳化效果更好,因此在進行圖像邊緣處理時,直接採用二階微分算子而不使用一階微分。但是,

Laplace算子對孤立象素的響應要比對邊緣或線的響應要更強烈,因此只適用於無噪聲圖象。存在噪聲情況下,使用Laplacian算子檢測邊緣之前需要先進行低通濾波。所以,通常的分割算法都是把Laplacian算子和平滑算子結合起來生成一個新的模板。

用卷積核表示爲:

(2)laplacian of gaussian(高斯拉普拉斯算子)

因爲拉普拉斯算子是對圖像二階求導的一種近似,所以它對於噪聲來說更加敏感。爲了克服這一點,通常在進行laplacian之前,先進行高斯平滑。將高斯平滑和拉普拉斯結合在一起,就形成如下卷積核(簡稱LOG):

效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章