Foto User
Image Processing With Python

RENDIKA NURHARTANTO SUHARTO

Sosial Media


0 orang menyukai ini
Suka

Summary

Pengolahan citra dengan Python melibatkan penggunaan bahasa pemrograman ini dan berbagai library seperti OpenCV, Pillow, atau scikit-image. Dengan alat ini, Anda dapat mengolah, menganalisis, dan memodifikasi gambar digital dengan berbagai cara, termasuk menciptakan efek khusus, mengenali objek, dan memperbaiki kualitas gambar. Dengan pemahaman dasar Python, Anda dapat menerapkan berbagai teknik seperti filter, modifikasi warna, deteksi tepi, atau segmentasi objek. Sebagai contoh, Anda dapat menciptakan aplikasi sederhana yang melakukan pengolahan gambar langsung dari kamera, seperti penyesuaian kecerahan atau kontras, untuk memulai penjelajahan dalam dunia pengolahan citra menggunakan Python. Dengan demikian, pengolahan citra dengan Python tidak hanya memberikan kemampuan untuk berkreasi secara visual, tetapi juga menjadi fondasi untuk eksplorasi lebih lanjut dalam bidang ini.

Description

Metadata

Link Here…

Sumber: Kaggle - ©Copyright | Asaniczka. (2024). PC Parts Images Dataset [Classification] [Data set]. https://doi.org/10.34740/KAGGLE/DSV/7565076

Deskripsi: Dataset ini berisi gambar-gambar produk PC parts yang dikategorikan berdasarkan jenisnya, dengan struktur pohon direktori yang mengikuti format ImageNet. Setiap kelas memiliki folder sendiri yang berisi gambar-gambar terkait. Gambar-gambar memiliki resolusi 256x256 piksel dan berformat JPG.

Detail Dataset:
- Jumlah kelas: 14
- Jumlah total gambar: 3279
- Resolusi: 256x256 piksel
- Format gambar: JPG

Metodologi Pengumpulan Data:
Untuk membuat dataset ini, dilakukan langkah-langkah berikut:
1. Mencari setiap bagian PC di Google Images dan mengekstrak tautan gambar.
2. Mengunduh gambar-gambar ukuran penuh dari sumber asli dan mengonversinya ke format JPG dengan resolusi 256 piksel.
3. Sebagian besar gambar diubah ukurannya menjadi lebih kecil, dengan sedikit gambar yang diperbesar.
4. Akhirnya, dilakukan pengecekan manual terhadap semua gambar dan menghapus yang tidak cocok untuk klasifikasi gambar.

Konvensi Penamaan Kelas:
Semua file dinamai sesuai dengan gaya ImageNet.

Directory Tree Structure:

Pembagian Dataset:
Dataset ini tidak dibagi menjadi bagian latihan (train), validasi (val), dan uji (test), sehingga Anda dapat menentukan rasio pembagiannya sendiri.

Let's Code

1. Import Library Needed

Kode diatas digunakan untuk mengaitkan Google Drive dengan Google Colab dan mengimpor perpustakaan yang diperlukan untuk memproses gambar. Dengan menghubungkan Google Drive, kita bisa mengakses file dan folder yang ada di sana. Beberapa perpustakaan yang diimpor, seperti OpenCV (cv2) untuk memanipulasi gambar, NumPy (np) untuk manipulasi data numerik, Pandas (pd) untuk analisis data, Seaborn dan Matplotlib untuk visualisasi data, serta PIL untuk mengolah gambar. Selain itu, kita juga menggunakan fungsi cv2_imshow dari google.colab.patches agar bisa menampilkan gambar di Colab. Setelah semua perpustakaan diimpor dan Google Drive dihubungkan, kita siap untuk memulai analisis dan manipulasi gambar di Google Colab.

Setelah itu code diatas digunakan untuk menyiapkan variabel lingkungan yang diperlukan untuk konfigurasi kaggle. Pertama, kita menetapkan direktori di Google Drive tempat kita ingin menyimpan file konfigurasi kaggle. Kemudian, kita mengunduh dataset dari Kaggle menggunakan perintah API Kaggle. Setelah dataset diunduh, kita menentukan path untuk menyimpannya dan membuat direktori tersebut jika belum ada. Selanjutnya, kita mengekstrak dataset yang telah diunduh ke dalam direktori yang telah ditentukan sebelumnya. Terakhir, file zip dataset dihapus untuk membersihkan ruang penyimpanan jika diperlukan. Dengan langkah-langkah ini, kita siap untuk menggunakan dataset tersebut dalam proyek pengolahan gambar kita.

2. Load and Get Information About the Data Set Structure

Step ini dilakukan load dan dapatkan informasi dari struktur dataset. Pertama, kita menetapkan path dasar ke direktori yang berisi berbagai kategori (seperti "cpu", "gpu", "ram", dll.) dari dataset. Kemudian, kita membuat dua list kosong: satu untuk menyimpan nama-nama folder (labels), dan yang lainnya untuk menyimpan nama-nama file dalam setiap folder (files_per_folder). Selanjutnya, kita melakukan iterasi melalui setiap folder di dalam path dasar. Jika suatu path adalah sebuah direktori (folder), kita menambahkan nama folder tersebut ke dalam list labels. Selanjutnya, kita membuat daftar semua file yang ada di dalam folder tersebut. Terakhir, kita menyimpan nama-nama file dalam setiap folder ke dalam dictionary files_per_folder, di mana kunci adalah nama folder dan nilai adalah list nama-nama file di dalamnya. Dengan langkah-langkah ini, kita mendapatkan informasi tentang struktur dataset yang akan digunakan untuk analisis atau pemrosesan berikutnya.

3. First let's go play with Image in OpenCV

Add Geometry and Text to images

output:

Kode tersebut membuat gambar dengan latar belakang hitam berukuran 400x400 piksel. Kemudian, menggunakan OpenCV, berbagai bentuk geometris seperti persegi panjang, lingkaran, segitiga, dan bintang digambar di dalam gambar tersebut dengan berbagai warna seperti biru, hijau, merah, dan cyan. Selain itu, dua garis diagonal putih ditambahkan ke gambar. Terakhir, sebuah teks berwarna merah dengan tulisan "OpenCV is Funny" ditempatkan di tengah gambar. Setelah proses pembuatan gambar selesai, gambar yang dimodifikasi ditampilkan kepada pengguna. Ini memberikan ilustrasi penggunaan beberapa fungsi dasar OpenCV untuk manipulasi gambar.

3. Histogram in Images

output:

Kode tersebut bertujuan untuk menganalisis sebuah gambar dengan beberapa teknik pemrosesan citra. Pertama, gambar dibaca dua kali: pertama, menggunakan fungsi `plt.imread()` dari Matplotlib, dan kedua, menggunakan fungsi `cv2.imread()` dari OpenCV. Perbedaan utama antara kedua pendekatan ini adalah bahwa pembacaan menggunakan Matplotlib membaca gambar dalam format RGB, sementara pembacaan menggunakan OpenCV menghasilkan gambar dalam format BGR. Setelah itu, gambar dalam format BGR dikonversi menjadi citra skala abu-abu (grayscale) menggunakan fungsi `cv2.cvtColor()`. Selanjutnya, histogram dari citra grayscale dihitung menggunakan `cv2.calcHist()`, yang merepresentasikan distribusi frekuensi intensitas piksel dalam gambar. Hasil histogram ini kemudian ditampilkan bersama dengan gambar asli dalam subplot pertama. Selanjutnya, gambar asli juga dipisahkan menjadi tiga saluran warna: biru, hijau, dan merah, menggunakan `cv2.split()`. Histogram dari masing-masing saluran warna kemudian dihitung dan ditampilkan dalam subplot terpisah, memberikan pemahaman yang lebih mendalam tentang kontribusi setiap saluran warna terhadap gambar. Ini adalah langkah-langkah dasar untuk menganalisis gambar menggunakan teknik pemrosesan citra, yang penting untuk berbagai aplikasi dalam pengolahan gambar dan visi komputer.

4. Diff Between OpenCV and Matplotlib

 

output:

Kode tersebut membuat dua subplot horizontal menggunakan plt.subplots(). Subplot kiri menampilkan gambar yang telah dikonversi dari format BGR ke RGB dengan cv2.cvtColor(), sedangkan subplot kanan menampilkan gambar asli yang dibaca menggunakan OpenCV tanpa konversi format.

Dalam OpenCV, format default untuk penyimpanan warna adalah BGR (Blue-Green-Red), sedangkan dalam matplotlib format defaultnya adalah RGB (Red-Green-Blue). Ini berarti setiap piksel dalam gambar disimpan dalam urutan warna yang berbeda antara kedua pustaka tersebut. Subplot kiri menampilkan gambar dengan warna yang benar karena telah dikonversi ke format RGB, sementara subplot kanan menampilkan gambar dalam format aslinya (BGR). Meskipun demikian, matplotlib secara otomatis dapat menampilkan gambar BGR dengan benar, sehingga perbedaan format warna tersebut tidak menjadi masalah saat menampilkan gambar di subplot kanan.

Kedua subplot mematikan sumbu (axes) dan memberi judul untuk memberikan konteks tentang apa yang ditampilkan. Ini memberikan cara yang efektif untuk membandingkan dua gambar dalam format yang berbeda menggunakan matplotlib.

5. Image Channel

output:

Kode ini membaca gambar dalam format RGB menggunakan OpenCV dan membaginya menjadi tiga saluran warna: merah, hijau, dan biru. Dalam membaca sebuah gambar menggunakan OpenCV (cv2.imread()) gambar tersebut dibagi menjadi tiga saluran warna (red, green, dan blue) menggunakan indexing array numpy ([:, :, 0], [:, :, 1], dan [:, :, 2]). Pada baris kode tersebut, parameter cmap digunakan untuk menentukan colormap yang akan digunakan saat menampilkan saluran warna pada subplot. Colormap ini mengubah nilai-nilai piksel yang ada dalam saluran warna menjadi warna yang sesuai dalam gambar yang ditampilkan. Subplot pertama (axs[0]) menggunakan 'Reds' untuk saluran warna merah, subplot kedua (axs[1]) menggunakan 'Greens' untuk saluran warna hijau, dan subplot ketiga (axs[2]) menggunakan 'Blues' untuk saluran warna biru. Setiap saluran warna ditampilkan secara terpisah dalam subplot menggunakan plt.subplots(), dengan setiap subplot menunjukkan saluran warna yang sesuai. Ini memungkinkan visualisasi intensitas dan distribusi warna yang berbeda dalam gambar secara terpisah untuk masing-masing saluran warna.

6. Changing to HSV color space

 

Output:

Kode diatas bertujuan untuk membagi gambar menjadi tiga saluran warna (Hue, Saturation, dan Value) dalam ruang warna HSV (Hue-Saturation-Value) menggunakan OpenCV. Pertama, gambar dibaca menggunakan OpenCV, kemudian dikonversi ke ruang warna HSV. Setelah itu, gambar yang sudah dikonversi dibagi menjadi tiga saluran warna: Hue, Saturation, dan Value. Setiap saluran warna ditampilkan secara terpisah dalam subplot menggunakan Matplotlib. Saluran Hue dan Saturation ditampilkan dalam skala abu-abu, sedangkan saluran Value ditampilkan dalam warna aslinya untuk mewakili kecerahan. Pada subplot terakhir, saluran warna digabungkan kembali ke dalam gambar asli dalam ruang warna BGR, dan gambar hasilnya ditampilkan. Ini adalah metode yang berguna untuk memahami kontribusi masing-masing saluran warna terhadap gambar secara visual.

7. Rotate and Flip in image

output:

Kode tersebut menggunakan OpenCV untuk melakukan flipping (pembalikan) gambar secara horizontal, vertikal, dan keduanya. Setelah membaca gambar, tiga versi flipped dari gambar dibuat menggunakan fungsi `cv2.flip()`, yang masing-masing menghasilkan flipping horizontal, vertical, dan keduanya. Kemudian, keempat versi gambar ini ditampilkan dalam satu grid subplot menggunakan Matplotlib. Ini memberikan kemampuan untuk membandingkan gambar asli dengan versi yang sudah di-flip dalam berbagai arah, yang sering digunakan dalam pengolahan gambar untuk tujuan seperti augmentasi data atau perbaikan orientasi gambar.

8. Operasi Bitwise NOT(Negasi) For Negative Image

output:

Kode diatas mengubah gambar menjadi citra grayscale dan kemudian menciptakan versi negatifnya. Pertama, gambar dimuat dalam format warna menggunakan OpenCV, lalu diubah menjadi citra grayscale. Setelah itu, citra negatifnya dibuat dengan memanipulasi nilai piksel menggunakan operasi bitwise NOT. Dua subplot dibuat untuk menampilkan citra grayscale dan citra negatif secara berdampingan, dan keduanya ditampilkan menggunakan Matplotlib. Ini adalah cara yang umum digunakan untuk memvisualisasikan transformasi citra menggunakan Python.

9. Simple Image Manipulation

Output:

Kode diatas memulai dengan membaca gambar dari path yang diberikan menggunakan `cv2.imread()`. Setelah itu, gambar diubah menjadi citra grayscale dengan menggunakan `cv2.cvtColor()` dengan parameter `cv2.COLOR_BGR2GRAY`, yang menghasilkan gambar dengan satu saluran warna (skala abu-abu). Selanjutnya, dilakukan Gaussian blur pada gambar menggunakan `cv2.GaussianBlur()` untuk mengurangi noise dan detail yang tidak diinginkan dengan menerapkan filter Gaussian. Langkah berikutnya adalah melakukan deteksi tepi menggunakan metode Canny edge detection pada citra grayscale yang telah dibuat sebelumnya. Operasi ini memungkinkan untuk menemukan tepi yang signifikan dalam gambar. Akhirnya, gambar diubah ukurannya menjadi 300x300 piksel menggunakan `cv2.resize()`, memungkinkan untuk mengubah ukuran gambar sesuai dengan kebutuhan aplikasi. Dengan serangkaian operasi ini, gambar siap untuk diproses lebih lanjut, seperti deteksi objek atau pengenalan pola.

10. Open CV Arithmetic

output:

Dalam kode tersebut, gambar dibaca menggunakan OpenCV dan disimpan dalam variabel `img_7`. Dilanjutkan dengan pembuatan matriks filter yang memiliki bentuk yang sama dengan gambar `img_7`, dengan setiap elemen memiliki nilai 50. Kemudian, berbagai fungsi aritmatika dari OpenCV digunakan untuk melakukan operasi aritmatika antara gambar `img_7` dan matriks filter yang telah dibuat. Fungsi `cv2.add()` dan `cv2.subtract()` digunakan untuk menambahkan dan mengurangkan nilai dari setiap piksel dalam gambar dengan nilai yang sesuai dari matriks filter. Fungsi `cv2.multiply()` digunakan untuk mengalikan setiap piksel dalam gambar dengan nilai yang sesuai dari matriks filter. Sedangkan fungsi `cv2.divide()` digunakan untuk membagi setiap piksel dalam gambar dengan nilai yang sesuai dari matriks filter.

11. Full Bitwise Operations in Image

output:

 

Refrensi:
1. https://www.kaggle.com/code/lokeshkumarn/open-cv-tutorials
2. https://www.kaggle.com/code/jeyasrisenthil/open-cv-notebook
3. https://www.kaggle.com/code/ayushsaklani/open-cv-image-processing
4. https://www.kaggle.com/code/sonukiller99/open-cv-for-beginners
5. https://www.kaggle.com/code/shivamanhar/open-cv2-basic#Contours?

Informasi Course Terkait
  Kategori: Computer Vision
  Course: Image Processing