Kamis, 04 Juni 2020

Histogram Equalization Untuk Memperbaiki Kualitas Citra - Contoh Dengan Python

Menyambung tulisan gua sebelumnya tentang histogram citra, kali ini gua mau bahas tentang Histogram Equalization, apa kegunaannya, dan juga contoh programnya pake Python.

Pengertian Histogram Equalization


Histogram Equalization adalah proses perataan Histogram, dimana distribusi nilai derajat keabuan dibuat merata.

Kenapa harus dibuat merata? mau melayani Uni Soviet apa gimana? wkwkwk
coba perhatiin gambar di bawah




Di atas ada 4 buah citra bersama masing-masing pacarnya. eh, maksudnya histogramnya. sekarang gua tanya. dari ke 4 citra di atas mana yang paling mudah diinterpretasi? paling jelas? paling enak diliat?
HAH? no dua?. tidak tidak, itu terlalu gelap aku tidak bisa mendengarnya!
gambar paling jelas disini adalah gambar ke 4. dan kalo diperhatiin histogramnya, no. 4 ini punya sebaran nilai paling merata di banding yang lain. liat aja no 1 sebarannya kebanyakan ngumpul di sebelah kanan (nilai derajat keabuan tinggi) jadi dia terlalu terang. kalo no. 2 malah ngumpul di kiri (nilai rendah) makanya gelap. gambar no 3 juga gak terlalu bagus, kontrasnya rendah dan sebaran nilainya pun gak merata.
maka terpilih lah no. 4 yang akan mengabdi hingga 5 tahun ke depan. jiaah.. pemilu.

Program Histogram Equalization Dengan Python


Karena kualitas citra yang paling baik di atas punya histogram yang paling merata, kita bisa memperbaiki kualitas citra yang awalnya terlalu terang, terlalu gelap atau yang punya kontras rendah dengan cara meratakan histogramnya. yoii.. jadi inilah gunanya Histogram Equalization.

Kita tau, citra dengan kualitas baik tentunya bakal lebih mudah diinterpretasi, baik oleh manusia maupun oleh mesin/komputer untuk berbagai keperluan.

Oke, kita langsung pake contoh aja, disini gua punya gambar keren. gua nyebutnya.. Tampan Dan Berani..
Baik, itu lebih mirip tempat sampah :D
mari kita perbaiki. nih gua kasih programnya.

from skimage import io, exposure as expo

img = io.imread("tempatsampah.jpg")
imgHE = expo.equalize_hist(img,nbins=256)
io.imsave("tampandanberani.jpg",imgHE)

Pendek amat, thor? panjangin lah..
wkwkwkwk dikira sini webtoon.

Di dalem program, pertama kita baca image "tempatsampah.jpg" terus kita pake method equalize_hist yang ada di sub modul exposure buat ngeratain histogramnya. hasilnya di-assign ke imgHE. jadi si imgHE ini isinya matriks image yang udah dilakuin Histogram Equalization.
selanjutnya si imgHE kita simpen sebagai citra baru dengan nama "tampandanberani.jpg"

Hasilnya, kita sambut.. tampan dan berani ;D


Sekarang keliatan deh tampan dan beraninya. bisa langsung dibuang ke tempat sampah. :D

udah ya, segini aja..
sampai ketemu ditulisan gua berikutnya..

Rabu, 03 Juni 2020

Histogram Citra Dengan Python3


Ditulisan pertama gua sebagai Ilmuwan Gagal, gua mau bahas tentang Histogram Citra, dan gimana sih cara nampilin histogram dari fitur citra. Untuk program yang ditampilin disini ditulis pake Python3 dengan Library Scikit-image.



Menampilkan Histogram Citra


Jadi, apa itu histogram? Apakah platform berbagi foto adalah histogram?
Bukaan, Patrick. Itu bukan histogram..
Berkuda juga bukan histogram.
Baik, histogram adalah diagram yang menggambarkan distribusi frekuensi nilai dari suatu produk, proses atau layanan. Dan yang gua bahas disini adalah Histogram citra, yaitu histogram yang menggambarkan distribusi frekuensi nilai intensitas pixel dalam suatu citra.
Misalkan kita punya gambar di bawah ini:


Kita bisa membuat dan menampilkan histogram dari komponen warna merah, hijau dan biru (RGB) dari gambar di atas dengan program di bawah ini:


from matplotlib import pyplot as plot
from skimage import io
img = io.imread("kura2.jpg") #file program dan gambar di lokasi yang sama

red=img[:,:,0] #baca matriks warna merah
row,col = red.shape
r=red.reshape(row*col)
green=img[:,:,1] #baca matriks warna hijau
row,col = green.shape
g=green.reshape(row*col)
blue=img[:,:,2] #baca matriks warna biru
row,col = blue.shape
b=blue.reshape(row*col)

f,(ax1,ax2,ax3) = plot.subplots(1,3)
n1,bins1,p1 = ax1.hist(r,256,facecolor='red')
ax1.set_title("komponen merah")
n2,bins2,p2 = ax2.hist(g,256,facecolor='green')
ax2.set_title("komponen hijau")
n3,bins3,p3 = ax3.hist(b,256,facecolor='blue')
ax3.set_title("komponen biru")
plot.show()


di program diatas gua pake scikit-image buat baca fitur citra, dan library matplotlib buat plotting grafik histogramnya. Hasilnya di bawah ini:




histogram di atas nampilin sebaran intensitas warna merah, hijau sama biru dari gambar atau citra yang ada di atas tadi.
Kita juga bisa bikin histogram dari gray-scale citra, programnya kaya gini:

from matplotlib import pyplot as plot
from skimage import io
img = io.imread("kura2.jpg",True) # baca citra sbg gray scale
ax = plot.hist(img.ravel(),bins=256)
plot.show()

tampilan hasilnya kaya gini:






Kegunaan Histogram Citra


Di ranah Computer Vision, histogram citra itu bisa dijadiin alat yang berguna buat image thresholding. Nilai threshold ini bisa nanti kita pake buat keperluan Edge Detection, Image Segmentation, terus eeh.. Edge Detection.. dan Image Segmentation.. dan.. pokoknya banyak dah J

Oke, sebenernya masih ada beberapa hal lagi yang pengen gua bahas, tapi nanti aja ya, sambung ditulisan berikutnya. Keburu sore soalnya. Daah..