www.gusucode.com > 《图像配准技术及其Matlab编程实现》--源码程序 > 《图像配准技术及其Matlab编程实现》/match/BilinearInterpolation.m
function [newImage]=BilinearInterpolation(oldImage,w,z) %参数:oldImage:待插值图像 % w:反射变换参数x0(与oldImage同维数组) % z:反射变换参数y0(与oldImage同维数组) % newImage:插值后图像 %功能:利用双线性插值法根据几何变换参数进行灰度级插值 [width,height]=size(oldImage); newImage=uint8(zeros(width,height)); for i=1:width for j=1:height source_x=w(i,j); source_y=z(i,j); if(source_x>=width-1 || source_y>=height-1 || double(uint16(source_x))<=0 || double(uint16(source_y))<=0) newImage(i,j)=0; else if(source_x/double(uint16(source_x))==1.0) & (source_y/double(uint16(source_y))==1.0) newImage(i,j)=oldImage(int16(source_x),int16(source_y)); else a=double(uint16(source_x)); b=double(uint16(source_y)); x11=double(oldImage(a,b)); x12=double(oldImage(a,b+1)); x21=double(oldImage(a+1,b)); x22=double(oldImage(a+1,b+1)); newImage(i,j)=uint8((b+1-source_y)*((source_x-a)*x21+(a+1-source_x)*x11)+(source_y-b)*((source_x-a)*x22+(a+1-source_x)*x12)); end end end end figure,imshow(newImage); %RunInterpolation('ct.bmp',2); %RunInterpolation('lena.bmp',2);