雙線性插值(Matlab實現)
三、實現
1. 實驗平臺與資料
本演算法使用Matlab語言實現,實驗平臺為Windows 8 32位作業系統、4GB記憶體(可用為2.31GB)、Matlab2013b。
資料1: 大小為:256*256 的lena灰度影象,將使用實現的演算法對其進行2倍放大操作,如下圖1所示:
圖1 灰度影象lena.png
資料2:大小為:670*502 的彩色RGB影象,將使用實現的演算法對其進行2倍縮小操作,如下圖1所示:
圖2 彩色RGB影象he.jpeg
2. 實驗程式原始碼
imblizoom.m檔案原始碼
function [ ZI ] = imblizoom( I,zmf )
%----------------------雙線性插值法縮放矩陣或影象---------------------------
% Input:
% I:影象檔名或矩陣(整數值(0~255))
% zmf:縮放因子,即縮放的倍數
% Output:
% 縮放後的影象矩陣 ZI
% Usage:
% ZI = SSELMHSIC('ImageFileName',zmf)
% 對影象I進行zmf倍的縮放並顯示
% Or:
% ZI = SSELMHSIC(I,zmf)
% 對矩陣I進行
% ...
%-------------------------------------------------------------------
%%%% Authors: Zhi Liu
%%%% XiDian University Student
%%%% EMAIL: [email protected]
%%%% DATE: 16-12-2013
%% Step1 對資料進行預處理
if ~exist('I','var') || isempty(I)
error('
end
if ~exist('zmf','var') || isempty(zmf) || numel(zmf) ~= 1
error('位移向量 zmf未定義或為空或 zmf中的元素超過2!');
end
if isstr(I)
[I,M] = imread(I);
end
if zmf <= 0
error('縮放倍數 zmf的值應該大於0!');
end
%% Step2 通過原始影象和縮放因子得到新影象的大小,並建立新影象。
[IH,IW,ID] = size(I);
ZIH = round(IH*zmf); % 計算縮放後的影象高度,最近取整
ZIW = round(IW*zmf); % 計算縮放後的影象寬度,最近取整
ZI = zeros(ZIH,ZIW,ID); % 建立新影象
%% Step3 擴充套件矩陣I邊緣
IT = zeros(IH+2,IW+2,ID);
IT(2:IH+1,2:IW+1,:) = I;
IT(1,2:IW+1,:)=I(1,:,:);IT(IH+2,2:IW+1,:)=I(IH,:,:);
IT(2:IH+1,1,:)=I(:,1,:);IT(2:IH+1,IW+2,:)=I(:,IW,:);
IT(1,1,:) = I(1,1,:);IT(1,IW+2,:) = I(1,IW,:);
IT(IH+2,1,:) = I(IH,1,:);IT(IH+2,IW+2,:) = I(IH,IW,:);
%% Step4 由新影象的某個畫素(zi,zj)對映到原始影象(ii,jj)處,並插值。
for zj = 1:ZIW % 對影象進行按列逐元素掃描
for zi = 1:ZIH
ii = (zi-1)/zmf; jj = (zj-1)/zmf;
i = floor(ii); j = floor(jj); % 向下取整
u = ii - i; v = jj - j;
i = i + 1; j = j + 1;
ZI(zi,zj,:) = (1-u)*(1-v)*IT(i,j,:) +(1-u)*v*IT(i,j+1,:)...
+ u*(1-v)*IT(i+1,j,:) +u*v*IT(i+1,j+1,:);
end
end
ZI = uint8(ZI);
%% 以影象的形式顯示同現矩陣P
figure
imshow(I,M);
axis on
title(['原影象(大小: ',num2str(IH),'*',num2str(IW),'*',num2str(ID),')']);
figure
imshow(ZI,M);
axis on
title(['縮放後的影象(大小: ',num2str(ZIH),'*',num2str(ZIW),'*',num2str(ID)',')']);
end
3. 實驗結果
1) 資料1
在命令視窗輸入imblizoom('lena.png', 2);回車後結果如下圖3和下圖4所示:
圖3 lena.png的執行結果1(原圖)
圖4 lena.png的執行結果2(放大2倍後的圖)
2)資料2
圖5 he.jpeg執行結果1(原圖)
圖6 he.jpeg執行結果2(縮小2倍後的影象)
由圖3~圖6可知,程式正確無誤,放大縮小後的效果都很好。程式的用法及其它功能,請檢視程式碼註釋。