Peningkatan Kontras Gambar Grayscale Menggunakan Operator Morfologis

Cara mudah untuk meningkatkan kontras gambar grayscale menggunakan Operator Morfologi di OpenCV

Pengantar

Peningkatan Kontras (Contrast Enhancement) adalah teknik Image Processing yang sangat umum untuk meningkatkan fitur dalam gambar kontras rendah. Beberapa metode seperti Contrast Stretching, Histogram Equalization, Adaptive Histogram Equalization, Contrast-Limited Adaptive Histogram Equalization atau CLAHE, dll. telah digunakan untuk meningkatkan kontras gambar. Pada artikel ini akan melihat metode lain dari Peningkatan Kontras yang dilakukan dengan menggunakan kombinasi Transformasi Morfologi.

Cara mudah untuk meningkatkan kontras gambar grayscale menggunakan Operator Morfologi di OpenCV

Apa itu Transformasi atau Operator Morfologi ? Transformasi Morfologi atau Operator Morfologi adalah transformasi citra sederhana yang biasanya diterapkan pada citra biner, tetapi dapat juga diterapkan pada citra grayscale. Ada berbagai jenis Transformasi Morfologi seperti Erosi, Dilation, Opening, Closing, Gradient, Top Hat dan Black Hat. Dua komponen utama dari transformasi ini adalah gambar input dan kernel yang dikenal sebagai Structuring Element (SE). Sebelum melompat ke berbagai jenis Transformasi Morfologi secara rinci, mari memahami Elemen Penataan.

Apa itu Structuring Element (SE)? 

Structuring Element (SE) adalah lingkungan sekitar setiap piksel yang diperiksa saat melakukan operasi morfologi. Elemen Penataan dapat memiliki bentuk dan ukuran yang berbeda, dan mengubahnya dapat secara signifikan memengaruhi kinerja transformasi. Ada tiga bentuk Elemen Penataan yang disediakan oleh OpenCV — Rectangular, Elliptical, dan Cross-Shaped. Gambar di bawah menunjukkan ketiga bentuk tersebut.

Apa itu Structuring Element (SE)

Jenis Operator Morfologi

Macam-macam Operator Morfologi adalah :

  1. Erosion— Menurut Dokumentasi OpenCV, operator Erosion bekerja mirip dengan erosi tanah. Ini "mengikis", atau dengan kata sederhana, menghilangkan batas-batas objek latar depan dalam gambar. Piksel pada batas objek latar depan dihapus. Ini mengurangi ukuran objek dalam gambar.
  2. Dilation— Dilation bekerja persis berlawanan dengan erosi. Ini "melebarkan" atau memperluas batas-batas objek latar depan yang pada gilirannya meningkatkan ukuran objek dalam gambar. Ini berguna jika ingin menggabungkan bagian objek latar depan yang rusak.
  3. Opening — Operasi Opening digunakan untuk menghilangkan Noise. Dilakukan dengan terlebih dahulu menerapkan operasi erosi, diikuti dengan operasi dilasi. Operasi erosi pertama-tama menghilangkan semua area noise kecil dari gambar dan kemudian dilasi diterapkan untuk mengembalikan ukuran asli objek.
  4. Closing — Closing adalah kebalikan dari Opening, yang berarti bahwa pelebaran diterapkan terlebih dahulu diikuti oleh erosi. Ini berguna untuk menggabungkan atau mengisi titik-titik kecil yang ada di objek latar depan, sambil mempertahankan ukuran objek.
  5. Gradient — Gradient Morfologi suatu citra diperoleh dengan mengurangkan hasil erosi dari hasil dilasi. Hasil dari operasi Gradient adalah outline dari objek foreground pada gambar.
  6. Top Hat / White Hat— Top Hat Transform, juga dikenal sebagai White Hat Transform, diperoleh dengan menghapus atau mengurangi Opening gambar dari gambar aslinya. Operator ini memberi fitur cerah pada gambar yang lebih kecil dari Structuring Element.
  7. Black Hat / Bottom Hat— Transformasi Black Hat, juga dikenal sebagai Transformasi Bottom Hat, diperoleh dengan menghapus atau mengurangi Closing gambar dari gambar aslinya. Operator ini memberi fitur gelap pada gambar yang lebih kecil dari Elemen Penataan.
Catatan: Transformasi Top Hat dan Black Hat lebih cocok untuk gambar Grayscale.

Bagaimana Transformasi Morfologis membantu dalam Peningkatan Kontras?

Peningkatan Kontras, dengan kata sederhana, membutuhkan hal-hal berikut untuk dilakukan:
  1. Membuat area terang pada gambar menjadi lebih cerah.
  2. Membuat daerah gelap pada gambar menjadi lebih gelap.
Seperti yang telah dilihat sebelumnya, hasil dari Top Hat Transform adalah gambar yang terdiri dari semua fitur terang pada gambar input dan hasil dari Black Hat Transform adalah gambar yang terdiri dari semua fitur gelap pada gambar input. Jadi, untuk tujuan Peningkatan Kontras, kita akan membutuhkan Transformasi Top dan Black Hat dari gambar input.

Setelah mendapatkan Top dan Black Hat Transforms dari gambar input, kami akan menambahkan Top Hat Transform ke gambar input untuk membuat daerah terangnya lebih cerah, dan mengurangi Black Hat Transform dari gambar input untuk membuat daerah gelapnya lebih gelap.

Langkah yang disebutkan di atas dapat direpresentasikan sebagai persamaan yang ditunjukkan di bawah ini:
Persamaan untuk Peningkatan Kontras

di mana R adalah gambar hasil, I adalah gambar input, T dan B masing-masing adalah transformasi Top Hat dan Black Hat. Flow Chart di bawah ini menggambarkan langkah-langkah yang akan diikuti untuk meningkatkan kontras.
Operator Morfologi di OpenCV

Code

Kami akan menerapkan teknik Peningkatan Kontras ini menggunakan Python dan OpenCV. Pertama-tama perlu menginstal opencv-python menggunakan pip.
pip install opencv-python
Setelah menginstal OpenCV, kami akan mengimpor perpustakaan dalam kode kami.
import cv2 as cv
Kami akan menggunakan gambar di bawah ini untuk kode kami, yang diambil dari Repositori Gambar COVID-19 di GitHub
Data gambar dalam repositori ini telah dikumpulkan dari Institute for Diagnostic and Interventional Radiology, Hannover Medical School, Hannover, Jerman dan dilisensikan di bawah Creative Commons Attribution 3.0 Unported.
menerapkan teknik Peningkatan Kontras

Saya telah memperkecil gambar sebesar 50% untuk mengurangi ukuran gambar. Untuk membaca gambar ini, kita akan menggunakan fungsi imread oleh OpenCV.
filename = # path to the image file 
img = cv.imread(filename,0)
Sekarang setelah memiliki gambar, kita akan mendapatkan Transformasi Top dan Black Hat dari gambar ini. Sebelum ini, perlu membangun Structuring Element atau kernel. Kita dapat menggunakan fungsi getStructuringElement yang disediakan oleh OpenCV untuk tujuan ini.
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
Dalam cuplikan di atas, kami telah membuat elliptical Structuring Element dengan ukuran (5,5). Anda dapat bereksperimen dengan mengubah parameter ini dan mengamati efeknya pada output. Langkah selanjutnya adalah mendapatkan transformasi dari gambar input menggunakan kernel yang dibuat pada langkah sebelumnya.
# Top Hat Transform 
topHat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel) 
# Black Hat Transform 
blackHat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
Setelah memiliki transformasi, kita akan menerapkan persamaan yang telah dilihat sebelumnya.
res = img + topHat - blackHat
teknik Peningkatan Kontras ini menggunakan Python

Kita dapat melihat kontras gambar input telah meningkat sedikit. Beberapa fitur kecil, yang tidak menonjol pada gambar masukan, kini terlihat. Namun, teknik ini juga menambahkan beberapa noise pada gambar jika Structuring Element tidak dipilih dengan cermat.

Misalnya, gambar di bawah ini menunjukkan output ketika elliptical Structuring Element dipilih dengan ukuran (15,15). Fitur kecil di paru-paru dan tepi tulang sekarang lebih menonjol dan jelas daripada keluaran sebelumnya, tetapi dapat melihat beberapa area noise pada output gambar, di dekat batas tubuh, yaitu bercak putih di latar belakang.
Gambar keluaran, untuk ukuran kernel elips

Saat Anda terus meningkatkan ukuran Structuring Element, fitur latar depan akan menjadi lebih menonjol tetapi latar belakang akan mulai menjadi semakin noise. Output di bawah ini dengan Structuring Element ukuran (35,35) memiliki area yang lebih noise di background.




Kesimpulan 

Jadi, kami melihat cara meningkatkan kontras gambar grayscale menggunakan kombinasi Operasi Morfologi Top Hat dan Black Hat. Beberapa fitur kecil sangat ditingkatkan dan menjadi lebih menonjol dalam gambar keluaran kami seperti yang terlihat di atas.

Poin yang perlu diingat 

  1. Metode ini mungkin tidak bekerja seefisien metode Peregangan Kontras asli karena noise yang diperkenalkan pada gambar, saat kami terus meningkatkan ukuran Structuring Element.
  2. Karena Structuring Element pada dasarnya adalah ukuran lingkungan yang perlu dipertimbangkan saat menerapkan transformasi, output juga akan bergantung pada ukuran gambar input. Misalnya, kernel (35,35) untuk gambar berukuran 1000 x 1000 akan membentuk wilayah yang lebih kecil dibandingkan dengan kernel (35,35) untuk gambar 250 x 250. Dengan demikian, mengubah ukuran gambar juga akan mempengaruhi output dari metode ini.
  3. Karena Transformasi Top dan Black Hat masing-masing memberi fitur yang lebih terang dan lebih gelap yang lebih kecil daripada Structuring Element, metode Peningkatan Kontras ini akan bekerja dengan baik jika ukuran fitur yang akan ditingkatkan lebih kecil dari ukuran Structuring Element yang dipilih. Dengan demikian, menjadi sulit untuk secara akurat meningkatkan kontras fitur yang lebih besar, karena ukuran kernel yang lebih besar akan memperkenalkan area noise yang lebih besar di background gambar.

References 

  1. OpenCV: Morphological Transformations https://docs.opencv.org/3.4/d9/d61/tutorial_py_morphological_ops.html 
  2. Kushol R., Nishat R. M., Rahman A. B. M. A., Salekin M. M., “Contrast Enhancement of Medical X-Ray Image Using Morphological Operators with Optimal Structuring Element,” arXiv:1905.08545v1 [cs.CV] 27 May 2019 
  3. Hinrich B. Winther, Hans Laser, Svetlana Gerbel, Sabine K. Maschke, Jan B. Hinrichs, Jens Vogel-Claussen, Frank K. Wacker, Marius M. Höper, Bernhard C. Meyer, “COVID-19 Image Repository,” DOI: 10.6084/m9.figshare.12275009