Matlab实现图像旋转
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%%%%%对图像进行旋转处理
clc;clear;close;
naturalimag=imread('xuanzhuan.bmp');%jpegtu.jpg
figure(1);
imshow(naturalimag);
title('原图像');
[m,n,r]=size(naturalimag);%%%%m为行数,x方向,n为列数,y方向,r为维数
dag=45*pi/180; %旋转的角度
backgroundgray=0;%%%%用作背景值的灰度值
a=cos(dag);
b=sin(dag);
processedxmin=round(a-n*b);
processedxmax=round(m*a-b);
processedymin=round(a+b);
processedymax=round(m*b+n*a);
nr=processedxmax-processedxmin+1;%%%%行数,x
nc=processedymax-processedymin+1;%%%%%列数,y
processedimag(1:nr,1:nc,1:r)=backgroundgray;
for i=1:m
for j=1:n
ii=round(i*a-j*b)-processedxmin+1;
jj=round(i*b+j*a)-processedymin+1;
for k=1:r
processedimag(ii,jj,k)=naturalimag(i,j,k);
end
end
end
figure(2);
imshow(processedimag/255);
title('旋转后未插值处理的图像');
%%%%对图像中空格进行行插值
for i=1:nr
for j=2:nc-1
for k=1:r
if(processedimag(i,j,k) == backgroundgray && processedimag(i,j-1,k) ~= backgroundgray && processedimag(i,j+1,k) ~= backgroundgray )
processedimag(i,j,k) =processedimag(i,j-1,k) ;
end
end
end
end
figure(3);
imshow(processedimag/256);
title('旋转并经插值处理的图像');
%%%%matlab自带的旋转函数
X=imrotate(naturalimag,45);
figure(4)
imshow(X);
title('用matlab自带的旋转函数运算得到的旋转图像');