1. 程式人生 > >小波的祕密9_影象處理應用:影象增強

小波的祕密9_影象處理應用:影象增強

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)採用小波方法銳化影象');
影象處理結果: