双线性函数matlab,双线性插值(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進行zmf倍的縮放并顯示
%??? ...
%-------------------------------------------------------------------
%%%%??? Authors:???Zhi Liu
%%%%??? XiDian University Student
%%%% ???EMAIL:?????zhiliu.mind@gmail.com
%%%%??? DATE:??????16-12-2013
%% Step1對數據進行預處理
if?~exist('I','var') || isempty(I)
error('輸入圖像I未定義或為空!');
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可知,程序正確無誤,放大縮小后的效果都很好。程序的用法及其它功能,請查看代碼注釋。
總結
以上是生活随笔為你收集整理的双线性函数matlab,双线性插值(Matlab实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansys Speos | 助力汽车按键
- 下一篇: STS下载路径