以文本方式查看主题

-  曙海教育集团论坛  (http://sun4.cn/bbs/index.asp)
--  DSP系统和硬件开发讨论区  (http://sun4.cn/bbs/list.asp?boardid=5)
----  李现路:DSP6000图像位置移动与变形的典型算法(三)  (http://sun4.cn/bbs/dispbbs.asp?boardid=5&id=84)

--  作者:admin
--  发布时间:2009-12-3 13:48:22
--  李现路:DSP6000图像位置移动与变形的典型算法(三)

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

 

三、图像的水平镜像变换算法

数学表达式原理:


设图像高度为IHeight,宽度为IWidth,原图中(x0,y0)经过水平镜像后从未将变为

(IWidth-x0,y0),其表达式为:

X0=IWidth-y1; y0=y1


算法的C语言代码:


/*水平镜像变换处理*/

void horizTranspose()

{

         int i,j;

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

         {            

              /*前半部分为原始图像*/

              //传送临时Y缓冲区

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

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

                      numPixels>>1);                                                       

             //传送临时Cb缓冲区

             DAT_copy((void *)(capCbbuffer + i * (numPixels >> 1)),

                      (void *)(tempCbbuffer + i * (numPixels >> 1)),

                      numPixels>>2);        

             //传送临时Cr缓冲区

             DAT_copy((void *)(capCrbuffer + i * (numPixels >> 1)),

                      (void *)(tempCrbuffer + i * (numPixels >> 1)),

                      numPixels>>2);                                                                          

                  

                   /*后半部分为水平镜像图像*/

                   for(j=numPixels/2;j<numPixels;j++)

                   {

                            //传送临时Y缓冲区               

                            *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + i*numPixels + numPixels-1-j);             

                   }

                               

             for(j=(numPixels>>2);j<(numPixels>>1);j++)

                   {

                            //传送临时Cb缓冲区

                            *(Uint8 *)(tempCbbuffer + i*(numPixels>>1) + j) = *(Uint8 *)(capCbbuffer + i*(numPixels>>1) + (numPixels>>1)-1-j);                   

                            //传送临时Cr缓冲区

                            *(Uint8 *)(tempCrbuffer + i*(numPixels>>1) + j) = *(Uint8 *)(capCrbuffer + i*(numPixels>>1) + (numPixels>>1)-1-j);                   

                   }

                                      

          }

}



四、图像的缩放算法

数学表达式原理:

假设图像x轴方向缩放比率fx,y轴方向缩放比率是fy,那么原图中点(x0,y0)对应

于新图中的点(x1,y1)的转换表达式为:

X0=x1/fx; y0=y1/fy


算法的C语言代码:

 

/*图像缩放参数*/

Float fXZoomRatio=0.5; //水平缩放比率

Float fYZoomRatio=0.5; //垂直缩放比率

/*缩放处理函数*/


/*缩放处理*/

void zoom()

{

         int i,j;

         int intCapX,intCapY;

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

         {

             for(j=0;j<numPixels;j++)

             {                    

            intCapX = (int)(j/fYZoomRatio+0.5);

            intCapY = (int)(i/fXZoomRatio+0.5);          

            

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

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

            {  

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

                     {

                                         //传送亮度信号

                                         *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX); 

                                }

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

                                {

                                             //传送亮度信号

                                         *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(capYbuffer + intCapY*numPixels + intCapX);                        

                                }

                                else

                                {

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

                                }                                                                                  

                 }

            else

            {

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

            }                                             

                   }       

         }

}


[此贴子已经被作者于2009-12-3 13:54:26编辑过]