LKP2 - Medina Fitri Maulida - G6401211096

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Medina Fitri Maulida

G6401211096
Kelas Paralel P3

Program
import cv2
from google.colab.patches import cv2_imshow

# Membaca citra Lenna.png


citra = cv2.imread("Lenna.png")

# Menyimpan nilai dimensi citra


row, col, ch = citra.shape

# Mengubah color space dari RBG menjadi HSV


# Menggunakan fungsi cvtColor
citra_hsv = cv2.cvtColor(citra, cv2.COLOR_BGR2HSV)

# Melakukan splitting hue, saturation, value ke variabel berbeda


h, s, v = cv2.split(citra_hsv)

# Mencari rataan hue


sum_h = 0
for i in range (0,row):
for j in range (0,col):
sum_h = sum_h + h[i,j]
avg_h = sum_h/(row*col)
print("Rata-rata Hue:",avg_h)

# Mencari rataan saturation


sum_s = 0
for i in range (0,row):
for j in range (0,col):
sum_s = sum_s + s[i,j]
avg_s = sum_s/(row*col)
print("Rata-rata Saturation:",avg_s)

# Mencari rataan value


sum_v = 0
for i in range (0,row):
for j in range (0,col):
sum_v = sum_v + v[i,j]
avg_v = sum_v/(row*col)
print("Rata-rata Value:",avg_v)
# Mengganti nilai piksel sesuai dengan rataan intensitas
# Hue
threshold_h = h.copy()
for i in range (0, row):
for j in range (0, col):
if (h[i, j] < avg_h):
threshold_h[i, j] = 0
else:
threshold_h[i,j] = 255
# Saturation
threshold_s = s.copy()
for i in range (0, row):
for j in range (0, col):
if (s[i, j] < avg_s):
threshold_s[i, j] = 0
else:
threshold_s[i,j] = 255
# Value
threshold_v = v.copy()
for i in range (0, row):
for j in range (0, col):
if (v[i, j] < avg_v):
threshold_v[i, j] = 0
else:
threshold_v[i,j] = 255

# Menampilkan hasil
cv2_imshow(threshold_h)
cv2.waitKey(0)
cv2_imshow(threshold_s)
cv2.waitKey(0)
cv2_imshow(threshold_v)
cv2.waitKey(0)

citra_hsv_manual = citra.copy()

for i in range(0, row):


for j in range(0, col):
b = citra[i, j, 0]
g = citra[i, j, 1]
r = citra[i, j, 2]

maxrgb = max(r, g, b)
minrgb = min(r, g, b)
# Value
v = maxrgb

# Saturation
if v == 0:
s = 0
else:
s = (v - minrgb) / v

# Hue
if v == minrgb:
h = 0
elif v == r:
h = int(60 * ((g - b) / (v - minrgb)))
elif v == g:
h = int(60 * (2 + ((b - r) / (v - minrgb))))
elif v == b:
h = int(60 * (4 + ((r - g) / (v - minrgb))))

if h < 0:
h += 360

h = h % 360

citra_hsv_manual[i, j, 0] = h
citra_hsv_manual[i, j, 1] = s * 255
citra_hsv_manual[i, j, 2] = v

# Melakukan splitting hue, saturation, value ke variabel berbeda


h, s, v = cv2.split(citra_hsv_manual)

# Mencari rataan hue


sum_h = 0
for i in range (0,row):
for j in range (0,col):
sum_h = sum_h + h[i,j]
avg_h = sum_h/(row*col)
print("Rata-rata Hue:",avg_h)

# Mencari rataan saturation


sum_s = 0
for i in range (0,row):
for j in range (0,col):
sum_s = sum_s + s[i,j]
avg_s = sum_s/(row*col)
print("Rata-rata Saturation:",avg_s)

# Mencari rataan value


sum_v = 0
for i in range (0,row):
for j in range (0,col):
sum_v = sum_v + v[i,j]
avg_v = sum_v/(row*col)
print("Rata-rata Value:",avg_v)

# Mengganti nilai piksel sesuai dengan rataan intensitas


# Hue
threshold_h = h.copy()
for i in range (0, row):
for j in range (0, col):
if (h[i, j] < avg_h):
threshold_h[i, j] = 0
else:
threshold_h[i,j] = 255
# Saturation
threshold_s = s.copy()
for i in range (0, row):
for j in range (0, col):
if (s[i, j] < avg_s):
threshold_s[i, j] = 0
else:
threshold_s[i,j] = 255
# Value
threshold_v = v.copy()
for i in range (0, row):
for j in range (0, col):
if (v[i, j] < avg_v):
threshold_v[i, j] = 0
else:
threshold_v[i,j] = 255

# Menampilkan hasil
cv2_imshow(threshold_h)
cv2.waitKey(0)
cv2_imshow(threshold_s)
cv2.waitKey(0)
cv2_imshow(threshold_v)
cv2.waitKey(0)
Penjelasan Program
● Program dibuat sesuai dengan langkah-langkah yang diminta pada soal. Namun, pada
langkah kedua, digunakan dua metode berbeda untuk mengubah citra menjadi HSV
Color Space. Kode di bagian atas mengubahnya dengan fungsi cvtColor, sementara
kode di bagian bawah menggunakan rumus konversi secara manual.
● Rataan masing-masing hue, saturation, dan value dilakukan dengan menggunakan loop
for: menjumlahkan nilai di setiap koordinat piksel, lalu membaginya dengan jumlah piksel
yang ada.
● Thresholding juga dilakukan dengan menggunakan loop for terhadap masing-masing
koordinat piksel sesuai permintaan soal.

Ouput
Hasil antara konversi menggunakan fungsi cvtColor dan menggunakan rumus manual
menunjukkan perbedaan. Output yang yang menggunakan fungsi semuanya sesuai dengan
permintaan soal, sementara yang dilakukan secara manual memiliki perbedaan pada output
hue.

Menggunakan fungsi cvtColor


Menggunakan konversi manual

You might also like