HSV Color Threshold

Yang perlu diperhatikan, pada model HSV nilai Hue pada rentang 0-180. Sementara untuk Saturation dan Value dari 0-256. Lihat modul https://skillplus.web.id/memahami-color-space/

Mari kita bandingkan antara RGB dan HSV dengan code berikut.

Silakan gunakan image sendiri, atau bisa download di https://drive.google.com/file/d/11MN4fPfu91u68tLD0WLtXNCKlZ3XD6jn/view?usp=sharing

import matplotlib.pyplot as plt
import numpy as np
import cv2

%matplotlib inline

img = cv2.imread('mnm.jpg')
img_copy = np.copy(img)
img_copy = cv2.cvtColor(img_copy, cv2.COLOR_BGR2RGB)

#rgb masking
lower_rgb = np.array([0, 0, 10]) 
upper_rgb = np.array([30, 230, 255])

rgb_mask = cv2.inRange(img_copy, lower_rgb, upper_rgb )

masked_rgb_img = np.copy(img_copy)
masked_rgb_img[rgb_mask==0] = [0,0,0]

#hsv masking
#range hue dari 0-180
lower_hue = np.array([0, 50, 50]) 
upper_hue = np.array([39, 256, 256])

hue_mask = cv2.inRange(img_copy, lower_hue, upper_hue )

masked_hue_img = np.copy(img_copy)
masked_hue_img[hue_mask==0] = [0,0,0]

f, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20,10))
ax1.set_title('HSV')
ax1.imshow(masked_hue_img)
ax2.set_title('RGB')
ax2.imshow(masked_rgb_img)
ax3.set_title('Original')
ax3.imshow(img_copy)

Kode diatas adalah untuk memilih permen m&m berwarna cyan (biru muda). Untuk beberapa area, HSV dapat menjangkau lebih banyak area dibanding pendekatan RGB (lihat permen yang diberi tanda panah).

Untuk pendekatan RGB agak sulit untuk tuning masking, karena warna biru cukup dekat dengan warna hijau. Jadi jika diperhatikan, ada bagian permen hijau yang ikut terpilih.

Kesimpulan

Tidak ada pendekatan yang lebih superior, tergantung kondisi dan situasi dari image yang akan dianalisa.

Sharing is caring:

Leave a Comment