Halcon中像素、灰度和数据结构介绍


前言

       本篇文章对图像处理中的分辨率、像素、灰度和Halcon中的数据结构作了简单介绍,旨在帮助读者认识使用Halcon的基本概念,建立理论基础。


一、image

1.分辨率

        分辨率:一般用WxH的形式表示,W为图像水平方向上每一行的像素数,H为垂直方向上每一列的像素数。
在这里插入图片描述
       可以看到上述图片分辨率是512 × 512 ,表示图片是由一个512 × 512的像素点矩阵构成的,这张图片的宽度有512个像素,高度有512个像素,共有512 × 512 = 262144个像素。
       指出一个误解:通常我们会看到“分辨率1920*1080”,此处分辨率=Resolution,是数码图像的分辨率,与屏幕分辨率ppi和打印机分辨率dpi无关,它表示的是“像素数量”不要理解为面积,跟面积无任何关系。
       图像分辨率与面积相关时是指每英寸图像内的像素点数,单位为ppi(像素每英寸)。分辨率越高,像素的点密度越高,图像越逼真(这就是为什么做大幅的喷绘时,要求图片分辨率要高,就是为了保证每英寸的画面上拥有更多的像素点)。

2.像素(pixel)

        数字图像由连续的模拟图像采样和量化而得。 组成数字图像的基本单位是像素,所以数字图像是像素的集合。 像素的值代表图像在该位置的亮度(或灰度),称为图像的灰度值。 数字图像像素具有整数坐标和整数灰度值。

3.图像分类

       主要的数字图像有二值图像,灰度图像和彩色图像几种。黑白图像是指图像每个像素只有两种颜色,黑色或白色(即0表示黑色,1表示白色),没有过度。
黑白图片
        灰度图像是指图像每个像素由量化的灰度级来描述图像,但没有彩色信息,灰度级分256等,从0表示黑色,255表示白色。
灰度图片
       彩色图像指的是每个像素信息由R红色 G绿色 B蓝色这三原色通道构成图像,其中RGB又是由不同灰度等级来描述的。
在这里插入图片描述

二、灰度是什么?

        灰度图像中,最低值对应黑,最高值对应白;黑白之间的亮度值是灰度阶(gray-level) ,彩色图像则通过矢量函数(三阶张量,即三通道)描述,可以将一幅彩色图像看做由R,G,B三种基础色进行堆叠形成,而这三种基础色又对应了三个大小相同的矩阵,矩阵的数值表征这一通道颜色的深浅。有时除了考虑RGB三种颜色外,还考虑像素的透明度a,称为RGBA描述。
       色彩在人类视觉感知中极其重要,色彩与物体反射不同波长的电磁波的能力相关,一般将这三种颜色(三种不同波长的光)作为三原色:红(700nm)、绿(546.1nm)、蓝(438.5nm),灰度图像的矩阵元素数值与彩色图像间满足Y=0.299R+0.587G+0.114B;RGB数字图像中,以(0,0,0)表示黑色,(255,255,255)表示白色;灰度图像中,以0表示黑色,以255表示白色;二值图像中,以0表示黑色,1表示白色。
        图像每个位置[i,j]必定对应一个[0,255]的数值。
        所谓灰度色,就是指纯白、纯黑以及两者中的一系列从黑到白的过渡色。我们平常所说的黑白照片、黑白电视,实际上都应该称为灰度照片、灰度电视才确切。灰度色中不包含任何色相,即不存在红色、黄色这样的颜色。
        在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像(即单通道)。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
       用于显示的灰度图像通常用每个采样像素8 bits的非线性尺度来保存,这样可以有256种灰度(8bits就是2的8次方=256)。这种精度刚刚能够避免可见的条带失真,并且非常易于编程。
       一般,像素值量化后用一个字节(8bits)来表示。如把有黑-灰-白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。黑白照片包含了黑白之间的所有的灰度色调,每个像素值都是介于黑色和白色之间的256种灰度中的一种。

       用WinHex打开任意一张图片,可以看到每个像素的灰度值。
在这里插入图片描述

三、Halcon数据结构

1.Region

       图像处理的任务就是识别图像中的某些特征区域(Region),计算区域特征的时候,会把图像像素转换成区域来计算,这样可以减少资源的占用,方便存储和计算。区域是符合某些性质的像素子集,区域可以是任意的形状,单独的1像素也可以是区域。
       下图中红色的部分是通过调用threshold(阈值分割算子)得出的灰度值在128-255的Region。
在这里插入图片描述

2.亚像素轮廓(XLD)

       图像和区域最小的组成单位是像素,对于测量工具,例如钢尺,最小的测量单位是毫米,但是可以通过估读的方式读到亚毫米级,如2.5毫米。像素也是可以“估读”的,这就是所说的亚像素级。HALCON中使用XLD这个数据结构来存储和表示亚像素的数据。
       下图是通过threshold_sub_pix算子得出的亚像素轮廓示意图,每一个方格代表一像素,方格代表轮廓像素,线代表亚像素轮廓,可以看到亚像素轮廓在像素内,但是并不是在中心,而且根据计算存在不同的点位。
在这里插入图片描述
       亚像素轮廓带给我们更精确的点,从而在测量和定位当中提供更准确的图像位置。亚像素轮廓是一组有序的控制点的集合,数值为浮点型,精度一般为小数点后两位。通过上图可以看出,亚像素轮廓是通过周围的像素插值计算得到的。

3.Tuple

       有人认为HALCON的数组(Tuple)和C语言的数组是相同的,其实两者有所差别。C语言的数组只能存放一种变量,而且数组可以是二维的或三维的,而HALCON的数组就不太一样了。在数据存储方面,可以认为Tuple是一个结构体,可以同时存储多种数据类型,如字符串、整数和浮点数;在维度方面,Tuple是一个单一维度的数组,它只能是一维数组,而不像C语言中的数组那样进行多维度存储。

4.句柄

       句柄是指使用一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值来标识应用程序中的不同对象和同类中的不同的实例,例如一个窗口、按钮、图标、滚动条、输出设备、控件或者文件等。当一个应用程序要引用其他系统所管理的内存块或对象时,就要使用句柄。应用程序能够通过句柄访问相应的对象信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。
       句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
       在HALCON中有很多实例对象,例如标定、匹配、测量和窗口等都使用到了句柄,这些例子通过句柄来识别使用的是哪个对象。因为在程序中可能会出现多个匹配或者测量的对象,所以用句柄来标识,方便管理。
       在HALCON中句柄由数字和字母组成,共12位,数字和字母后面用一个括号表明这个句柄是用于哪一个对象类型,例如,H1C881D5FA10(window)就是用于窗口的句柄;H1C881D5FA40(shape_model)是用于模板匹配的句柄。
       句柄是需要存储的,一般都是存储实例对象。因为每一次打开相同的程序,相同的对象的句柄也是不一样的,例如上面的窗口和模板匹配句柄,再次打开的时候,就变成了句柄H24BE085FA10(window)和句柄H24BE085FA40(shape_model)。


总结

       基础不牢,地动山摇。基本的概念和理论有助于我们使用好软件,为日后的实战提供指导。

参考文献:
1.图像处理名词解释之灰度、灰度级、分辨率、像素值总结
2.机器视觉:使用HALCON描述与实现/杜斌编著.清华大学出版社

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值