matlab实现图像旋转

要求

图像是彩色的;旋转后,原图像的四个角点应在新图像的四条边上(即新图像的大小是包含原图像旋转后的最小矩形);旋转的角度可以是 0~ 360度;函数的调用形式是 J=myrotate(I,angle);不允许使用 imrotate。

 

原理

原理部分仅仅是代码中所体现的,具体推导过程参看 百度文库 图像旋转

 

下图显示新图像与原图像的长宽关系,注意如果旋转角度是120度,则需要取绝对值,具体参见下面源代码。

 

下图显示原图像旋转后的点与原图像点的对应关系,以按此公式求得新图像每一点对应的原图像点。

旋转后,由于图像点可能是非

Matlab可以使用imrotate函数来实现图像旋转。该函数的语法是B=imrotate(A,angle,method,'crop'),其中A为输入图像,angle为旋转角度,method为插值方法,'crop'表示旋转后剪切图像使得大小与原图像相同。下面是一个例子: ``` I=imread('potted-plantsk.jpg'); I_rotated = imrotate(I,30,'crop'); imshow(I_rotated); ``` 这段代码将读取一张名为'potted-plantsk.jpg'的图像,然后对它进行逆时针旋转30度,并使用'crop'方法进行插值和剪切,最后显示旋转后的图像。 如果你想自己编写函数来实现图像旋转,可以参考下面的代码: ``` function A = myimrotate(B, degree) [r, c, d] = size(B); nH = round(r * abs(cosd(degree)) + c * abs(sind(degree))); nW = round(c * abs(cosd(degree)) + r * abs(sind(degree))); A = zeros(nH, nW, d); M1 = [1 0 0; 0 -1 0; -0.5*c 0.5*r 1 ]; M2 = [cosd(degree) sind(degree) 0; -sind(degree) cosd(degree) 0; 0 0 1]; M3 = [1 0 0; 0 -1 0; 0.5*nW 0.5*nH 1]; for i = 1:c for j = 1:r temp = [i j 1] * M1 * M2 * M3; y = temp(1, 2); x = temp(1, 1); y = round(y); x = round(x); if (x >= 1 && x <= nW) && (y >= 1 && y <= nH) A(y, x, :) = B(j, i, :); end end end end ``` 你可以调用这个函数来实现任意角度的图像旋转。例如: ``` I = imread('potted-plantsk.jpg'); I_rotated = myimrotate(I, 30); imshow(uint8(I_rotated)); ``` 这段代码将读取一张图像并使用自定义的myimrotate函数将它逆时针旋转30度,然后显示旋转后的图像。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值