打印

DSP6000图像的水平镜像变换算法

[复制链接]
724|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Clovee|  楼主 | 2017-9-14 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
            }                                             
                   }        
         }
}



相关帖子

沙发
zhangmangui| | 2017-9-14 22:25 | 只看该作者
非常感谢分享  有借鉴意义

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

708

主题

1032

帖子

2

粉丝