现在的位置: 首页 > 综合 > 正文

基于matlab的图像旋转

2013年04月30日 ⁄ 综合 ⁄ 共 1865字 ⁄ 字号 评论关闭

第一次写博客,呵呵,先练习练习。

 用matlab 的imrotate 函数对二值图像做旋转时,不能实现功能,自己写了个旋转程序。旋转的基本原理如下:对原图中的点A(X0,Y0),旋转到(X1,Y1),  旋转角度为alpha,则 X1=X0*cos(alpha) +Y0*sin(alpha); Y1=-X0*sin(alpha) +Y0*cos(alpha);

操作思路:

(1)在宽、高分别为Src_h,Src_w原图中找一点A(col,row), col ,row 为像素所在的列数和行数。

(2)建立坐标系,以图像中心为坐标原点。则点A(col,row)的坐标为 x=col -Src_w /2 , y=0.5* Src_h-row ;

(3) 在原来图像上找四个顶点并求出坐标值,按照旋转公式计算旋转后的图像大小,并求出旋转后图像对应原图的像素值,用邻近插值法或者双线性插值法解决浮点问题。

%对图像顺时针旋转alpha ,alpha为弧度制,旋转角度范围 0-360

 

function Dest_img=rot2 (Src_img,alpha)
[Src_h,Src_w]=size(Src_img);
x1=-0.5*Src_w; y1= 0.5*Src_h;
x2=0.5*Src_w;  y2=0.5*Src_h;
x3=0.5*Src_w;  y3=-0.5*Src_h;
x4=-0.5*Src_w; y4=-0.5*Src_h;
%%计算新图像的四个角的坐标以图像中心为坐标原点
Destx1=cos(alpha)*x1+sin(alpha)*y1;
Desty1=-sin(alpha)*x1+cos(alpha)*y1;
Destx2=cos(alpha)*x2+sin(alpha)*y2;
Desty2=-sin(alpha)*x2+cos(alpha)*y2;
Destx3=cos(alpha)*x3+sin(alpha)*y3;
Desty3=-sin(alpha)*x3+cos(alpha)*y3;
Destx4=cos(alpha)*x4+sin(alpha)*y4;
Desty4=-sin(alpha)*x4+cos(alpha)*y4;
%的到旋转后图像的宽度和高度
Dest_w=max(abs(Destx1-Destx3),abs(Destx2-Destx4));
Dest_h=max(abs(Desty1-Desty3),abs(Desty2-Desty4));
Dest_img=zeros(Dest_h,Dest_w);
for i=1:Dest_h
    for j=1:Dest_w
        %转换到旋转前对应的坐标
       % (i,j) 点对应的坐标为 dest_x=j-0.5*Dest_w dest_y=0.5*Dest_h-i
       dest_x=j-0.5*Dest_w;
       dest_y=0.5*Dest_h-i;
       %获得对应的旋转前的坐标
       src_x=dest_x * cos(alpha) -dest_y *sin(alpha);
       src_y=dest_x * sin(alpha) +dest_y *cos(alpha);
       if  (src_x>-0.5*Src_w+1) && (src_x<0.5*Src_w-1) && (src_y >-0.5*Src_h+1 )&& (src_y <0.5*Src_h-1)
           %将旋转前的 坐标对应到图像的行和列 ,四舍五入,相当于最邻近插值
            row=round(0.5*Src_h-src_y);
            col=round(0.5*Src_w+src_x);
           Dest_img(i,j) = Src_img(row,col);
       end
    end
end
效果如下:

                               原图                                                                   

         

                          灰度化后旋转45度

 参考文献

http://wenku.baidu.com/view/b687c10ff78a6529647d5384.html

 http://www.cnblogs.com/mlv5/archive/2012/02/02/2336321.html
            
         
      

抱歉!评论已关闭.