matlab 实现同态滤波算法 并于直方均衡化相比较 看看谁的效果更好
一、灰度圖同態(tài)濾波與直方均衡化的比較
1、灰度圖同態(tài)濾波
Figure
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-U2OVYl29-1641880930896)(E:\Homework\數(shù)字圖像處理\課上\數(shù)字圖像處理作業(yè)8\圖片\2.png)]
Code
clear close allaIn = imread("body.jpg"); [aOut,x,y] = Homofilter(aIn); figure, subplot(121),imshow(aIn,[]),title('原圖') subplot(122),imshow(aOut,[0 70]),title('同態(tài)濾波后圖片') figure, plot(x,y),title("同態(tài)濾波器剖線")Function
function [aOut,x,y] = Homofilter(aIn,D0,rH,rL,c) % 這僅僅是一個同態(tài)濾波器 % aIn 需要進行濾波的灰度圖像 % D0 截止頻率,越大圖像越亮 % rH 高頻增益,需要大于1 % rL 低頻增益,取值在0和1之間 % c 銳化系數(shù) % 輸出為進行濾波之后的灰度圖像%設置預定參數(shù)(D0為濾波器半徑,rH>1,rL<1,是常系數(shù)) if nargin == 1 D0 = 80;rH = 2;rL = 0.2;c = 1.5; elseif nargin == 2rH = 2;rL = 0.2;c = 1.5; elseif nargin == 3rL = 0.2;c = 1.5; elseif nargin == 4c = 1.5; end%輸入圖像及轉(zhuǎn)為雙精度 aDouble = double(aIn);%獲取源圖像大小及填充 [ra,ca] = size(aIn); maxL = max(ra,ca); n = 1; while(maxL>2^n)n = n+1; end aZero = zeros(2^n,2^n); aZero(1:ra,1:ca) = aDouble; aFill = aZero;%讀取填充后圖像大小 [Ra,Ca] = size(aFill); [X,Y] = meshgrid(0:Ra-1,0:Ca-1);%制作濾波器 r = D0.*Ra./maxL;%%%留白點 Duv = (X+1-round(Ra/2)).^2 + (Y+1-round(Ca/2)).^2; Huv = (rH-rL).*(1-exp(-c.*(Duv./(r.^2))))+rL;%處理圖像 aLog = log(aFill+1); afft2 = myfft2(aLog.*(-1).^(X+Y)); aH = afft2.*Huv; aifft2 = myifft2(aH); ae = exp(aifft2.*(-1).^(X+Y))-1; aOut1 = ae(1:ra,1:ca); maxaOut1 = max(aOut1(:)); aOut = 255.*aOut1./maxaOut1;% %對比顯示效果 x = 0:Ra-1; y = Huv(Ra/2,:); end2、直方均衡化灰度圖
Figure
Code
clear close allaIn = imread("body.jpg"); aOut = stra_eq(aIn);%這是直方均衡化函數(shù) figure subplot(121),imshow(aIn,[]),title('原圖') subplot(122),imshow(aOut,[]),title('直方均衡化后圖片')3、對比結(jié)論
Figure
結(jié)論:
同態(tài)濾波在增強陰影部分的顯示更有優(yōu)勢。
直方均衡化增強了對比度但是對陰影部分的增強不明顯。且對原圖較亮部分增強后反而不容易觀察
二、彩色圖同態(tài)濾波與直方均衡化比較
1、同態(tài)濾波
Figure
Code
clear close allD0 = 500; rH = 2; rL = 0.2; c = 0.1;aIn = imread("yejing.jpg"); ar = aIn(:,:,1); ag = aIn(:,:,2); ab = aIn(:,:,3);aOut1 = aIn; aOut1(:,:,1) = Homofilter(ar,D0,rH,rL,c); aOut1(:,:,2) = Homofilter(ag,D0,rH,rL,c); aOut1(:,:,3) = Homofilter(ab,D0,rH,rL,c);figure,imshow(aIn,[]),title("原圖") figure,imshow(aOut1,[]),title("同態(tài)濾波后圖像")2、直方均衡化
Figure
Code
clear close allaIn = imread("yejing.jpg"); ar = aIn(:,:,1); ag = aIn(:,:,2); ab = aIn(:,:,3);aOut1 = aIn; aOut1(:,:,1) = stra_eq(ar); aOut1(:,:,2) = stra_eq(ag); aOut1(:,:,3) = stra_eq(ab);figure,imshow(aIn,[]),title("原圖") figure,imshow(aOut1,[]),title("直方均衡化后圖像")3、心得及結(jié)論
(1)在同態(tài)濾波器中,瑞華系數(shù)c關(guān)乎到輸出圖像的亮暗,小于1的時候圖像更亮,大于1后圖像迅速變暗。
(2)D0即濾波器半徑,濾波器半徑越大,圖像越亮,但是并非D0越大濾波效果越好,具體應該根據(jù)圖來確定,多調(diào)試參數(shù)才能找到適合每一張圖片的值
(3)對于直方均衡化的同態(tài)濾波的比較,不考慮細節(jié)的話,直方均衡化處理的圖片更加的美觀,增強效果也比較好,但是對于需要顯示更多的細節(jié)的時候,同態(tài)濾波能夠更容易分辨原圖中亮的部分。
三、過程中遇到的問題及糾錯
1、正確同態(tài)濾波和錯誤同態(tài)濾波的比較
粗看感覺兩幅圖相差不大,但是觀察兩幅圖放大n倍的像素點,就可以知道兩幅圖的差異(如下圖)
左邊的隨便放大都不會出現(xiàn)周期性的噪聲,右邊的放大后出現(xiàn)明顯的黑白交替點(周期性噪聲),此類錯誤不容易發(fā)現(xiàn)(因為結(jié)果看起來差不多),但是卻對最終的成像質(zhì)量有影響,尤其是對彩色圖的同態(tài)濾波有影響,如下圖所示:
正確同態(tài)濾波:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BlrT6CCK-1641880930900)(E:\Homework\數(shù)字圖像處理\課上\數(shù)字圖像處理作業(yè)8\圖片\10.png)]
錯誤同態(tài)濾波:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cApYvbRm-1641880930905)(E:\Homework\數(shù)字圖像處理\課上\數(shù)字圖像處理作業(yè)8\圖片\6.png)]
2、出現(xiàn)錯誤原因
錯誤代碼:
ae = exp(aifft2)-1;正確代碼:
ae = exp(aifft2.*(-1).^(X+Y))-1;在對傅里葉變化的圖像進行反變換后,未進行:
.??1(X+Y).*-1^{\left( X+Y \right)} .??1(X+Y)
導致混入了噪聲。
總結(jié)
以上是生活随笔為你收集整理的matlab 实现同态滤波算法 并于直方均衡化相比较 看看谁的效果更好的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 从别的数据库获取数据 ,访
- 下一篇: matlab人脸追踪,求大神帮助我这个菜