不采用MATLAB中的几何变换函数对图像进行旋转
2019-03-16 17:05
921 查看
一、图像旋转变换的流程
1、确定旋转后新图像的尺寸,设原始大小为M,N
由以上公式得到:
x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)]; %旋转后新坐标系横坐标 y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)]; %旋转后新坐标系纵坐标
2、坐标变换
3、旋转逆变换
4、新图像赋值
赋值方法有最邻近差值与双线性差值,其中双线性插值法可以使的图像的边缘更加的平滑。
二、完整matlab代码
f=im2bw(imread('picture1.png')); M=size(f,1); %行 N=size(f,2); %列 Angle=pi/6; %逆时针角度 x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)]; %旋转后新坐标系横坐标 y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)]; %旋转后新坐标系纵坐标 x1=round(max(x(:)-min(x(:))+1)); %round()函数表示四舍五入取整 y1=round(max(y(:))-min(y(:))+1); %计算新图像分辨率 g=zeros(x1,y1); %新图像的像素点矩阵 for i=0:1:(x1-1) for j=0:1:(y1-1) i1=i+min(x(:)); j1=j+min(y(:)); %坐标变换到原坐标系 i2=i1*cos(Angle)-j1*sin(Angle); j2=i1*sin(Angle)+j1*cos(Angle); %旋转逆变换 i3=round(i2); j3=round(j2); if(i3>(M-1)||j3>(N-1)||i3<0||j3<0) %插值运算 g(i+1,j+1)=255; else g(i+1,j+1)=f(i3+1,j3+1); end end end subplot(121),imshow(f),title('原图像'); subplot(122),imshow(g),title('旋转后图像');
三、运行结果
参考文献:
[1] 蔡利梅 王利娟 数字图像处理[M]. 中国矿业大学出版社 2014
相关文章推荐
- 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)
- Matlab图像、矩阵旋转、翻转函数 rot90、flipud、fliplr、imrotate、flipdim、flip详解
- Matlab图像几何变换之图像旋转
- Matlab图像几何变换之图像旋转
- opencv 旋转图像函数实现 等同于matlab里的rotate() (注:旋转后图像变大,超出部分填为黑色)
- matlab 图像几何变换 平移、旋转、缩放
- matlab 图像几何变换 平移、旋转、缩放
- opencv 利用仿射变换函数对图像进行任意角度旋转
- MATLAB中PSF函数进行图像复原
- matlab 对一个文件夹里的所有图像进行批量旋转90度并保存
- 用matlab对图像进行批量旋转
- Matlab 图像处理相关函数命令大全
- MATLAB图像函数以及应用(第六章)边界问题
- MATLAB基本的使用方法归纳(图像,矩阵及函数)
- 图像几何变换:旋转,缩放,斜切
- MATLAB图像旋转源代码
- matlab 图像的几何变换
- Matlab fspecial和imfilter对图像进行空间滤波
- 图像的灰度共生矩阵GLCM(matlab 函数帮助)
- 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)