图像的旋转实验DSP6000

[复制链接]
2120|20
 楼主| Flower1 发表于 2017-8-8 12:15 | 显示全部楼层 |阅读模式
图像的旋转实验DSP6000

数学表达式原理:

下面我们来推导一下旋转运算的变换公式。如下图所示,点(x0,y0)经过旋转θ度后
坐标变成(x1,y1)。其数学表达式为:
X0=x1cos(θ)+y1sin(θ)+ccos(θ)-dsin(θ)+a ;
Y0=-xsin(θ)+y1cos(θ)+csin(θ)-dcos(θ)+ b

算法的C语言代码:

/*图像旋转参数*/
Float fAngle=3.1415927/3; //旋转的角度
*画矩形边框函数*/
Void drawRectangle();
*计算图像旋转参数*/
Void computeParameter();
/*进行图像旋转处理*/
void rotate()
{
          int i,j,intInc;
          int intCapYInc;
          int intCapX,intCapY;

         /*进行图像旋转,重新赋值*/
          //方框内奇数行
          for(i=intALines;i<intDLines;i++)
          {
              for(j=intAPixels;j<intDPixels;j++)
             {
             intInc = i*2;   

            intCapX    = (int)(j*cosAngle + intInc*sinAngle + f1 + 0.5);
             intCapYInc = (int)(intInc*cosAngle - j*sinAngle + f1 + 0.5);           

            if((intCapYInc%2)==0)
             {
                      intCapY = intCapYInc/2;
             }
             else
             {
                      intCapY = (intCapYInc-1)/2+numLines/2;
             }

            //判断是否在原图范围内
             if((intCapX>=0) && (intCapX<numPixels) && (intCapY>=0) && (intCapY<numLines))   
             {
                                //传送亮度信号
                                 *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX);                                                                          
                  }
            else
             {
                       *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;
             }

                   }        
          }

         //方框内偶数行
          for(i=numLines/2+intALines;i<numLines/2+intDLines;i++)
          {
              for(j=intAPixels;j<intDPixels;j++)
             {                 
             intInc = (i-numLines/2)*2 + 1;

            intCapX    = (int)(j*cosAngle + intInc*sinAngle + f1 + 0.5);
             intCapYInc = (int)(intInc*cosAngle - j*sinAngle + f1 + 0.5);           

            if((intCapYInc%2)==0)
             {
                      intCapY = intCapYInc/2;
             }
             else
             {
                      intCapY = (intCapYInc-1)/2+numLines/2;
             }            

            //判断是否在原图范围内
             if((intCapX>=0) && (intCapX<numPixels) && (intCapY>=0) && (intCapY<numLines))   
             {
                                //传送亮度信号
                                 *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX);                                                                          
                  }
            else
             {
                       *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;
             }

                   }        
          }        
}
zhangmangui 发表于 2017-8-8 20:30 来自手机 | 显示全部楼层
结合公式理解就方便多了。
zhangmangui 发表于 2017-8-8 20:31 来自手机 | 显示全部楼层
如果再结合几张效果图就完美了
quickman 发表于 2017-8-8 23:19 | 显示全部楼层
图像选择不就是转置矩阵吗?
jstgotodo 发表于 2017-8-8 23:19 | 显示全部楼层
这个是图像压缩了吗
iamaiqiyi 发表于 2017-8-8 23:20 | 显示全部楼层
图像旋转有什么用?
dzfansman 发表于 2017-8-8 23:21 | 显示全部楼层
旋转角度怎么传递?
sanxingnote7 发表于 2017-8-8 23:21 | 显示全部楼层
改变移植到代码里面看看怎么样
backlugin 发表于 2017-8-8 23:22 | 显示全部楼层
如果图像保存到ram里面怎么能够正常旋转?
sdCAD 发表于 2017-8-8 23:23 | 显示全部楼层
这个计算一个图片需要多长时间?
fengm 发表于 2017-8-8 23:23 | 显示全部楼层
这个变量函数有点复杂
mmbs 发表于 2017-8-8 23:24 | 显示全部楼层
旋转运算的变换公式看不太懂
quickman 发表于 2017-8-8 23:24 | 显示全部楼层
以前都是在代码中直接实现,没有写过算法。
jstgotodo 发表于 2017-8-8 23:24 | 显示全部楼层
用的哪个处理器设计的?
iamaiqiyi 发表于 2017-8-8 23:24 | 显示全部楼层
现在在电脑编程中都以指令可以实现了。
dzfansman 发表于 2017-8-8 23:24 | 显示全部楼层
如果做图像修正应该用什么算法
sanxingnote7 发表于 2017-8-8 23:24 | 显示全部楼层
想做一个横屏实现,不知道能不能实现
backlugin 发表于 2017-8-8 23:24 | 显示全部楼层
是否需要借助其他的存储器?
sdCAD 发表于 2017-8-8 23:24 | 显示全部楼层
C6000的图片计算效率怎么样
fengm 发表于 2017-8-8 23:24 | 显示全部楼层
转换原理是不是矩阵变换?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

623

主题

887

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部