matlab图像双线性插值,最近邻插值与几何变换

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

实验二图像几何变换与插值

一、实验目的

巩固图像处理编程的步骤格式,理解数据插值及图像几何变换的原理,掌握图像几何变换的实现方法。

二、实验内容

1、理解反向变换的实现思路

2、图像缩放及插值Matlab取整命令:floor, ceil, round

分别实验最近邻插值和双线性插值

f=imread('lena.bmp');

beishu=0.5;

[row,col]=size(f);

r1=round(row*beishu);

c1=round(col*beishu);

b=zeros(r1,c1);

for i=1:r1

for j=1:c1

i1=round(i/beishu);

j1=round(j/beishu);

if i1<1

i1=1;

end

if j1<1

j1=1;

end

b(i,j)=f(i1,j1);

end

end

b=uint8(b);

figure;

imshow(f);

figure

imshow(b);

3、图像旋转及插值

以图像中心为轴实现任意角度(逆时针为正)的图像旋转,分别实验两种插值算法

f=imread('lena.bmp');

B=imrotate(f,45,'nearest','crop');

C=imrotate(f,45,'bilinear','crop');

figure;

subplot(121);

imshow(f);

title('原图像');

subplot(122);

imshow(B);

title('最近邻插值');

figure;

subplot(121);

imshow(f);

title('原图像');

subplot(122);

imshow(C);

title('双线性插值');

原图像最近邻插值处理

原图像双线性插值处理

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% matlab练习程序(图像放大/缩小,最邻近插值)

ccc

cl;

w=0.6; %放大或缩小的宽度

h=1.4; %放大或缩小的高度

img=imread('Corner.png');

imshow(img);

[m n]=size(img);

imgn=zeros(h*m,w*n);

rot=[h 0 0;0 w 0;0 0 1]; %变换矩阵x=h*u,y=w*v

inv_rot=inv(rot);

for x=1:h*m

for y=1:w*n

pix=[x y 1]*inv_rot;

imgn(x,y)=img(round(pix(1)),round(pix(2)));

end

end

figure,imshow(uint8(imgn)) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% matlab练习程序(图像放大/缩小,双线性插值)

ccc

m=1.8; %放大或缩小的高度

n=2.3; %放大或缩小的宽度

img=imread('lena.jpg');

imshow(img);

[h w]=size(img);

imgn=zeros(h*m,w*n);

rot=[m 0 0;0 n 0;0 0 1]; %变换矩阵

for i=1:h*m

for j=1:w*n

pix=[i j 1]/rot;

float_Y=pix(1)-floor(pix(1));

float_X=pix(2)-floor(pix(2));

if pix(1) < 1%边界处理

pix(1) = 1;

end

if pix(1) > h

pix(1) = h;

end

if pix(2) < 1

pix(2) =1;

end

if pix(2) > w

pix(2) =w;

end

pix_up_left=[floor(pix(1)) floor(pix(2))];%四个相邻的点

pix_up_right=[floor(pix(1)) ceil(pix(2))];

pix_down_left=[ceil(pix(1)) floor(pix(2))];

pix_down_right=[ceil(pix(1)) ceil(pix(2))];

value_up_left=(1-float_X)*(1-float_Y);%计算临近四个点的权重

value_up_right=float_X*(1-float_Y);

value_down_left=(1-float_X)*float_Y;

value_down_right=float_X*float_Y;

%按权重进行双线性插值imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...

value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...

value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...

相关文档
最新文档