matlab图像旋转

有没有这样的函数:如果我有一幅图像,我想将它旋转3°,用一个函数就可以实现?... 有没有这样的函数:
如果我有一幅图像,我想将它旋转3°,用一个函数就可以实现?
展开
 我来答
丨遥远的她灬
2018-04-04 · TA获得超过2万个赞
知道小有建树答主
回答量:129
采纳率:100%
帮助的人:4.3万
展开全部

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

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



旋转后,由于图像点可能是非整数,出现像素空洞问题,故需要进行插值法,下面选用最近邻插值法。

源代码

[html] view plain copy

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

=怎么SHOW旋转后的图像=
=图像是怎么显示的=
图像的显示都是基于矩阵像素来显示的...上面每一张图像的图像信息其实是一个RGB矩阵来的.所以必须把旋转后的图像放到一个像素矩阵中才能显示这个旋转后的图像.
设一张图像的大小是col*row的.那么以这个图像对角线为直径的圆就能够包含这个图像经旋转后的图像..在这里因为图像的显示是矩阵式的,所以这里以图像对角线为边长构造一个正方形来保存旋转后的图像.从上面旋转后的图像可以看出效果啦,旋转后的图像就包含在这个正方形的矩阵中.

=计算旋转图像所需要的正方形=
因为图像是col*row的,所以这个正方形的边长 new_img_size = (col^2+row^2)^0.5;
这样使用matlab就可以生成一个存储最终图像的rgb矩阵了:

[cpp] view plain copy

  • img_rotated = uint8(zeros(new_img_size , new_img_size , 3); //%一个像素由RGB三个分量表现.  

上海华然企业咨询
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,... 点击进入详情页
本回答由上海华然企业咨询提供
zyyuan7002
推荐于2017-11-25 · 超过20用户采纳过TA的回答
知道答主
回答量:71
采纳率:37%
帮助的人:13.3万
展开全部
matlab函数:B = imrotate(A,angle,method);A是原始图像,angle是旋转角度,B为旋转后的图像;使用method参数可以改变插值算法,例如:{'nearest'}:最邻近线性插值(Nearest-neighbor interpolation)'bilinear': 双线性插值(Bilinear interpolation)'bicubic': 双三次插值(或叫做双立方插值)(Bicubic interpolation)。 B = imrotate(A,angle,method,bbox)bbox参数用于指定输出图像属性:'crop': 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。{'loose'}: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般上这种格式产生的图像的尺寸都要大于源图像的尺寸
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与hu谋皮
2013-04-07
知道答主
回答量:24
采纳率:0%
帮助的人:25.8万
展开全部
matlab的:B = imrotate(A,angle);A是原始图像,angle是旋角,B为旋转后的图像,inshow(B)显示旋转后的图像
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式