曙海教育集团论坛DSP专区DSP系统和硬件开发讨论区 → 李现路:DSP6000图像位置移动与变形的典型算法(一)


  共有6883人关注过本帖树形打印

主题:李现路:DSP6000图像位置移动与变形的典型算法(一)

客人(124.78.*.*)
  1楼


李现路:DSP6000图像位置移动与变形的典型算法(一)  发帖心情 Post By:2009-12-3 13:46:58

 

                              李现路:DSP6000图像位置移动与变形的典型算法(一)

 

一、图像的平移算法

图像平移的数学表达式原理:

初始坐标为(x0,y0)的点经过平移(tx,ty)(以向右,向下为正方向)后,坐标变为(x1,y1)。这两点之间的关系是x1=x0+tx,y1=y0+ty 。

这样,平移后的图像上的每一点都可以在原图像中找到对应的点。例如,对于新图中的(0,0)像素,代入上面的议程组,可以求出对应原图中的点,可以直接将它的像素值同意设置为0或者255(对于灰度图就是黑色或白色)。

同样,若有点不在原图中,也就说明原图中有点被移出显示区域。如果不想丢失被移出的部分图像,可以将新生成的图像扩大tx,高度扩大ty。


 

平移处理的C语言代码:


 

/*图像偏移量初始化*/

Int intXOffset=-200; //水平偏移量

Int intYOffset=-200; //垂直偏移量,必须是2的整数

void geometryTrans()

{

         int i,j;

         int intCapX,intCapY;

         for(i=0;i<numLines;i++) //行数

         {

             for(j=0;j<numPixels;j++) //像素数 /每行

             {                    

            intCapX = j-intXOffset;

            intCapY = i-intYOffset/2;           

            

            // 判断 是否在原图范围内

            if((intCapX>=0) && (intCapX<numPixels))  

            {  

                //奇数行

                     if((i<numLines/2) && (intCapY>=0) && (intCapY<numLines/2))

                     {

                                         // 传送亮度信号

                                         *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + (i-intYOffset/2)*numPixels + intCapX); 

                                }

                                //偶数行

                                else if((i>=numLines/2) && (i<numLines) && (intCapY>=numLines/2) && (intCapY<numLines))

                                {

                                             // 传送亮度信号

                                         *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + (i-intYOffset/2)*numPixels + intCapX);                                 

                                }

                                else

                                {

                                    *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;

                                }                                                                                  

                 }

            else

            {

                      *(Uint8 *)(tempYbuffer + i*numPixels + j) = 0xFF;

            }                                             

                   }       

         }

}       

二、图像的垂直镜像变换算法

数学表达式原理:

设图像高度为IHeight,宽度为IWidth,原图中(x0,y0)垂直镜像后将变为(x0,

IHeight-y0),其表达式为:

设图像高度为IHeight,宽度为IWidth,原图中(x0,y0)垂直镜像后将变为(x0,

IHeight-y0),其表达式为:

X0=x1; y0=IHeight-y1


 

算法的C语言代码:


 

         portNumber = 0;

         vpHchannel0 = bt656_8bit_ncfc(portNumber);

         bt656_capture_start(vpHchannel0);

         /*等待第一帧数据采集完成*/

         while(capNewFrame == 0){}

         /*将数据存入显示缓冲区,并清采集完成的标志*/

         capNewFrame =0;


 

         for(i=0;i<numLines;i++)

         {

              /*传送Y缓冲区*/

              //前半部分为原始图像

                   DAT_copy((void *)(capYbuffer + i * numPixels),

                      (void *)(disYbuffer + i * numPixels),

                      numPixels>>1);

                   //后半部分为垂直镜像图像

                   DAT_copy((void *)(capYbuffer + i * numPixels),


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

李现路:DSP6000图像位置移动与变形的典型算法(一)








签名