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)); 展开
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)); 展开
2个回答
展开全部
这段代码的功能是对通过双线性插值对图像进行旋转变换。循环体前面的代码主要是计算旋转后图像的大小以及一些辅助数据,循环体中对旋转变换后新图像的每一个点,分别找到原始图像中对应位置最近的四个点,然后进行双线性插值。
不知道题主什么地方看不懂?
恕我直言,不要指望逐句给你解释。如果你绝大部分都看不懂,那么给你讲明白会是一件很艰难的事。如果只是部分看不懂,我可以有针对性地给你解答。
MATLAB 图像处理工具箱(Image Processing Toolbox)中有imrotate函数可以实现这段代码相同的功能(而且还可以做更多):
imshow(uint8(imrotate(I,45,'bilinear')))
如果只是要使用旋转功能,完全没必要去研究上面的这段代码(水平比较一般,例如rows和cols两个变量其实是反过来的)。
更多追问追答
追问
T和TS
还有后面的x_low和p1以及最后面的公式是啥意思啊。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询