Home > Article > Backend Development > A collection of examples of binarization methods for Python image processing
When using python for image processing, binarization is a very important step. Now I have summarized 6 image binarization methods that I have encountered (of course this is definitely not All binarization methods will continue to be added if new methods are discovered).
Related learning recommendations: python video tutorial
1. opencv simple threshold cv2.threshold
2. opencv adaptive Threshold cv2.adaptiveThreshold (There are two methods for calculating thresholds in adaptive thresholds: mean_c and guassian_c. You can try which one is better)
3. Otsu's binarization
Example:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('scratch.png', 0) # global thresholding ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # Otsu's thresholding th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) # Otsu's thresholding # 阈值一定要设为 0 ! ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # plot all the images and their histograms images = [img, 0, th1, img, 0, th2, img, 0, th3] titles = [ 'Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)', 'Original Noisy Image', 'Histogram', "Adaptive Thresholding", 'Original Noisy Image', 'Histogram', "Otsu's Thresholding" ] # 这里使用了 pyplot 中画直方图的方法, plt.hist, 要注意的是它的参数是一维数组 # 所以这里使用了( numpy ) ravel 方法,将多维数组转换成一维,也可以使用 flatten 方法 # ndarray.flat 1-D iterator over an array. # ndarray.flatten 1-D array copy of the elements of an array in row-major order. for i in range(3): plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray') plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([]) plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256) plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([]) plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray') plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([]) plt.show()
Result graph:
4. skimage niblack threshold
5. skimage sauvola threshold (mainly used for text detection )
Example:
https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_niblack_sauvola.html
import matplotlib import matplotlib.pyplot as plt from skimage.data import page from skimage.filters import (threshold_otsu, threshold_niblack, threshold_sauvola) matplotlib.rcParams['font.size'] = 9 image = page() binary_global = image > threshold_otsu(image) window_size = 25 thresh_niblack = threshold_niblack(image, window_size=window_size, k=0.8) thresh_sauvola = threshold_sauvola(image, window_size=window_size) binary_niblack = image > thresh_niblack binary_sauvola = image > thresh_sauvola plt.figure(figsize=(8, 7)) plt.subplot(2, 2, 1) plt.imshow(image, cmap=plt.cm.gray) plt.title('Original') plt.axis('off') plt.subplot(2, 2, 2) plt.title('Global Threshold') plt.imshow(binary_global, cmap=plt.cm.gray) plt.axis('off') plt.subplot(2, 2, 3) plt.imshow(binary_niblack, cmap=plt.cm.gray) plt.title('Niblack Threshold') plt.axis('off') plt.subplot(2, 2, 4) plt.imshow(binary_sauvola, cmap=plt.cm.gray) plt.title('Sauvola Threshold') plt.axis('off') plt.show()
Result graph:
6.IntegralThreshold (mainly used for text detection)
Usage: Run the util.py file at the following URL
https:/ /github.com/Liang-yc/IntegralThreshold
Result graph:
The above is the detailed content of A collection of examples of binarization methods for Python image processing. For more information, please follow other related articles on the PHP Chinese website!