matlab 线性插值缩放图片,双线性插值实现图像放大(Matlab实现)
二、實(shí)現(xiàn)
1. ?實(shí)驗(yàn)平臺(tái)與數(shù)據(jù)
本算法使用Matlab語(yǔ)言實(shí)現(xiàn),實(shí)驗(yàn)平臺(tái)為Windows 8 32位操作系統(tǒng)、4GB內(nèi)存(可用為2.31GB)、Matlab2013b。
數(shù)據(jù)1: 大小為:256*256 的lena灰度圖像,將使用實(shí)現(xiàn)的算法對(duì)其進(jìn)行2倍放大操作,如下圖1所示:
圖1 灰度圖像lena.png
數(shù)據(jù)2:大小為:670*502 的彩色RGB圖像,將使用實(shí)現(xiàn)的算法對(duì)其進(jìn)行2倍縮小操作,如下圖1所示:
圖2彩色RGB圖像he.jpeg
2. ?實(shí)驗(yàn)程序源代碼
imblizoom.m文件源碼
function [ ZI ] = imblizoom( I,zmf )
%----------------------雙線性插值法縮放矩陣或圖像---------------------------
% Input:
%?????? I:圖像文件名或矩陣(整數(shù)值(0~255))
%?????? zmf:縮放因子,即縮放的倍數(shù)
% Output:
%縮放后的圖像矩陣ZI
% Usage:
%?????? ZI = SSELMHSIC('ImageFileName',zmf)
%對(duì)圖像I進(jìn)行zmf倍的縮放并顯示
%??? Or:
%?????? ZI = SSELMHSIC(I,zmf)
%對(duì)矩陣I進(jìn)行zmf倍的縮放并顯示
%??? ...
%-------------------------------------------------------------------
%%%%??? Authors:???Zhi Liu
%%%%??? XiDian University Student
%%%% ???EMAIL:?????zhiliu.mind@gmail.com
%%%%??? DATE:??????16-12-2013
%% Step1對(duì)數(shù)據(jù)進(jìn)行預(yù)處理
if ~exist('I','var') || isempty(I)
error('輸入圖像I未定義或?yàn)榭?#xff01;');
end
if ~exist('zmf','var') || isempty(zmf) || numel(zmf) ~= 1
error('位移矢量zmf未定義或?yàn)榭栈騴mf中的元素超過(guò)2!');
end
if isstr(I)
[I,M] = imread(I);
end
if zmf <= 0
error('縮放倍數(shù)zmf的值應(yīng)該大于0!');
end
%% Step2通過(guò)原始圖像和縮放因子得到新圖像的大小,并創(chuàng)建新圖像。
[IH,IW,ID] = size(I);
ZIH = round(IH*zmf); %計(jì)算縮放后的圖像高度,最近取整
ZIW = round(IW*zmf); %計(jì)算縮放后的圖像寬度,最近取整
ZI = zeros(ZIH,ZIW,ID); % 創(chuàng)建新圖像
%% Step3擴(kuò)展矩陣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由新圖像的某個(gè)像素(zi,zj)映射到原始圖像(ii,jj)處,并插值。
for zj = 1:ZIW???????? %對(duì)圖像進(jìn)行按列逐元素掃描
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);
%%以圖像的形式顯示同現(xiàn)矩陣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. ?實(shí)驗(yàn)結(jié)果
1) 數(shù)據(jù)1
在命令窗口輸入imblizoom('lena.png', 2);回車后結(jié)果如下圖3和下圖4所示:
圖3 lena.png的運(yùn)行結(jié)果1(原圖)
圖4 lena.png的運(yùn)行結(jié)果2(放大2倍后的圖)
2)數(shù)據(jù)2
圖5 he.jpeg運(yùn)行結(jié)果1(原圖)
圖6 he.jpeg運(yùn)行結(jié)果2(縮小2倍后的圖像)
由圖3~圖6可知,程序正確無(wú)誤,放大縮小后的效果都很好。程序的用法及其它功能,請(qǐng)查看代碼注釋。
總結(jié)
以上是生活随笔為你收集整理的matlab 线性插值缩放图片,双线性插值实现图像放大(Matlab实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux如何查看无线密码是多少个,在
- 下一篇: 椭圆曲线图像加密 matlab,椭圆曲线