编程且利用双线性插值实现图像的缩放

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

一设计题目

编程且利用双线性插值实现图像的缩放

二设计目的

1、熟悉matlab使用环境及工作原理;

2、掌握图像缩放的原理;

3、学会双线性插值法的应用;

4、体会图像灰度值的变化过程。

三设计原理

1 双线性插值算法简单比方

原来的数值序列:0,10,20,30,40

线性插值一次为:0,5,10,15,20,25,30,35,40

即认为其变化(增减)是线形的,可以在坐标图上画出一条直线

在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。

为了方便理解,先考虑一维情况下的线性插值

对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的

那么对于浮点数x(a<=x

把这种插值方式扩展到二维情况

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

那么对于浮点数的坐标(x,y)满足(a<=x

c(x,b) = c[a+1]*(x-a)+c[a]*(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)

这就是双线性插值

2、图像缩放的基本原理:

1)根据已有的数字图像重建物理图像。

2)对重建的物理图像以所需要的分辨率重采样。

四设计程序

应用matlab编程:

clear;

I=imread('f.jpg');

Z=rgb2gray(I);

[rows,cols]=size(Z);

K1 = str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%行默认变为原来的0.5倍

K2 = str2double(inputdlg('请输入列缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%列默认变为原来的0.5倍

width = K1 * rows;

height = K2 * cols;

Out = uint8(zeros(width,height)); %创建输出图像矩阵

widthScale = rows/width;

heightScale = cols/height;

for x = 6:width - 6 % 6是为了防止矩阵超出边界溢出

for y = 6:height - 6

oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新标 oldY = y * heightScale;

if (oldX/double(uint16(oldX)) == 1.0) &

(oldY/double(uint16(oldY)) == 1.0)

Out(x,y) = Z(int16(oldX),int16(oldY));%若oldX,oldY 为整数,直接赋值

else

a = double(uint16(oldX));

b = double(uint16(oldY));

x11 = double(Z(a,b)); % x11 赋值I(a,b)

x12 = double(Z(a,b+1)); % x12 赋值I(a,b+1)

x21 = double(Z(a+1,b)); % x21 赋值I(a+1,b)

x22 = double(Z(a+1,b+1)); % x22 赋I(a+1,b+1) Out(x,y) = uint8( (b+1-oldY) * ((oldX-a)*x(a+1-oldX)*x11) + (oldY-b) * ((oldX-a)*x22 +(a+1-oldX) * x12) ); % 用双线

性插值计算公式计算

end

end

end

imshow(Z);

figure;

五效果图对比

压缩前图像

压缩后图像

六程序分析

先将原图像(即658*469)通过matlab语句锁定,变换成相应的灰度图像,再将这个灰度图像的尺寸锁定,将其按照横向0.5,纵向0.5的比例缩小,得到想要的图像。这个过程是通过对原图像中每个像素点的改变而相应的全图像改变的。最后得到329*234的灰度图像。

七设计体会

通过这次课设,使我加深了对matlab编程的认识,应用matlab使应该注意的一些问题及它适用的环境。同时,学习了双线性插值在图像的缩放中的具体应用,在matlab中的相关语句。并且,了解了图像缩放的具体过程。

在多媒体信息与通信中,许多的知识都可以用matlab来实现,matlab是一个基础实用的软件,对图像的操作处理在日后的学习工作中是必不可少的,这次的设计让我深入的学习了这方面的知识,认识到理论结合实际的必要性。

相关文档
最新文档