天天看點

拉普拉斯銳化圖像

在圖像增強中,平滑是為了消除圖像中噪聲的幹擾,或者降低對比度,與之相反,有時為了強調圖像的邊緣和細節,需要對圖像進行銳化,提高對比度。

圖的邊緣是指在局部不連續的特征。

簡要介紹一下原理:

        拉普拉斯銳化圖像是根據圖像某個像素的周圍像素到此像素的突變程度有關,也就是說它的依據是圖像像素的變化程度。我們知道,一個函數的一階微分描述了函數圖像是朝哪裡變化的,即增長或者降低;而二階微分描述的則是圖像變化的速度,急劇增長下降還是平緩的增長下降。那麼據此我們可以猜測出依據二階微分能夠找到圖像的色素的過渡程度,例如白色到黑色的過渡就是比較急劇的。

        或者用官方點的話說:當鄰域中心像素灰階低于它所在的領域内其它像素的平均灰階時,此中心像素的灰階應被進一步降低,當鄰域中心像素灰階高于它所在的鄰域内其它像素的平均灰階時,此中心像素的灰階應被進一步提高,以此實作圖像的銳化處理。

應用:

         運用拉普拉斯可以增強圖像的細節,找到圖像的邊緣。但是有時候會把噪音也給增強了,那麼可以在銳化前對圖像進行平滑處理。

下面我們來推導二階微分與像素的關系:

       先看一階偏微分和推出的二進制函數微分:

拉普拉斯銳化圖像

一階微分法能夠用來檢測邊緣是否存在。

那麼二階微分法,也就是拉普拉斯算子就可以确定邊緣的位置。(有的文章中稱下式為拉普拉斯掩膜中心系數)

拉普拉斯銳化圖像

這樣可以找到一個模闆矩陣:

拉普拉斯銳化圖像

這個被稱為四鄰域也就是上面的二階微分法

拉普拉斯銳化圖像

這個是八鄰域。

【注】從上面的兩種模闆中就可以看出,如果一個黑色平面中有一個白點,那麼模闆矩陣可以使這個白點更亮。由于圖像邊緣就是灰階發生跳變的區域,是以拉普拉斯模闆對邊緣檢測很有用。

八鄰域的表示法為:

拉普拉斯銳化圖像

将算得的值替換原(x,y)處的像素值,可以得到類似邊界的地方,然後根據下式得到銳化圖像:

拉普拉斯銳化圖像

話不多說,上代碼(matlab編譯):

自己實作:

%拉普拉斯算子銳化圖像,用二階微分
%四鄰接g(x,y)=[f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]-4f(x,y)
clear
clc
I1=imread('D:\BingZhouWork\Image\lena.jpg');
I=im2double(I1);
[m,n,c]=size(I);
A=zeros(m,n,c);
%分别處理R、G、B
%先對R進行處理
for i=2:m-1
    for j=2:n-1
        A(i,j,1)=I(i+1,j,1)+I(i-1,j,1)+I(i,j+1,1)+I(i,j-1,1)-4*I(i,j,1);
    end
end

%再對G進行處理
for i=2:m-1
    for j=2:n-1
        A(i,j,2)=I(i+1,j,2)+I(i-1,j,2)+I(i,j+1,2)+I(i,j-1,2)-4*I(i,j,2);
    end
end

%最後對B進行處理
for i=2:m-1
    for j=2:n-1
        A(i,j,3)=I(i+1,j,3)+I(i-1,j,3)+I(i,j+1,3)+I(i,j-1,3)-4*I(i,j,3);
    end
end
B=I-A;

 imwrite(B,'lena.tif','tif');
 imshow('D:\BingZhouWork\Image\lena.jpg');title('不清晰圖像');figure
 imshow('lena.tif');title('得到的清晰圖像')
           

用matlab自帶的fspecial函數實作:

%matlab直接調用拉普拉斯方法
clear
clc
f=imread('D:\BingZhouWork\Image\unclear.jpg');
f2=im2double(f); %将f轉換歸一化的double類圖像,然後進行濾波
w=fspecial('laplacian',0);
g1=imfilter(f,w,'replicate');
g=f2-g1;
imshow(f);figure
imshow(g);
           

圖像銳化:

拉普拉斯銳化圖像
拉普拉斯銳化圖像
拉普拉斯銳化圖像
拉普拉斯銳化圖像

本文已經同步到微信公衆号中,公衆号與本部落格将持續同步更新運動捕捉、機器學習、深度學習、計算機視覺算法,敬請關注

拉普拉斯銳化圖像

繼續閱讀