
Author(s): Abhijith S Babu
Awalnya diterbitkan di Menuju AI.
Lihatlah foto ini yang saya ambil di salah satu perjalanan saya. Ini adalah gunung yang indah.
Gambar oleh Penulis
Sekarang saya melakukan beberapa modifikasi pada gambar itu dan melihatnya sekarang.
Gambar oleh penulis
Bukankah itu terlihat lebih baik dari aslinya? Nah, saya melakukan operasi sederhana pada gambar yang disebut pemerataan histogram.
Pemerataan histogram adalah teknologi penyempurnaan gambar yang banyak digunakan untuk meningkatkan tampilan visual dan memperkuat detail yang lebih kecil pada gambar. Ini adalah teknik yang memetakan piksel ke dalam kumpulan piksel baru sehingga piksel paling gelap akan dipetakan menjadi hitam sedangkan piksel paling terang akan dipetakan menjadi putih.
Gambar berwarna normal terdiri dari tiga saluran warna, yaitu Merah, Hijau, dan Biru. Setiap saluran warna dapat memiliki intensitas mulai dari 0 hingga 255. Semua warna dalam gambar digital dapat dibuat dengan menggabungkan setiap saluran warna dengan intensitas tertentu untuk setiap saluran. Misalnya, jika intensitas merah dan hijau mendekati 255 dan intensitas biru mendekati nol, kita mendapatkan warna yang mirip dengan kuning. Jika semua saluran memiliki intensitas 255, kita mendapatkan warna putih, sedangkan jika semua saluran memiliki intensitas 0, kita mendapatkan warna hitam.
Untuk pemerataan histogram, kami membagi gambar input menjadi tiga saluran warna yang berbeda. Sekarang kita dapat menerapkan pemerataan histogram pada masing-masing saluran. Untuk itu, kami membuat histogram dari citra yang merepresentasikan frekuensi kemunculan setiap tingkat intensitas. Dari distribusi frekuensi piksel, kami akan membuat distribusi kumulatif. Fungsi distribusi kumulatif akan mengatakan berapa banyak piksel yang memiliki intensitas kurang dari atau sama dengan tingkat intensitas yang diberikan.
Distribusi kumulatif yang dibuat dapat dinormalisasi ke kisaran [0,1] dengan membagi setiap nilai dengan jumlah piksel pada gambar. Nilai ini dapat dikonversi ke skala [0,255] dengan mengalikan setiap nilai dengan 255. Sekarang kita dapat mengganti setiap piksel pada gambar asli dengan nilai baru yang sesuai.
Operasi ini dapat dilakukan pada setiap saluran warna, dan output dari setiap saluran warna dapat digabungkan untuk membentuk gambar baru yang disamakan dengan histogram.
Ini adalah kode Python untuk hal yang sama.
dari PIL impor Gambar
impor matplotlib.pyplot sebagai plt
img = Gambar.buka(“jalur/ke/gambar”)
w,h = img.ukuran
# membuat histogram rg dan b
pix_r = [0]*255
pix_g = [0]*255
pix_b = [0]*255
untuk saya dalam rentang (w):
untuk j dalam rentang (h):
r,g,b = img.getpixel((i,j))
pix_r[r-1] += 1
pix_g[g-1] += 1
pix_b[b-1] += 1
plt.subplot(2,1,1)
plt.plot(pix_r,color=”merah”)
plt.plot(pix_g,color=”hijau”)
plt.plot(pix_b,color=”biru”)
#menghitung distribusi kumulatif
untuk saya dalam rentang (1.255):
pix_r[i] += pix_r[i-1]
pix_g[i] += pix_g[i-1]
pix_b[i] += pix_b[i-1]
plt.subplot(2,1,2)
plt.plot(pix_r,color=”merah”)
plt.plot(pix_g,color=”hijau”)
plt.plot(pix_b,color=”biru”)
plt.tampilkan()
num_pixel = w*h
untuk saya dalam rentang (w):
untuk j dalam rentang (h):
r,g,b = img.getpixel((i,j))
new_r = pix_r[r-1]*(255/bil_piksel)
new_g = pix_g[g-1]*(255/bil_piksel)
new_b = pix_b[b-1]*(255/bil_piksel)
img.putpixel((i,j),(int(new_r),int(new_g),int(new_b)))
img.save(“samakan_gambar.jpg”)
Sekarang perhatikan gambar ini
Gambar oleh Penulis
Setelah pemerataan histogram, ini adalah output yang saya dapatkan.
Gambar oleh Penulis
Setengah bagian bawah gambar mendapat rona yang berbeda karena pencahayaan di bagian atas gambar. Hal ini terjadi karena adanya perbedaan pendaran pada bagian atas dan bawah gambar. Bagaimana jika saya menyamakan setiap bagian gambar secara terpisah?
Ini adalah hasil yang saya dapatkan ketika saya membagi gambar menjadi dua blok dan menyamakannya secara terpisah.
Gambar oleh Penulis
Di sini kita dapat melihat bahwa detail bagian atas dan bawah ditingkatkan secara terpisah. Teknik ini dikenal sebagai block histogram equalization.
Mari kita lihat bagaimana pemerataan histogram blok dilakukan.
Pertama, gambar dibagi menjadi beberapa blok. Pendekatan adaptif dapat digunakan untuk membagi citra menjadi segmen-segmen berdasarkan tepi, tekstur, dan intensitas. Untuk ini, pertumbuhan wilayah atau algoritma segmentasi dapat digunakan. Sekarang untuk masing-masing daerah, pemerataan histogram dilakukan secara terpisah seperti yang telah dibahas di atas. Daerah yang disamakan dapat digabungkan bersama untuk mendapatkan gambar yang disempurnakan.
Sekarang, mari kita lihat gambar ini, di mana kita melakukan block histogram equalization.
Gambar oleh Penulis
Gambar oleh Penulis
Di sini kita dapat melihat batas segmen yang disebabkan oleh diskontinuitas intensitas pada batas blok. Ini disebut artefak pemblokiran.
Untuk menghilangkan artefak pemblokiran, kita dapat menggunakan teknik jendela bergerak. Di sini kita mendefinisikan jendela N*N dan menerapkan pemerataan histogram di dalam wilayah itu, lalu kita menggeser jendela dan menerapkan pemerataan di jendela baru. Ini terus berlanjut sampai kita menutupi seluruh gambar dengan jendela.
Ini adalah teknik komputasi yang mahal tetapi dapat digunakan dalam situasi yang diperlukan menggunakan pemrograman yang cerdas. Teknik ini secara adaptif menyempurnakan area kecil gambar sambil menghindari artefak pemblokiran.
Ada pendekatan lain yang efisien untuk menghilangkan artefak pemblokiran. Persamaan histogram blok dapat dilakukan pada daerah yang tidak tumpang tindih seperti sebelumnya, tetapi fungsi transfer dapat diinterpolasi dengan lancar saat kita berpindah dari satu daerah ke daerah lain.
Mari kita lihat bagaimana hal itu dilakukan…
Posisi suatu piksel dalam suatu blok dapat dilambangkan dengan (s,t) dimana s adalah posisi horizontal dalam blok dan t adalah posisi vertikal dalam blok. Baik s dan t dinormalisasi ke kisaran [0,1]. Sekarang kita harus mengidentifikasi tiga blok yang berdekatan, sehingga salah satunya secara horizontal paling dekat dengan piksel, satu secara vertikal paling dekat dengan piksel, dan satu lagi secara diagonal paling dekat dengan piksel.
Memiliki fungsi pencarian dari ketiga blok tersebut, kita dapat memadukan fungsi pencarian dari semua blok ini menggunakan persamaan
Pada persamaan ini f00 adalah fungsi pencarian blok diagonal terhadap piksel, f10 adalah fungsi pencarian blok vertikal terhadap piksel, f01 adalah fungsi pencarian blok horizontal terhadap piksel, f11 adalah fungsi pencarian blok mengandung piksel.
Dengan menggunakan metode ini, blok yang berbeda ditingkatkan secara terpisah dan dicampur sambil mempertahankan transisi yang mulus antar blok. Metode ini juga mengurangi masalah amplifikasi noise yang ada pada metode pemerataan tradisional lainnya. Perlu dicatat bahwa masih banyak lagi variasi teknik penyamaan histogram adaptif berdasarkan implementasinya.
Saya terbuka untuk tanggapan jika Anda ingin membahas lebih lanjut tentang pemerataan histogram.
Diterbitkan melalui Menuju AI