石鑫华视觉论坛

 找回密码
 注册会员
查看: 5236|回复: 5

[新闻百科] 亚像素

[复制链接]
  • TA的每日心情
    开心
    昨天 21:00
  • 签到天数: 3412 天

    连续签到: 14 天

    [LV.Master]2000FPS

    发表于 2015-3-24 09:15:23 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x

    亚像素概述

    面阵摄像机的成像面以像素为最小单位。例如某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=d.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
      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
      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是插入亚像素的个数,也即放大倍数;Height和Width是原始图像的尺寸;HEIGHT和WIDTH是方大xf倍的尺寸;原始图片存放在buf中,目标图片存放在Buf中。
    亚像素的精度

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

    亚像素在机器视觉中的应用

        在机器视觉中,亚像素是一个比较常见的概念,在许多函数中,都可以选择是否使用亚像素,而在测量中,如位置、直线、圆等,都会出现亚像素。如测量某个圆的直径为100.12像素。这个后面的0.12就是亚像素。因为从像素中可以理解到,工业相机最小物理单元其实就是像素,但是我们在机器视觉测量中还是会得到小数点后的值,这个就是通过软件计算得到的,其实在真实情况下,并不一定是十分准确的。这个值通常在灰度图中会更容易反应出来,而在二值图像中,因为值只有0,1。因此很多函数并不一定会计算亚像素。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-9-1 00:02
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]300FPS

    发表于 2015-9-1 00:21:36 来自手机 | 显示全部楼层 来自:江西省 移动数据上网公共出口
    机器视觉,专业的石鑫华视觉http://shixinhua.com,专业的东莞华视自动化科技有限公司[url]http://visionbbs.com[/url]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-1-15 09:28
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]300FPS

    发表于 2016-3-8 14:00:19 | 显示全部楼层 来自:江苏省无锡市宜兴市 电信
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-20 20:25
  • 签到天数: 957 天

    连续签到: 1 天

    [LV.10]1000FPS

    发表于 2017-11-25 04:01:50 | 显示全部楼层 来自:河北省 移动
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-12-12 15:47
  • 签到天数: 94 天

    连续签到: 1 天

    [LV.6]600FPS

    发表于 2017-12-26 19:42:17 | 显示全部楼层 来自:江苏省扬州市 移动
    NI里面的findline,circle,edge的一些查找测量都是得到的浮点数,其实这些就是亚像素点,还有就是在patternmatch里面有让亚像素搜索的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    1 小时前
  • 签到天数: 202 天

    连续签到: 180 天

    [LV.7]700FPS

    发表于 2023-10-7 23:42:31 | 显示全部楼层 来自:四川省乐山市 电信
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-12-23 01:38

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表