threshold,是“阈值”、“临界值”、“门槛”的意思。
其模糊一点的原理就是:对数值与阈值进行比较,针对比较结果
结果是指:高,还是低,其中在本人的阅历中没有等于,等于基本是包括到了大于或者是小于里面的
对数值进行对应的操作。
我们知道,大小比较必须是一个数字和一个数字比较,不能够出现三个数字和一个数字比较,更不能一个列表和数字比较,那么就很好解释为什么在阈值化之前要把图像由三通道的RGB图像转化为单通道的灰度图像了,原因就是因为前列表的元素是一个列表,列表怎么和数字比较?转化为灰度图,灰度图是一个一维列表,元素是一个个数字,那么就可以比较。
然后就是参数:
第一个:老规律了,首先就是你搞搞事情的对象,你要搞谁,搞哪张图片。
第二个:阈值,threshold,告诉函数门槛是什么。
第三个:最大值,有可能会用到的值,取决于你后面选取的type,maxval = max value。
第四个:type,怎么搞事情,搞事情的方法。
主要讨论一下怎么搞事情/xyx(你懂的,表情包哈哈):
我学到的type有一下几种,现在新版本有很多了。
No.1 cv.THRESH_BINARY 首先解释一下这个参数的英文含义,这是理解的第一步。
THRESH 其实就是:threshold 也就是门槛的意思,代表cv.threshold()这个函数,然后BINARY 是binary 是二进制、二的意思,意在告诉我们结果只有两个。
用代码说的话就是:
destination = (src[i,j]>threshold)? maxval : 0;
也就是:灰度图的在[i,j]位置的像素值是否大于阈值,如果大于的话,那么它的值就是maxval,如果不是的话(哪怕是等于也不行),那么就等于0。
通俗的来说就是:threshold就像是一个正直的巡逻官,他在每个灰度图的像素点去巡视(遍历),如果发现有比他小的像素,就直接把这个没用的像素给判死刑,置为0,如果发现比他还要高,还要牛逼的像素点,那么就直接把这个大哥给升到他所能升到的最高值maxval。
No.2 cv.THRESH_BINARY_INV 还是解释一下,前面的就不解释了,后面的INV 其实就是invert,是反的意思,也就是说和第一个方法恰恰相反。
用代码解释的话就是:
destination = (src[i,j] >threshold)? 0:maxval;
就是说,灰度图图的[i,j]位置的像素点的像素值是否大于阈值,如果大于的话,那么就变成0,否则变成最大值。
No.3 cv.THRESH_TRUNC
“TRUNC” 可以通过百度查到,是“truncate” ,截断的意思。
用代码理解就是:
destination = (src[i,j] >threshold)? maxval : src[i,j]
这个意思恰好解释了其原理的一部分。其原理就是:遍历每一个灰度图的像素,如果遍历到的像素值大于这个阈值,那么就把这个像素值变成你预先输入的maxval,
在这里maxval可以理解成一个像素值可以达到的最大值
如果小于等于,那么就保持不变。
No.4 cv.THRESH_TOZERO
“TOZERO” 可以看成 “to zero" 可以理解成:变成0的意思。
用代码理解:
destination = (src[i,j] >threshold)? src[i,j] : 0;
也就是,遍历灰度图的每一个像素点,如果遍历到的像素值大于这个阈值,那么保持不变,如果小于等于这个阈值,那么不好意思,直接为0。
Finally cv.THRESH_TOZERO_INV
”TOZERO_INV" 可以理解为:“to zero invert" 也就是,变成零的反义词,和上一个操作完全相反。
用代码理解:
destination = (src[i,j] > threshold)? 0:src[i,j]
也就是:遍历灰度图的每个一像素点,如果遍历到的像素点的像素值大于这个阈值,那么直接为0,否则,如果小于等于这个阈值,那么就保持不变。
下图将会帮助大家理解不同的阈值化类型所表示的确切含义。