亚像素

    面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到什么程度?就很困难解释。两个像素之间有5.2微米的距离,在宏观上可以看作是连在一起的。但是在微观上,它们之间还有无限的更小的东西存在。这个更小的东西我们称它为“亚像素”。实际上“亚像素”应该是存在的,只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。

计算

    数码摄像机的成像面的分辨率以像素数量来衡量。隔行TV的分辨率是576x768个像素。像素中心之间的距离有几个至十几个微米不等。为了最大限度利用图像信息来提高分辨率,有人提出了Sub-Pixel概念。意思是说,在两个物理像素之间还有像素,称之为Sub-Pixel,它完全是通过计算方法的出来的。这里提出计算方法。

    如果原始图像是nm列的,希望做k细分的Sub-Pixel,这样就有新的行N和列M,有N = k*n,M = k*m

    原来相邻4个像素包含的区域现在变成了(k+1)*(k+1)的区域了;要填满这个(k+1)*(k+1)的区域,实际上就是从一个小正方形映照到一个大正方形的过程。在数学上用双线性插值得算法可以轻松搞定。(二次或者三次样条曲线)。下面是算法的代码:

XYPNT qdot(

XYPNT d[4], //d[4] 顺时针排列

XYPNT a //含有要插入的点的位置

){

XYPNT r; //工作单元

int i;

float x0,y0,x1,y1; //

PNT z[4];

float ap,bt,ax,ay;

x0=d[0].q.x;y0=d[0].q.y;

x1=d[2].q.x;y1=d[2].q.y;

r=a;

ax=a.q.x;ay=a.q.y;

for(i=0;i<4;i++)z[i]=d[i].pnt;

ap=(ax-x0)/(x1-x0);bt=(ay-y0)/(y1-y0);

r.pnt.r=(1.-ap)*(1.-bt)*z[0].r+bt*(1.-ap)*z[3].r+ap*(1.-bt)*z[1].r+ap*bt*z[2].r;

r.pnt.g=(1.-ap)*(1.-bt)*z[0].g+bt*(1.-ap)*z[3].g+ap*(1.-bt)*z[1].g+ap*bt*z[2].g;

r.pnt.b=(1.-ap)*(1.-bt)*z[0].b+bt*(1.-ap)*z[3].b+ap*(1.-bt)*z[1].b+ap*bt*z[2].b;

return r;

}

其中数据结构

struct PNT{BYTE b,g,r;}; //像素的颜色

struct DXY{short x,y;}; //像素的坐标

struct XYPNT{ //像素的全信息

DXY q;

PNT pnt;};

调用示例

for(i=0;i<HEight;i++)for(j=0;j<WIdth;j++){

d[0].q.x=j*xf ; d[0].q.y=i*xf; d[0].pnt=*(buf+i*WIdth+j);

d[1].q.x=(j+1)*xf; d[1].q.y=i*xf; d[1].pnt=*(buf+i*WIdth+j+1);

d[2].q.x=(j+1)*xf; d[2].q.y=(i+1)*xf; d[2].pnt=*(buf+(i+1)*WIdth+j+1);

d[3].q.x=j*xf ; d[3].q.y=(i+1)*xf; d[3].pnt=*(buf+(i+1)*WIdth+j);

for(i0=0;i0<xf;i0++)for(j0=0;j0<xf;j0++){

aa.q.x=j*xf+j0;aa.q.y=i*xf+i0;

rr=qdot(d,aa);

*(Buf+aa.q.y*WIDTH+aa.q.x)=rr.pnt;

}

}

    其中xf是插入亚像素的个数,也即放大倍数;HeightWidth是原始图像的尺寸;HEIGHTWIDTH是方大xf倍的尺寸;原始图片存放在buf,目标图片存放在Buf中。

亚像素的精度

    亚像素精度是指相邻两像素之间细分情况。输入值通常为二分之一,三分之一或四分之一。这意味着每个像素将被分为更小的单元从而对这些更小的单元实施插值算法。例如,如果选择四分之一,就相当于每个像素在横向和纵向上都被当作四个像素来计算。因此,如果一张5x5像素的图像选择了四分之一的亚像素精度之后,就等于创建了一张16x16的离散点阵,进而对该点阵进行插值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值