双线性插值-matlab实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

双线性插值算法

张俊飞一、算法简介

假设c[a]到c[a+1]之间是线性变化的,那么对于浮点数

x( a <= x < a+1)

c(x) = c[a+1]*( x - a) + c[a]*( 1 + a - x);

c(x) = c[a] + [ (c[a+1]-c[a])/(b-a)]*( x - a);

b = a+1;

c(x) = c[a] + [ c[a+1] - c[a]]*( x - a);

把这种插值方式扩展到二维情况:对于一个二维数组c,

我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数) ,

那么对于浮点数的坐标(x,y)满足(a <= x < a+1, b <= y < b+1),可以先分别求出c(x,b)和c(x,b+1):

c(x,b) = c[a+1][b]*( x - a) + c[a][b]*( 1 + a - x);

c(x,b+1) = c[a+1][b+1]*( x - a) + c[a][b+1]*( 1 + a - x);

现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以: c(x,y) = c(x,b+1)*( y - b) + c(x,b)*( 1 + b - y)

二、matlab实现

在command窗口输入chahzi('cameraman.tif',2),这里cameraman.tif为灰度图片,得到结果如下:

origin image

result image

在command窗口输入chahzi('a.jpg',0.5),这里a.jpg为彩色图片,得到结果为:

origin image

result image

由以上结果可知,该算法的鲁棒性较强,图片伸缩插值保真度高。

三、代码

function []=chahzi(str,k)

% str input image

% k zoo in or out k times

% clear all

% clc

% k=2;

I=imread(str);

% if size(I,3)~=1

% I=rgb2gray(I);

% end

figure,imshow(I);

title('origin image');

I=double(I);

[rows cols tongdao]=size(I);

x_new=rows*k;

y_new=cols*k; %缩放至k倍。

I_new=zeros(x_new,y_new,tongdao );

for rgb=1:tongdao

for i=1:x_new

for j=1:y_new

x=i/k;a=floor(x); y=j/k;b=floor(y);

%% 双线性插值算法

if

a>0&&b>0&&a

cxb=I(a+1,b,rgb)*(x-a)+I(a,b,rg b)*(1+a-x);

cxb1=I(a+1,b+1,rgb)*(x-a)+I(a,b +1,rgb)*(1+a-x);

I_new(i,j,rgb)=round(cxb1*(y-b) +cxb*(1+b-y));

end

end

end

end

% iftongdao==1%如果输入是灰度图,则% I_new=I_new(:,:,1);

% end

figure,imshow(uint8(I_new))

title('result image');

相关文档
最新文档