matlab中关于图像旋转问题

求大神具体讲解这个代码的意思,I是图像带入MATLAB中的函数,QQ1124096852XZImg=double(I);alpha=pi/4;wnew=rows*cos(... 求大神具体讲解这个代码的意思,I是图像带入MATLAB中的函数,QQ1124096852
XZImg = double(I);
alpha = pi/4;
wnew =rows*cos(alpha)+cols*sin(alpha);
hnew = rows*sin(alpha)+cols*cos(alpha);
wnew = floor(wnew)+3;
hnew = floor(hnew)+3;
TS=rows*sin(alpha);
T =[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];
Imgnew=zeros(hnew,wnew);
for u = 1:hnew
for v = 1:wnew
abc = T*([u;v]-[TS;0]);
x = abc(1);
y = abc(2);
ifx>=1&x<=cols&y>=1&y<=rows
x_low = floor(x);
x_up = floor(x)+1;
y_low = floor(y);
y_up = floor(y)+1;
p1 = XZImg(x_low,y_low);
p2 = XZImg(x_up,y_low);
p3 = XZImg(x_low,y_low);
p4 = XZImg(x_up,y_up);
s = x-x_low;
t = y-y_low;
Imgnew(u,v) =(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
end
end
imshow(uint8(Imgnew));
展开
 我来答
tianxiawulang
推荐于2017-11-21 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2626万
展开全部

这段代码的功能是对通过双线性插值对图像进行旋转变换。循环体前面的代码主要是计算旋转后图像的大小以及一些辅助数据,循环体中对旋转变换后新图像的每一个点,分别找到原始图像中对应位置最近的四个点,然后进行双线性插值。

 

不知道题主什么地方看不懂?

恕我直言,不要指望逐句给你解释。如果你绝大部分都看不懂,那么给你讲明白会是一件很艰难的事。如果只是部分看不懂,我可以有针对性地给你解答。

 

MATLAB 图像处理工具箱(Image Processing Toolbox)中有imrotate函数可以实现这段代码相同的功能(而且还可以做更多):

imshow(uint8(imrotate(I,45,'bilinear')))

如果只是要使用旋转功能,完全没必要去研究上面的这段代码(水平比较一般,例如rows和cols两个变量其实是反过来的)。

更多追问追答
追问
T和TS
还有后面的x_low和p1以及最后面的公式是啥意思啊。
追答

T 是旋转变换矩阵,TS是变换前后两个坐标系的原点的距离。

 

关于坐标系的关系几句话说不清楚,建议你参考一下相关的教科书。或者百度一下【图像旋转后的还原图像坐标】,排在前面的“公爵女子 - 博客园”的那篇文章可供参考(由于贴链接度娘容易抽风,只能这样提示)。需要注意的是,文中的坐标系以及符号与这段代码的不尽相同,但原理是一样的,最好根据理解自己动手画图,以加深理解。

 

 

x_low、x_up、y_low、y_up就是前面说的【原始图像中对应位置最近的四个点】的坐标,p1-p4是取出来的原图像四个点的颜色。最后的公式是双线性插值。

我行我素850915
2015-10-29 · TA获得超过8241个赞
知道大有可为答主
回答量:5788
采纳率:77%
帮助的人:1742万
展开全部
这个程序不完整,不能运行。
追问
在前面输入I的图像位置,就可以运行
追答
不会的, 我试了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式