Thresholding Binarization

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

Sharing is caring:

Leave a Comment