石鑫华视觉网| 东莞华视自动化科技有限公司|机器视觉商城|机器视觉论坛|淘宝店铺

机器视觉_石鑫华视觉网_光源_控制器_工业相机_镜头_视觉方案_NI_LabVIEW_Vision_VBAI_图像处理教程_论坛_商城_东莞华视自动化科技有限公司,机器视觉,工业相机,工业镜头,LED光源,图像处理,视觉方案,VBAI,LabVIEW

当前位置: 首页 > 图像 >

亚像素

时间:2012-10-04来源:shixinhua.com石鑫华视觉网 作者:石鑫华 点击: 999999次

像素

亚像素概述

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

亚像素的计算

  数码摄像机的成像面的分辨率以像素数量来衡量。隔行TV的分辨率是576x768个像素。 像素中心之间的距离有几个至十几个微米不等。为了最大限度利用图像信息来提高分辨率,有人提出了Sub-Pixel概念。意思是说,在两个物理像素之间还有像素,称之为Sub-Pixel,它完全是通过计算方法的出来的。这里提出计算方法。
  如果原始图像是n行m列的,希望做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;}; //像素的颜色
------分隔线----------------------------
石鑫华推荐