小波的祕密9_影象處理應用:影象增強
阿新 • • 發佈:2019-01-28
1.前言:
影象增強問題的基本目標是對影象進行一定的處理,使其結果比原圖更適合用於特定的應用領域。
在影象增強領域,影象增強問題主要通過時域和頻域兩種方法進行處理。時域方法通過直接在影象上作用運算元來解決。頻域上通過修改傅立葉變換系數來解決。這兩種方法的優劣還是十分明顯的,時域方法速度快但是會失去很多點點間的關聯性資訊;頻域方法可以很詳細的分離出點點間的相關資訊,但是比較耗時,需要做傅立葉正反變換,計算量很大。
2.小波分析的優勢
小波分析是對時域和頻域的權衡結果。傅立葉分析在所有點的解析度都是原始影象的尺度,對於問題本身的要求,我們可能並不需要這麼大的解析度,而單純的進行時域分析又顯得十分的粗糙。小波的靈活性在於我們可以選擇任意的分解層數,儘量減少計算量。
小波變換將一份影象分解成大小、位置和方向都不同的分量。在做逆變換之前可以改變小波變換域中某些係數的大小,從而實現影象增強的目標。
3.低頻係數增強,高頻係數衰減
<span style="font-size:18px;">clear all; load sinsin subplot(121);image(X); %畫出原始影象 colormap(map); xlabel('(a)原始影象'); axis square %下面進行影象的增強處理 %用小波函式sym4對X進行2層小波分解 [c,s]=wavedec2(X,2,'sym4'); sizec=size(c); %對分解係數進行處理以突出輪廓部分,弱化細節部分 for i=1:sizec(2) if(c(i)>350) c(i)=2*c(i); else c(i)=0.5*c(i); end end xx=waverec2(c,s,'sym4'); %下面對處理後的係數進行重構 %畫出重構後的影象 subplot(122);image(xx); colormap(map); xlabel('(b)增強影象'); axis square</span><span style="font-size:24px;"> </span>
4.鈍化處理
所謂的鈍化操作,就是保留影象的低頻部分。在時域中,我們可以直接進行平滑濾波;在頻域中,直接提取低頻成分就好。執行結果:clear all; load chess % 讀入chess訊號 % 分別儲存用DCT方法和小波方法的變換系數 blur1=X; blur2=X; % 對原影象做二維離散餘弦變換 subplot(221);image(wcodemat(X,192)); colormap(gray(256));xlabel('(a)原始影象'); subplot(222);image(wcodemat(X,192)); colormap(gray(256));xlabel('(b)原始影象'); ff1=dct2(X); % 對變換結果在頻域做BUTTERWORTH濾波 for i=1:256 for j=1:256 ff1(i,j)=ff1(i,j)/(1+((i*j+j*j)/8192)^2); end end % 重建變換後的影象 blur1=idct2(ff1); % 對影象做2層的二維小波分解 [c,l]=wavedec2(X,2,'db3'); csize=size(c); % 對低頻係數進行放大處理,並抑制高頻係數 for i=1:csize(2); if(c(i)>300) c(i)=c(i)*2; else c(i)=c(i)/2; end end % 通過處理後的小波係數重建影象 blur2=waverec2(c,l,'db3'); % 顯示三幅影象 subplot(223);image(wcodemat(blur1,192)); colormap(gray(256));xlabel('(c)採用DCT方法鈍化影象'); subplot(224);image(wcodemat(blur2,192)); colormap(gray(256));xlabel('(d)採用小波方法鈍化影象');
採用DCT在頻域做濾波的方法得到的鈍化結果更為平滑,這是因為DCT的方法解析度很高。而小波方法在很多地方有不連續現象,因為我們對係數做放大或抑制在與之兩側有間斷,而且分解層數很低,沒有完全分離出頻域的資訊。
5.銳化處理
銳化的目標與鈍化剛好相反,是為了突出高頻資訊,抑制低頻資訊。clear all; load chess; % 讀入chess訊號 % 分別儲存用DCT方法和小波方法的變換系數 blur1=X; blur2=X; subplot(221);image(wcodemat(X,192)); colormap(gray(256));xlabel('(a)原始影象'); subplot(222);image(wcodemat(X,192)); colormap(gray(256));xlabel('(b)原始影象'); % 對原影象做二維離散餘弦變換 ff1=dct2(X); % 對變換結果在頻域做BUTTERWORTH濾波 for i=1:256 for j=1:256 ff1(i,j)=ff1(i,j)/(1+(32768/(i*i+j*j))^2); end end % 重建變換後的影象 blur1=idct2(ff1); % 對影象做2層的二維小波分解 [c,l]=wavedec2(X,2,'db3'); csize=size(c); % 對高頻係數進行放大處理,並抑制低頻係數
影象處理結果:for i=1:csize(2); if(abs(c(i))<300) c(i)=c(i)*2; else c(i)=c(i)/2; end end % 通過處理後的小波係數重建影象 blur2=waverec2(c,l,'db3'); subplot(223);image(wcodemat(blur1,192)); colormap(gray(256));xlabel('(c)採用DCT方法銳化影象'); subplot(224);image(wcodemat(blur2,192)); colormap(gray(256));xlabel('(d)採用小波方法銳化影象');