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

上传人:b****1 文档编号:11163989 上传时间:2023-05-29 格式:DOCX 页数:12 大小:725.22KB
下载 相关 举报
matlab图像双线性插值最近邻插值与几何变换.docx_第1页
第1页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第2页
第2页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第3页
第3页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第4页
第4页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第5页
第5页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第6页
第6页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第7页
第7页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第8页
第8页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第9页
第9页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第10页
第10页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第11页
第11页 / 共12页
matlab图像双线性插值最近邻插值与几何变换.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《matlab图像双线性插值最近邻插值与几何变换.docx》由会员分享,可在线阅读,更多相关《matlab图像双线性插值最近邻插值与几何变换.docx(12页珍藏版)》请在冰点文库上搜索。

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

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

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

一、实验目的

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

二、实验内容

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);

fori=1:

r1

forj=1:

c1

i1=round(i/beishu);

j1=round(j/beishu);

ifi1<1

i1=1;

end

ifj1<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);

[mn]=size(img);

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

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

inv_rot=inv(rot);

forx=1:

h*m

fory=1:

w*n

pix=[xy1]*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);

[hw]=size(img);

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

rot=[m00;0n0;001];%变换矩阵

fori=1:

h*m

forj=1:

w*n

pix=[ij1]/rot;

float_Y=pix

(1)-floor(pix

(1));

float_X=pix

(2)-floor(pix

(2));

ifpix

(1)<1        %边界处理

pix

(1)=1;

end

ifpix

(1)>h

pix

(1)=h;

end

ifpix

(2)<1

pix

(2)=1;

end

ifpix

(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))+...

value_down_right*img(pix_down_right

(1),pix_down_right

(2));

end

end

figure,imshow(uint8(imgn))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

matlab练习程序(图像旋转,最邻近插值)

ccc

cl;

H=1;%索引pix中第一个元素,即高度

W=2;%索引pix中第二个元素,即宽度

jiaodu=45;%要旋转的角度,旋转方向为顺时针

img=imread('Corner.png');%这里v为原图像的高度,u为原图像的宽度

imshow(img);%这里y为变换后图像的高度,x为变换后图像的宽度

[vu]=size(img);

theta=jiaodu/180*pi;

rot=[cos(theta)-sin(theta)0;sin(theta)cos(theta)0;001];

inv_rot=inv(rot);

pix1=[111]*rot;%变换后图像左上点的坐标

pix2=[1u1]*rot;%变换后图像右上点的坐标

pix3=[v11]*rot;%变换后图像左下点的坐标

pix4=[vu1]*rot;%变换后图像右下点的坐标

height=round(max([abs(pix1(H)-pix4(H))+0.5abs(pix2(H)-pix3(H))+0.5]));%变换后图像的高度

width=round(max([abs(pix1(W)-pix4(W))+0.5abs(pix2(W)-pix3(W))+0.5]));%变换后图像的宽度

imgn=zeros(height,width);

delta_y=abs(min([pix1(H)pix2(H)pix3(H)pix4(H)]));%取得y方向的负轴超出的偏移量

delta_x=abs(min([pix1(W)pix2(W)pix3(W)pix4(W)]));%取得x方向的负轴超出的偏移量

fory=1-delta_y:

height-delta_y

forx=1-delta_x:

width-delta_x

pix=[yx1]*inv_rot;%用变换后图像的点的坐标去寻找原图像点的坐标,

%否则有些变换后的图像的像素点无法完全填充

ifpix(H)>=0.5&&pix(W)>=0.5&&pix(H)<=v&&pix(W)<=u

imgn(y+delta_y,x+delta_x)=img(round(pix(H)),round(pix(W)));

end

end

end

figure,imshow(uint8(imgn))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

matlab练习程序(图像旋转,双线性插值)

ccc

jiaodu=45;%要旋转的角度,旋转方向为顺时针

img=imread('lena.jpg');%这里v为原图像的高度,u为原图像的宽度

imshow(img);%这里y为变换后图像的高度,x为变换后图像的宽度

[hw]=size(img);

theta=jiaodu/180*pi;

rot=[cos(theta)-sin(theta)0;sin(theta)cos(theta)0;001];

pix1=[111]*rot;%变换后图像左上点的坐标

pix2=[1w1]*rot;%变换后图像右上点的坐标

pix3=[h11]*rot;%变换后图像左下点的坐标

pix4=[hw1]*rot;%变换后图像右下点的坐标

height=round(max([abs(pix1

(1)-pix4

(1))+0.5abs(pix2

(1)-pix3

(1))+0.5]));%变换后图像的高度

width=round(max([abs(pix1

(2)-pix4

(2))+0.5abs(pix2

(2)-pix3

(2))+0.5]));%变换后图像的宽度

imgn=zeros(height,width);

delta_y=abs(min([pix1

(1)pix2

(1)pix3

(1)pix4

(1)]));%取得y方向的负轴超出的偏移量

delta_x=abs(min([pix1

(2)pix2

(2)pix3

(2)pix4

(2)]));%取得x方向的负轴超出的偏移量

fori=1-delta_y:

height-delta_y

forj=1-delta_x:

width-delta_x

pix=[ij1]/rot;%用变换后图像的点的坐标去寻找原图像点的坐标,

%否则有些变换后的图像的像素点无法完全填充

float_Y=pix

(1)-floor(pix

(1));

float_X=pix

(2)-floor(pix

(2));

ifpix

(1)>=1&&pix

(2)>=1&&pix

(1)<=h&&pix

(2)<=w

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+delta_y,j+delta_x)=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))+...

value_down_right*img(pix_down_right

(1),pix_down_right

(2));

end

end

end

figure,imshow(uint8(imgn))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

实验一Matlab图像基本操作

一、实验目的

熟悉利用Matlab进行图像处理的基本操作,了解图像数据的存储形式及进行图像处理编程的步骤方法。

二、实验内容

1、图像读写与显示

重点函数:

imread,imwrite,imshow

2、彩色图像灰度化

计算公式:

Gray=R*0.299+G*0.587+B*0.114

3、图像马赛克

局部平均,改变窗口大小比较处理结果,如取2×2、4×4或更大尺寸的窗口

4、图像平移

分别完成图像水平方向、竖直方向和两个方向的平移

三、实验要求

1、编写代码,完成各项实验内容

2、总结实验中遇到问题及解决方案,书写实验报告

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

一、实验目的

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

二、实验内容

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

5、图像缩放及插值

Matlab取整命令:

floor,ceil,round

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

6、图像旋转及插值

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

三、实验要求

1、编写代码,完成各项实验内容

2、总结实验中遇到问题及解决方案,书写实验报告

 

THANKS!

!

!

 

致力为企业和个人提供合同协议,策划案计划书,学习课件等等

打造全网一站式需求

欢迎您的下载,资料仅供参考

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2