石鑫华视觉 发表于 2013-7-17 16:06:44

NI-Vision的亚像素精度(Subpixel Accuracy)

问题: Vision Development Module中的许多处理VI的输出都具有亚像素精度,这是什么意思呢?

解答: 许多图像处理VI都用到了边沿检测(Edge Detection)作为复杂计算的基础,因此这篇文档将主要针对边沿检测来解释亚像素精度。几乎所有的图像处理算法都是对图像(可以认为是一个大的数值矩阵)采用某种数值算法,通常这种数值计算的结果都不是整数。这是最简单的理解亚像素精度的方式。然后有些VI具有输入端,可以允许用户指定亚像素精度(Subpixel Accuracy)。


以IMAQ Edge Tool VI为例,有个输入参数是Subpixel Information,这是一个包含Interpolation Type(插值类型)和Subpixel Accuracy(亚像素精度)等输入的簇。NI Vision使用插值的方法来定位一个边界。Interpolation Type参数有两种选择,Quadratic(二次的)和Cubic Spline(三次样条)。寻找边界的第一件事是获得边沿强度分布(edge strength profile),本质上来说就是像素值相对其位置的函数。二次插值通过三个相邻的边沿强度值找到其拟合抛物线,该曲线的极大值点或极小值点就代表了边沿插值点的位置和强度值,该点的位置通常不是整数。三次样条插值也是类似的原理,只不过插值过程是基于相邻的四个像素。

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


如果subpixel accuracy参数选择为None,就表示只利用原来的像素点构成点阵。尽管如此,结果仍然很可能不是整数,因为尽管没有产生更大的点阵,但插值算法仍然是二次的或三次样条算法,只不过算法执行的对象是小一些的矩阵而已。

NI-Vision提供的亚像素精度是很有用的,计算的数值将比整数值更为精确。如果需要边沿检测的结果为整数值,可以把返回的小数值近似为最接近的整数。

CLEO 发表于 2013-10-20 10:59:53

不错,讲得很好!!感谢!!

717637845 发表于 2015-5-16 10:39:53


值得学习!谢谢提供!

88509572 发表于 2015-9-2 01:52:33



值得学习!谢谢提供!:)

88509572 发表于 2015-9-15 13:58:06

机器视觉论坛http://labviewvision.com,最专业流量最大的机器视觉论坛

songyoufang 发表于 2017-10-25 10:09:52

值得学习!谢谢提供!
页: [1]
查看完整版本: NI-Vision的亚像素精度(Subpixel Accuracy)

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