Thresholding Binarization adalah proses mengubah sebuah image kedalam bentuk binary. Untuk melakukan thresholding, image harus diconvert menjadi image grayscale.
Ada dua pendekatan untuk melakukan thresholding, simple dan adaptive.
Simple Thresholding
Kelebihan dari simple thresholding adalah proses lebih cepat. Fungsi yang digunakan adalah
cv2.threshold(image, threshold_value, max_value, threshold_type)
- image: image yang akan diconvert kedalam binary.
- threshold_value: nilai batas konversi.
- max_value: nilai yang akan digunakan untuk semua pixel diatas threshold_value.
- threshold_type: cara konversi
Ada 5 tipe Threshold type, yaitu
- cv2.THRESH_BINARY
- cv2.THRESH_BINARY_INV
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2.THRESH_TOZERO_INV
Untuk lebih jelas, langsung kita coba dalam code dibawah. Untuk image silakan download di https://drive.google.com/file/d/1n9lBCOq0S079hSbOaNLHWryA_WnIqaIH/view?usp=sharing
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('grayscale01.jpg', 0)
_, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
_, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
_, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
_, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
_, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
f, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(14,7))
ax1.set_title('Original')
ax1.imshow(img, cmap='gray')
ax2.set_title('Binary')
ax2.imshow(thresh1, cmap='gray')
ax3.set_title('Binary Inv')
ax3.imshow(thresh2, cmap='gray')
f, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(14,7))
ax1.set_title('Trunc')
ax1.imshow(thresh3, cmap="gray")
ax2.set_title('ToZero')
ax2.imshow(thresh4, cmap="gray")
ax3.set_title('Tozero Inv')
ax3.imshow(thresh5, cmap="gray")

Adaptive Thresholding
Kekurangan dari simple thresholding diatas adalah harus mengetahui nilai threshold. Hal ini dapat diselesaikan dengan cara adaptive thresholding.
cv2.adaptiveThreshold(image, max_value, adaptive_type, threshold_type, block_size, constant)
Note: block_size harus bilangan ganjil.
Ada 3 adaptive_type yaitu
- ADAPTIVE_THRESH_MEAN_C, menggunakan nilai mean dari pixel sekitarnya.
- ADAPTIVE_THRESH_GAUSSIAN_C, menggunakan perhitungan gaussian.
- THRESH_OTSU, menggunakan algoritma yang untuk memisahkan secara optimal 2 peak dari gray scale histogram.
Untuk lebih jelas, lihat contoh code berikut. Image yang digunakan silakan download di https://drive.google.com/file/d/1G9sYO59usg75poxn5oEcTMfDsszcaxBx/view?usp=sharing
img2 = cv2.imread('Origin_of_Species.jpg', 0)
img2 = cv2.GaussianBlur(img2, (3,3), 0)
adaptive1 = cv2.adaptiveThreshold(img2, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 5)
_, adaptive2 = cv2.threshold(img2, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
blur = cv2.GaussianBlur(img2, (5,5), 0)
_, adaptive3 = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,7))
ax1.set_title('Original')
ax1.imshow(img2, cmap="gray")
ax2.set_title('Adaptive1')
ax2.imshow(adaptive1, cmap="gray")
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,7))
ax1.set_title('Adaptive2')
ax1.imshow(adaptive2, cmap="gray")
ax2.set_title('Adaptive3')
ax2.imshow(adaptive3, cmap="gray")


File google colab bisa download di https://colab.research.google.com/drive/1NxxEsj3Ff-bknQfyiv7NSfpVuFaGxb3A?usp=sharing