在LabVIEW中,要将黑白图像/灰度图像转换成二值图像(只有两个值的图像,通常是0和1或0和255),是有许多个函数的,有手动阈(念yù,不念fá)值Threshold函数,多重手动MultiThreshold阈值,自动阈值AutoBThreshold,自动多重阈值AutoMThreshold,局部阈值Local Threshold等许多个函数可以实现。
LabVIEW中的二值化函数在程序函数选项卡中的位置
IMAQ Threshold阈值函数
Keep/Replace Value(Replace):为保持/替换值(替换)选项。即符合Range阈值范围内的值,是被替换成指定的值Replace Value,还是保持不变。替换成指定的值,是指将阈值范围内的值统一替换成某一种颜色,如红色,这时图像显示控件的调色板类型Palette Type需要设置成Binary二值模式才可以正常的显示,不在阈值范围内的值,则变成黑色。保持不变,则将阈值范围内的值保持原有值不变,而不在阈值范围内的值则变成黑色。这时Threshold函数的Replace Value是无效的。这是要正常显示,因为其包含了灰度值,则需要将Image显示控制的调色板类型Palette Type设置成Grayscale灰度模式。
Image Src:原始图像,即需要转换的灰度图像。
Image Dst:目标图像,即转换后的二值图像。原始图像、目标图像,都是指图像缓存的地址引用。并不指图像数据本身。NI所有的视觉函数中的Image Src、Image Dst都是如此定义的。
Range:阈值范围。是一个簇元素,里面有两个值,一个Lower Value较低值,一个Upper Value较高值。在指定的较低值、最高值范围内的值为目标特征,而不在此范围内的值,全部变黑(值为0)
Replace Value:替换值。即将阈值范围内的值替换成什么值。替换值包含了15个值,在灰度256级范围内,可以有17个循环。下表中的g为替换值,也表示了灰度值。即当使用替换值时,如果调色板没有设置成Binary模式,则会将替换值显示了灰度值。如替换值为1,则其使用的调色版是红色的,为2时,则为绿色的,……,为15时,为长春花色;16时,则又变成红色,17是为绿色……,当g=255时,则直接显示为白色,不再使用调色板中的颜色显示。如果使用Grayscale灰度模式显示时,则替换值g=1时,则替换值的灰度值为1,替换值为2时,则为2……g=100时,灰度值为100,g=255时,则灰度值也为255。另外 g值不要设置为0。如果为0时,则和背景是一样的颜色,无法区分阈值效果。
扩展阅读:
关于LabVIEW中二值化后图像显示全黑的问题-图像编程-石鑫华视觉网-机器视觉-图像处理-视觉教程-工业相机-工业镜头-LED光源-光源控制器-视觉配件-视觉测量系统-LabVIEW-Vision-Halcon
http://shixinhua.com/image/5466.html
Iamge Dst Out:目标图像输出。如果Image Dst没有连接,则转换后的图像存储在Image Src的地址中,而Image Src中的原来的灰度图像则被覆盖掉。因此,如果要保留Src中的图像,则Dst必需另外指定缓存。
阈值函数使用方法
阈值函数使用效果
IMAQ MultiThreshold多重阈值
多重阈值的功能和阈值的功能非常类似,只是此函数可以对一张图像做多个灰度值的二值化。因为它可以指定多个区段的二值状态,相应的区段阈值、替换值、保持/替换,都是在Threshold Data中指定,Threshold是一个一维数组,数组元素则为簇,簇中则包含了Lower Value较低值、Upper Value较高值、Replace Value替换值、Keep/Replace Value(Replace)保持/替换值(保持)。
多重阈值函数使用方法
IMAQ AutoBThreshold2自动B阈值
Method(clustering):(自动阈值)方法。主要是选择自动B阈值的方法。可以使用如下的方法:
自动阈值方法
Clustering:聚类。聚类是使用最频繁的自动阈值方法。当你需要使用阈值的图像有两种及以上的灰度类别时,应该考虑使用聚类方法。聚类方法是最为通用的一种自动阈值方法。
Entropy:熵。熵阈值法是基于经典的图像分析技术,其最适合那些图像中有极小比例的粒子检测。例如,此函数适用于缺陷、瑕疵检查。
Metric:度量。对于Metric度量阈值,计算出最优阈值用于图像。其值取决于代表表面计算出的初始灰度值。其中最优阈值对应于最小于值。
Moments:动差。Moments动差阈值,非常适合应用于对比度比较差的图像。动差法是基于一个假设:假设所观察到的图像是理论上的二值图像的一个模糊版本。模糊的产生主要是从采集过程、电子噪声或者轻微的散焦等引起的,模糊图像和原始图像的均值和方差的统计动差被认为相同的。这个函数用来重新计算理论二值图像。
Interclass Variance:组内方差。组内方差是一种统计技术,是基于差别分析的。一个最优阈值是由类别之间的阈值差异的最大值来决定的。
Look For(Bight Object):查找目标(白色)。即需要查找的对象特征,默认为白色。这时白色较明亮的目标特征,将被变成红色,而较黑的则认为是背景。
ROI Descriptor:兴趣区域描述。即输入ROI区域的信息。自动阈值时,可以使用ROI功能画一个区域,然后再对此区域进行自动阈值。在ROI外的区域则被自动设置为黑色背景区域。如果ROI不输入或使用空值,则默认使用整个图像。
Threshold Limits:阈值极限。用于限定自动阈值的上下限。自动阈值虽然可以自动设置,但是也可以再指定其自动阈值的一个范围。不过通常来讲,此范围不会设置,空值时则默认使用图像的最小值0、最大值255。NI也是推荐不设置此值的,如视觉助手、VBAI中都是没有阈值极限设置的:
Replace Value(1):替换值(默认值为1)。即二值化后的目标被替换成什么颜色。自动阈值中没有保持、替换选项,因此只能替换。
Threshold Range Out:阈值范围输出。这里是指自动阈值执行完后,输出的当前图像使用的阈值的范围。这里虽然是一个范围,但是其实能够改变的只有一个值。如果寻找的是白色目标时,则可能改变的是Lower Value低值,而Upper Value高值则一直保持255不变;而假如寻找的是黑色目标,则可能改变的值是Upper Value高值,Lower Value低值则会一直保持0不变。这是因为自动阈值函数只能寻找白色目标和黑色目标,并不能寻找灰度目标。只有能寻找灰度目标时,这个阈值范围才可能是双向可变的。这在视觉助手中也是可以直观的看到的。
视觉助手中的自动阈值
自动B阈值使用方法
自动B阈值使用效果-全图像白色目标聚类方法
自动B阈值使用效果-全图像白色目标熵方法
自动B阈值使用效果-全图像白色目标度量方法
自动B阈值使用效果-全图像白色目标动差方法
自动B阈值使用效果-全图像白色目标组内方差方法
自动B阈值使用效果-全图像黑色目标聚类方法
自动B阈值使用效果-ROI部分图像白色目标聚类方法
可以看到各种方法多少会有一些差别。如果对于图像的差别不是很好把握,可以使用万能方法-试。试一下各种方法,看哪种效果好,就选择哪种。其它的一些组合可以自己去研究一下。
自动B阈值使用效果-ROI部分图像白色目标度量方法未限制阈值极限
这时可以看到阈值范围输出的是180~255。
自动B阈值使用效果-ROI部分图像白色目标度量方法限制阈值极限为200
这时可以看到阈值范围输出的下限则为200,等于限定的下限200。即当计算得到的自动阈值的下限(或黑目标的上限)小于阈值极限时,则会自动将其设置为阈值极限值。
IMAQ AutoMThreshold自动多重阈值函数
自动多重阈值函数,是可以使用自动的方法,将一幅灰度图像二值化为多个区段的二值图像。使用此函数后,可以得到一个查找表Lookup Table,或者是自动多重阈值的数据Threshold Data。
Number of Classes:分类数量。即需要将图像分成多少个灰度类别(包含了黑色的背景0值)。
Image Mask图像掩模:Image Mask is an 8-bit image specifying the region in the image to use for the calculation. Only those pixels in the original image that correspond to an equivalent non-zero pixel in the mask image are used for the calculation. The entire image is used in the calculation if Image Mask is not connected.图像掩模是一幅8位的图像,图像中指定的区域将用于计算。原始图像中与掩模图像中的非零值像素对应的那些像素才参于计算。如果图像掩模没有连接,则整个用于计算。
Lookup Table查找表:Lookup Table is a grayscale replacement table. This input is an array containing a maximum of 256 elements if Image Src is an 8-bit image or a maximum of 65,536 elements if Image Src is a 16-bit image. Individual pixels within the image are not modified when the lookup table is missing a value that corresponds to those pixels.查找表是一个灰度替换表。这个输入是一个一维数组,如果Image Src原始图像是为8位的图像,则数组可包含最大256个元素,如果Image Src原始囚犯是16位的图像,则数组可包含最大65536个元素。当查找表中丢失一些表示那些像素的值时,与这些值对应的图像中的像素则不会被修改。
如果使用查找表数据输出,则后面可以连接IMAQ UserLookup 2 VI用户查找表函数进行二值化。
Threshold Data Out:阈值数据输出。此阈值数据输出,与多重阈值函数IMAQ MultiThreshold中的Threshold Data输入是同样的数据类型,因此当使用此数据输出时,后面可以连接多重阈值函数MultiThreshold进行多重阈值二值化。
IMAQ AutoMThreshold自动多重阈值函数+IMAQ UserLookup用户查找表函数
上图为多重阈值函数的使用方法之一。本方法中,使用的是Lookup Table输出,然后在后面配合使用了IMAQ UserLookup函数。使用此方法,也可以进行多重阈值。
在这里的使用方法中,IMAQ AutoMThreshold自动多重阈值函数和IMAQ UserLookup用户查找表函数都有Mask输入。因此可以连接Mask接线端。自动多重阈值的Mask用于计算指定Mask中的灰度,然后再将其自动二值化为指定的级数。Mask区域不同,其对应的灰度值也不同,将决定多级二值化区间的阈值也不同。而UserLookup的Mask则只决定需要针对图像中的哪个部分进行计算。不在Mask区域里的,则不计算。
因为IMAQ AutoMThreshold自动多重阈值函数输出的查找表基本上是256个元素一维数组,因此为了看到丢失查找表部分数据的效果,使用了数组子集函数,来截取部分查找表,以方便查看IMAQ UserLookup用户查找表函数的功能效果。
自动阈值Mask+查找表Mask+256级查找表效果
可以看到查找表中的Mask有效时,则只处理部分图像(二值图像中看效果,ROI外面的图像为多色点,因为使用的是二值调色板,所以是这样的效果)。
自动阈值Mask+查找表Mask+200级查找表效果
当只有200级查找表时,则丢失的查找表数据所以表示的像素不替换值,因为丢失的是255这的高位的查找表替换值,因此Mask中较白的图像则不替换,仍然使用默认的图像(多色点)。
自动阈值Mask+查找表Mask+200级查找表效果-二值图像使用Grayscale灰度调色版
Mask为整个图像+查找表长度256
自动阈值Mask、查找表Mask都是使用整个图像,查找表长度也使用了256级,则多重阈值二值化针对整个图像进行处理。本演示中,将灰度图像分级为4个级别,在二值图像中显示为黑、红、绿、蓝。
IMAQ AutoMThreshold自动多重阈值函数+IMAQ MultiThreshold多重阈值函数
上图所示的是自动多重阈值函数配合(手动)多重阈值函数进行二值化的程序框图。在此函数中,只需要考虑自动多重阈值函数的Mask即可。
自动阈值Mask使用较白部分的灰度图像进行计算
如果Mask使用较白部分的图像进行计算,则可以看到阈值数据Threshold Data中的分割阈值都比较大。
自动阈值Mask使用较黑部分的灰度图像进行计算
如果Mask使用较黑部分的图像进行计算,则可以看到阈值数据Threshold Data中的分割阈值都比较小。
自动阈值Mask使用整个图像进行计算
当Mask使用整个图像进行计算时,可以看到阈值数据比较均匀。基本上为256级四等分的样子。
IMAQ Local Threshold局部阈值函数
扩展阅读:
NI视觉助手之局部阈值Local Thresholding
http://labviewvision.com/thread-4954-1-1.html?fromuid=9
(出处: 机器视觉论坛)
局部阈值也是一种自动二值化方式。只不过此方法与全局自动阈值不同。全局自动阈值是计算整个图像中的灰度值,然后强度二值化的阈值。而局部阈值则是根据当前像素点周围的领域的灰度值来计算适合的阈值的。因此在一些照明不均匀的机器视觉与图像处理环境中,使用局部阈值要比手动阈值或自动阈值都强。
Method(Niblack):局部阈值方法。可以使用Niblack尼布拉克算法和Background Correction Algorithm背景校正算法。
Look For(Bright Objects):查找对象。默认为白色目标,也可以选择Black Objects黑色目标。
Windows Size:窗口尺寸。即窗口中的像素都将参与阈值计算。窗口越小,则细分的越厉害,针对不均匀的照明越好,但是这样会对噪声更敏感、处理也越耗时速度也越慢。默认为32×32像素。
Niblack Dviation Factor(0.2):尼布拉克偏差系数。是尼布拉克算法的一个系数因子。此值越小,对光强度越敏感,可以应对更差的非均匀照明。此参数只针对尼布拉克算法。背景校正算法是无用的。
IMAQ Local Threshold局部阈值使用方法
上图为IMAQ Local Threshold局部阈值函数在LabVIEW中的使用方法。
Niblack尼布拉克局部阈值算法(偏差系数0.2)+白色目标+32×32窗口
Niblack尼布拉克局部阈值算法(偏差系数0.2)+黑色目标+32×32窗口
Niblack尼布拉克局部阈值算法(偏差系数0.5)+白色目标+32×32窗口
Niblack尼布拉克局部阈值算法(偏差系数0.2)+白色目标+64×64窗口
Background Correction Algorithm背景校正算法+白色目标+32×32窗口
Background Correction Algorithm背景校正算法+黑色目标+64×64窗口
局部阈值方法的查找对象相对比较简单,非白即黑。使用方法也比较简单,只有两种算法。可以逐个去试。窗口尺寸则相对比较麻烦一点。最好是可以多试几个窗口大小。这个窗口大小可以跟ROI关联起来,这样可以直接在图像显示窗口中画一个ROI出来。