
二值化
(英文: Binarization)
意将非二值图像经过计算变成二值图像,它进行图像分割(Segmentation)最简单的一种方法,即后续图像处理技术的基础(简化后期的处理,提高处理速度),可以将灰度图像转化成二值图像。一般用它将感兴趣的目标和背景分离,比如:将人脸图像分为皮肤区域和非皮肤区域,将图像文字转换成PDF文字(黑/白)等等。因此,图像二值化可以看做是聚类或者分类。
二值图像即为每个像素只有两个可能值的数字图像,常出现在图像掩码,图像分割,二值化和dithering。
其将大于某个临界灰度值的像素灰度设为灰度极大值,小于这个值的为灰度极小值,从而实现二值化。
根据域值,二值化分为固定阈值和自适应阈值。比较常用的二值化方法有:双峰法,P参数法,迭代法和OTSU法等。
首先,介绍一种比较简单的方法。将图片灰度化后,我们选择127(灰度值范围的一半)作为阈值,即将像素值大于127的像素值全部设为255,小于127的全部设为0.
def easy_binarization(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray[img_gray>127] = 255
img_gray[img_gray<=127] = 0
plt.imshow(img_gray, cmap='gray')
plt.show()
return img_gray
通过这种方法我们得到一张这样的图片:

严谨一点,为了应对每张灰度值大不相同,我们将阈值取为图像本身的平均值。
def mean_binarization(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshold = np.mean(img_gray)
img_gray[img_gray>threshold] = 255
img_gray[img_gray<=threshold] = 0
plt.imshow(img_gray, cmap='gray')
plt.show()
return img_gray