接下來(lái)我們討論圖像的重構。我編寫(xiě)的重構程序中,為了比較分解圖像和重構圖像,首先繪出經(jīng)過(guò)小波分解的圖像,然后再進(jìn)行重構。在繪制分解圖像和重構圖像的過(guò)程中,要注意數據格式的轉換。
function y=mywaverec2(x,dim)
% 函數 MYWAVEREC2() 對輸入的分解系數矩陣x進(jìn)行 dim 層重構,得到重構矩陣 y
% 輸入參數:x ——分解系數矩陣;
% dim ——重構層數;
% 輸出參數:y ——重構矩陣。
% 繪制分解圖像
xd=uint8(x); % 將輸入矩陣的數據格式轉換為適合顯示圖像的uint8格式
[m,n]=size(x); % 求出輸入矩陣的行列數
for i=1:dim % 對轉換矩陣xd進(jìn)行分界線(xiàn)處理
m=m-mod(m,2);
n=n-mod(n,2);
xd(m/2,1:n)=255;
xd(1:m,n/2)=255;
m=m/2;n=n/2;
end
figure;
subplot(121);imshow(xd);title([ num2str(dim) ' 層小波分解圖像']); % 畫(huà)出帶有分界線(xiàn)的分解圖像
% 重構圖像
xr=double(x); % 將輸入矩陣的數據格式轉換回適合數值處理的double格式
[row,col]=size(xr); % 求出轉換矩陣xr的行列數
for i=dim:-1:1 % 重構次序是從內層往外層進(jìn)行,所以先抽取矩陣 xr 的最內層分解矩陣進(jìn)行重構
tmp=xr(1:floor(row/2^(i-1)),1:floor(col/2^(i-1))); % 重構的內層矩陣的行列數均為矩陣xr的2^(i-1)
[rt1,ct1]=size(tmp); % 讀取待重構矩陣 tmp 的行列數
rt=rt1-mod(rt1,2);ct=ct1-mod(ct1,2);
rLL=tmp(1:rt/2,1:ct/2); % 將待重構矩陣 tmp 分解為四個(gè)部分
rHL=tmp(1:rt/2,ct/2+1:ct);
rLH=tmp(rt/2+1:rt,1:ct/2);
rHH=tmp(rt/2+1:rt,ct/2+1:ct);
tmp(1:rt,1:ct)=myidwt2(rLL,rHL,rLH,rHH); % 將重構結果返回到矩陣 tmp
xr(1:rt1,1:ct1)=tmp; % 把矩陣 tmp 的數據返回到矩陣 xr 的相應區域,準備下一個(gè)外層的重構
end
y=xr; % 重構結束后得到的矩陣xr即為輸出矩陣 y
yu=uint8(xr); % 將矩陣xr的數據格式轉換為適合顯示圖像的uint8格式
subplot(122);imshow(yu);title('小波重構圖像');
聯(lián)系客服