matlab实现图像旋转
2016-10-07 14:30
417 查看
要求
图像是彩色的;旋转后,原图像的四个角点应在新图像的四条边上(即新图像的大小是包含原图像旋转后的最小矩形);旋转的角度可以是 0~ 360度;函数的调用形式是 J=myrotate(I,angle);不允许使用 imrotate。原理
原理部分仅仅是代码中所体现的,具体推导过程参看 百度文库 图像旋转下图显示新图像与原图像的长宽关系,注意如果旋转角度是120度,则需要取绝对值,具体参见下面源代码。
下图显示原图像旋转后的点与原图像点的对应关系,以按此公式求得新图像每一点对应的原图像点。
旋转后,由于图像点可能是非整数,出现像素空洞问题,故需要进行插值法,下面选用最近邻插值法。
源代码
function img_rotate=my_img_rotate_chazhi(img1,angle) % 旋转后图像=my_img_rotate(原图像,旋转角度) 0<旋转角度<360 % 查找新图对应的原图像素点 % 最邻近点插值方法 [h,w,d]=size(img1); radian=angle/180*pi; cos_val = cos(radian); sin_val = sin(radian); w2=round(abs(cos_val)*w+h*abs(sin_val)); h2=round(abs(cos_val)*h+w*abs(sin_val)); img_rotate = uint8(zeros(h2,w2,3)); %像素是整数 for x=1:w2 for y=1:h2 x0 = uint32(x*cos_val + y*sin_val -0.5*w2*cos_val-0.5*h2*sin_val+0.5*w); y0= uint32(y*cos_val-x*sin_val+0.5*w2*sin_val-0.5*h2*cos_val+0.5*h); x0=round(x0); %最邻近插值 y0=round(y0); %最邻近插值 if x0>0 && y0>0&& w >= x0&& h >= y0 img_rotate(y,x,:) = img1(y0,x0,:); end end end %I = imread('C:\Users\yytang\Desktop\love.jpg') %I2=my_img_rotate(I,30); %figure,imshow(I2);
相关文章推荐
- opencv 旋转图像函数实现 等同于matlab里的rotate() (注:旋转后图像变大,超出部分填为黑色)
- MATLAB实现基于邻近插值的图像旋转代码
- matlab实现图像的平移、旋转、缩放
- (实验二) --- 图像旋转变换---matlab实现
- 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
- matlab实现图像的平移、旋转、缩放
- Matlab 实现图像的平移,旋转,缩放
- 图像平移、缩放、旋转、插值 Matlab实现
- matlab实现图像中,任意给定窗函数以外区域补0
- 图像细化matlab代码实现
- 数字图像去噪典型算法及matlab实现 推荐
- 图像旋转算法与实现
- 数字图像去噪典型算法及matlab实现
- 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现
- matlab实现多种图像配准
- matlab实现分水岭算法处理图像分割
- 图像旋转、膨胀、腐蚀的实现
- matlab获取目录中图像名称及路径的递归实现
- 数字图像去噪典型算法及matlab实现
- 基于PCNN的图像分割的matlab实现 推荐