LabVIEW如何判断图像是否为二值图像
LabVIEW如何判断图像是否为二值图像视频号
LabVIEW如何判断图像是否为二值图像B站
在LabVIEW的VDM模块中,可以比较轻松的得到图像的类型,如U8、U16、I16、RGB32等,但是要如何判断一幅图像是否为二值图像呢?也就是阈值函数后的图像,本身只有0值和1值,或0和2,0和3……0和255这样的值,图像中仅有两个值的图像类型需要如何判断呢?VDM中并没有这样的判断函数。在VDM中二值图像是使用U8类型的灰度图像来描述的,在保存图像时,直接将其保存为U8类型的8位图像。所以,如获取图像信息函数、获取文件信息函数等是无法判断是否为二值图像的。
获取图像信息函数的Imge Type中是没有二值图像类型输出的
ImageType
图像类型中,只有常规的U8、I16、U16等类型,并不包含二值图像类型。
获取文件信息
FileData Type
而获取文件信息函数中的文件数据类型,则有二值类型,但是NI视觉保存图像时,二值图像也是直接按照U8类型来保存的,所以即使将二值图像保存到临时文件中再判断文件类型,也是无法判断出其是不是二值图像的。
这里也可以借鉴获取文件信息函数中的文件数据类型的方式,来获取图像中的数据类型来判断是否为二值图像。在VDM中有一个IMAQ Histogram直方图函数,可以利用此函数的Histogram Report来判断图像是否二值图像:
IMAQHistogram直方图函数
在Histogram Report中有灰度级别的像素数量的直方图、最小值、最大值、还有面积(整个图像的大小),那么就可以利用最小值、最大值以及面积来判断是否为二值图像。如果是二值图像,例如只有0和1的二值图像,最小值为0,最大值为1,分别索引最小值0的像素数量和最大值1的像素数量,然后二者的像素数量的相加和面积比较,如果相等,那么就是二值图像。如果不相等,那就是灰度图像。二值图像时,最小值的数量加上最大值的数量,总是等于图像的面积的像素总数的。而如果是灰度图像,3个以上的值时,最小值+最大值的数量肯定是小于面积的。当然,这里可能会存在一些特殊情况,例如一幅图像是全黑的0值、或者是全白的255值,又或者是其他什么值,也就是只有一个值的特殊情况。这时的图像,其实你即可以认为是一值图像、二值图像,也可以认为是U8的灰度图像,因为二值图像,其实也可以认为是U8的灰度图像,就如VDM中默认就是将其当成U8图像来对待一样。所以,这里也是可以加一个判断的,最小值和最大值是否相等,如果相等的时候,那么只需要取最小或最大中的一个值的数量即可,而不用求最小和最大的和了,求和的话,那就数量翻倍了。下面来看一下二值图像判断的VI实现方法:
二值图像.vi
二值图像.vi的实现方式。这里就是利用直方图函数来判断图像是否为二值图像的方法。下面来看一下效果:
是否为二值图像.vi程序框图
0和1二值图像判断是二值图像
0和2二值图像判断:是二值图像
0和255二值图像判断:是二值图像
U8灰度图像二值图像判断:不是二值图像
0值全黑图像二值图像判断:是二值图像
255值全白图像二值图像判断:是二值图像
从上面的效果来看,是可以准确判断出二值图像的。而对于最后的只有一个值的图像判断,这里都是认为是二值图像,虽然都没有经过阈值函数,但是只有一个值,本身就是二值图像。可以认为一值图像是二值图像的特殊,而二值图像又是U8灰度图像的特殊,是子集包含关系。上面的效果中,无论是一值、二值还是U8灰度图像,在Image控件的图像信息中,总是显示为8-bit image。
源代码下载:
LabVIEW如何判断图像是否为二值图像
http://visionbbs.cn/thread-31480-1-1.html
(出处: 石鑫华视觉论坛)