Pengolahan Gambar dengan NumPy Array
Pada materi sebelumnya kita telah mempelajari berbagai operasi pada NumPy Array, seperti:
- Membuat array.
- Indexing dan slicing.
- Operasi aritmatika.
- Aggregation.
- Reshape dan transpose.
- Comparison operators.
- Sorting dan pencarian indeks.
Sekarang kita akan melihat bagaimana NumPy digunakan pada data nyata, yaitu gambar.
Salah satu konsep penting dalam Machine Learning adalah bahwa data yang akan diproses oleh komputer pada akhirnya harus direpresentasikan dalam bentuk yang dapat dihitung secara numerik.
Gambar merupakan salah satu contoh data yang dapat diubah menjadi kumpulan angka menggunakan NumPy.
Secara sederhana:
Gambar
↓
Pixel
↓
Nilai numerik
↓
NumPy Array
↓
Pemrosesan data
↓
Machine Learning / Computer Vision
Bagaimana Komputer Merepresentasikan Gambar?
Manusia dapat melihat sebuah gambar dan langsung mengenali objek seperti:
- Anjing.
- Mobil.
- Pohon.
- Rumah.
- Manusia.
Komputer tidak memahami gambar dengan cara yang sama.
Komputer memproses gambar sebagai kumpulan nilai numerik yang merepresentasikan piksel.
Setiap gambar tersusun dari banyak piksel.
Sebagai contoh, sebuah gambar sederhana:
+---+---+---+
| P | P | P |
+---+---+---+
| P | P | P |
+---+---+---+
| P | P | P |
+---+---+---+
Setiap P dapat merepresentasikan satu piksel.
Dalam gambar berwarna, setiap piksel biasanya memiliki beberapa nilai yang merepresentasikan warna.
Salah satu sistem warna yang paling umum adalah RGB:
R → Red
G → Green
B → Blue
Setiap piksel dapat direpresentasikan sebagai kombinasi nilai:
[R, G, B]
Misalnya:
[255, 0, 0]
merepresentasikan warna merah dalam sistem RGB 8-bit.
Dengan demikian, gambar dapat direpresentasikan sebagai array multidimensi.
Gambar sebagai NumPy Array
Ketika gambar dibaca menggunakan library Python tertentu, data gambar dapat direpresentasikan sebagai:
numpy.ndarray
Contohnya, gambar RGB dapat memiliki bentuk:
(height, width, channels)
Misalnya:
(2330, 3500, 3)
Artinya:
Height = 2330 pixel
Width = 3500 pixel
Channels = 3
Tiga channel tersebut adalah:
Red
Green
Blue
Secara konseptual:
Gambar
└── Height
└── Width
└── RGB
Inilah salah satu alasan NumPy sangat penting dalam Data Science dan Computer Vision.
Membaca Gambar dengan imread()
Salah satu cara sederhana untuk membaca gambar menggunakan Python adalah menggunakan imread() dari Matplotlib.
Kita dapat mengimpor:
import matplotlib.pyplot as plt
from matplotlib.image import imread
Kemudian membaca sebuah gambar:
panda = imread("images/panda.png")
imread() merupakan singkatan dari image read.
Fungsi ini membaca file gambar dan menghasilkan data gambar yang dapat diproses sebagai array NumPy.
Contoh Lengkap Membaca Gambar
Misalnya kita memiliki struktur folder:
project/
├── images/
│ ├── panda.png
│ ├── car-photo.png
│ └── dog-photo.png
└── notebook.ipynb
Kita dapat membaca gambar panda:
import matplotlib.pyplot as plt
from matplotlib.image import imread
panda = imread("images/panda.png")
Untuk memastikan gambar berhasil dibaca:
print(type(panda))
Hasilnya umumnya:
<class 'numpy.ndarray'>
Hal ini menunjukkan bahwa gambar telah direpresentasikan sebagai NumPy ndarray.
Melihat Gambar dengan Matplotlib
Selain membaca gambar, kita juga dapat menampilkannya menggunakan Matplotlib.
plt.imshow(panda)
plt.axis("off")
plt.show()
plt.imshow() digunakan untuk menampilkan data gambar.
Sedangkan:
plt.axis("off")
digunakan untuk menyembunyikan sumbu koordinat sehingga tampilan lebih menyerupai gambar asli.
Memeriksa Ukuran Array Gambar
Setelah gambar menjadi NumPy Array, kita dapat menggunakan atribut NumPy yang sudah dipelajari sebelumnya.
size
Atribut .size menunjukkan jumlah seluruh elemen dalam array.
print(panda.size)
Misalnya gambar memiliki shape:
(2330, 3500, 3)
maka jumlah elemennya adalah:
2330 × 3500 × 3
yaitu:
24,465,000
Jadi terdapat jutaan nilai numerik yang digunakan untuk merepresentasikan gambar tersebut.
Memeriksa shape
Atribut .shape sangat penting ketika bekerja dengan gambar.
print(panda.shape)
Contoh hasil:
(2330, 3500, 3)
Kita dapat menginterpretasikannya sebagai:
Height
↓
2330 pixel
Width
↓
3500 pixel
Color Channels
↓
3 channel
Sehingga:
panda.shape
(2330, 3500, 3)
berarti:
tinggi × lebar × channel
Memeriksa Jumlah Dimensi dengan ndim
Atribut .ndim digunakan untuk mengetahui jumlah dimensi array.
print(panda.ndim)
Jika hasilnya:
3
berarti gambar tersebut direpresentasikan menggunakan array 3 dimensi.
Strukturnya dapat dibayangkan seperti:
Dimension 1 → Height
Dimension 2 → Width
Dimension 3 → Color Channel
Dengan demikian:
panda.ndim
memberikan informasi bahwa array gambar tersebut memiliki tiga dimensi.
Melihat Nilai Piksel
Karena gambar telah menjadi NumPy Array, kita dapat menggunakan teknik indexing dan slicing untuk melihat sebagian datanya.
Misalnya:
print(panda[:5])
Kode tersebut mengambil lima bagian pertama dari dimensi pertama array.
Namun perlu diperhatikan bahwa hasil yang ditampilkan dapat sangat besar karena setiap elemen berisi data piksel.
Untuk melihat bagian yang lebih kecil, kita dapat melakukan slicing pada beberapa dimensi.
Misalnya:
print(panda[:2, :2])
Kode tersebut mengambil:
2 baris pertama
2 kolom pertama
beserta seluruh channel warna pada bagian tersebut.
Jika menggunakan gambar RGB, hasilnya dapat berbentuk:
[
[
[R, G, B],
[R, G, B]
],
[
[R, G, B],
[R, G, B]
]
]
Dengan demikian, kita dapat melihat bahwa gambar sebenarnya merupakan kumpulan angka.
Memahami Nilai Piksel
Dalam gambar RGB 8-bit, setiap channel biasanya memiliki rentang:
0 sampai 255
Contohnya:
[255, 0, 0]
menunjukkan merah.
[0, 255, 0]
menunjukkan hijau.
[0, 0, 255]
menunjukkan biru.
Sedangkan:
[0, 0, 0]
adalah hitam.
Dan:
[255, 255, 255]
adalah putih.
Perlu diperhatikan bahwa representasi gambar tidak selalu menggunakan rentang 0–255. Beberapa library atau format dapat menggunakan representasi lain, misalnya nilai floating-point dalam rentang 0–1.
Karena itu, jangan mengasumsikan rentang nilai hanya berdasarkan jenis data tanpa memeriksa representasi yang digunakan.
Memeriksa dtype Gambar
Kita juga dapat melihat tipe data array menggunakan .dtype.
print(panda.dtype)
Contoh hasil dapat berupa:
uint8
atau:
float32
Tipe data bergantung pada format gambar dan cara gambar tersebut dibaca.
Untuk mengetahui informasi array secara lebih lengkap:
print(type(panda))
print(panda.shape)
print(panda.ndim)
print(panda.size)
print(panda.dtype)
Ini merupakan kebiasaan yang baik ketika pertama kali menerima data baru.
Membaca Gambar Mobil
Proses yang sama dapat diterapkan pada gambar lainnya.
Misalnya gambar mobil:
car = imread("images/car-photo.png")
Kemudian kita dapat memeriksa tipenya:
print(type(car))
Output umumnya:
<class 'numpy.ndarray'>
Kita juga dapat melihat shape:
print(car.shape)
dan menampilkan gambar:
plt.imshow(car)
plt.axis("off")
plt.show()
Membaca Gambar Anjing
Kita juga dapat membaca gambar anjing:
dog = imread("images/dog-photo.png")
Kemudian:
print(type(dog))
print(dog.shape)
print(dog.ndim)
dan menampilkannya:
plt.imshow(dog)
plt.axis("off")
plt.show()
Prosesnya tetap sama:
File gambar
↓
imread()
↓
NumPy ndarray
↓
shape / size / ndim / dtype
↓
Analisis dan manipulasi
Mengapa Gambar Perlu Diubah Menjadi Angka?
Machine Learning bekerja dengan operasi matematika.
Model Machine Learning tidak menerima konsep seperti:
"ini adalah gambar anjing"
sebagai informasi visual secara langsung.
Model menerima representasi numerik dari data.
Pada Computer Vision, representasi tersebut dapat berasal dari nilai-nilai piksel atau representasi fitur yang dipelajari model.
Secara sederhana:
Gambar
↓
Pixel
↓
Angka
↓
Array
↓
Fitur / representasi
↓
Model Machine Learning
↓
Prediksi
Contoh Sederhana Representasi Gambar
Misalnya kita memiliki gambar grayscale kecil berukuran 3 × 3.
Gambar tersebut dapat direpresentasikan sebagai:
[[ 0, 50, 100],
[150, 200, 250],
[255, 100, 25]]
Setiap angka menunjukkan intensitas piksel.
Model dapat melakukan berbagai operasi matematika terhadap angka tersebut.
Untuk gambar RGB, setiap piksel memiliki beberapa nilai.
Contohnya:
[
[[255, 0, 0], [0, 255, 0]],
[[ 0, 0, 255], [255, 255, 255]]
]
Array tersebut dapat direpresentasikan sebagai array dengan shape:
(2, 2, 3)
Artinya:
2 pixel tinggi
2 pixel lebar
3 channel warna
NumPy dalam Computer Vision
NumPy menjadi salah satu fondasi penting dalam pemrosesan data numerik.
Untuk gambar, NumPy memungkinkan kita melakukan berbagai operasi seperti:
- Mengakses piksel.
- Melakukan slicing.
- Mengubah shape.
- Mengubah tipe data.
- Melakukan operasi matematika.
- Membandingkan nilai piksel.
- Menghitung statistik.
- Memanipulasi channel warna.
- Melakukan transformasi data.
Contohnya, kita dapat mengambil satu channel warna dari gambar RGB:
red_channel = panda[:, :, 0]
Dengan asumsi:
Channel 0 → Red
Channel 1 → Green
Channel 2 → Blue
Kita dapat melihat shape channel tersebut:
print(red_channel.shape)
Jika gambar memiliki shape:
(2330, 3500, 3)
maka satu channel akan memiliki shape:
(2330, 3500)
Contoh Mengubah Gambar Menjadi Grayscale Secara Sederhana
Untuk memahami konsep array, kita dapat mengambil pendekatan sederhana dengan menghitung rata-rata tiga channel RGB.
Misalnya:
gray = panda[:, :, :3].mean(axis=2)
Kode tersebut:
- Mengambil tiga channel warna.
- Menghitung rata-rata nilai RGB.
- Menghasilkan array 2D.
Jika gambar awal memiliki shape:
(height, width, 3)
maka hasilnya akan menjadi:
(height, width)
Contohnya:
print(panda.shape)
print(gray.shape)
Namun, ini merupakan pendekatan sederhana untuk pembelajaran. Dalam aplikasi Computer Vision nyata, konversi grayscale biasanya menggunakan metode atau library khusus agar sesuai dengan standar persepsi warna.
Dari Data Piksel Menuju Machine Learning
Mengubah gambar menjadi NumPy Array baru merupakan langkah awal, bukan berarti gambar tersebut langsung siap digunakan oleh semua model Machine Learning.
Pipeline yang lebih realistis dapat berupa:
Gambar
↓
Membaca gambar
↓
NumPy Array
↓
Validasi dan preprocessing
↓
Resize / normalisasi / transformasi
↓
Feature representation
↓
Model Machine Learning
↓
Prediksi
Untuk model Computer Vision modern, representasi fitur sering kali dipelajari secara otomatis oleh model, terutama pada Deep Learning.
Contohnya, Convolutional Neural Network atau CNN dapat belajar pola seperti:
Pixel
↓
Edge
↓
Texture
↓
Pattern
↓
Object representation
↓
Classification
Jadi, konsep NumPy Array yang dipelajari di sini menjadi fondasi untuk memahami bagaimana data gambar dapat diproses sebelum masuk ke sistem Machine Learning atau Deep Learning.
Eksplorasi Data Gambar dengan NumPy
Setelah gambar menjadi NumPy Array, berbagai operasi NumPy yang telah dipelajari sebelumnya dapat diterapkan.
Misalnya mencari nilai piksel minimum:
panda.min()
Nilai piksel maksimum:
panda.max()
Nilai rata-rata:
panda.mean()
Standar deviasi:
panda.std()
Kita juga dapat melakukan slicing:
panda[:100, :100]
atau memeriksa distribusi nilai:
print(panda.min())
print(panda.max())
print(panda.mean())
print(panda.std())
Hal ini menunjukkan bahwa materi NumPy sebelumnya tidak berdiri sendiri.
Konsep seperti:
- Array.
- Shape.
- Axis.
- Indexing.
- Slicing.
- Aggregation.
- Broadcasting.
semuanya dapat digunakan kembali ketika bekerja dengan data gambar.
Hubungan NumPy dengan Data Science
NumPy merupakan salah satu fondasi penting dalam ekosistem Python untuk Data Science.
Hubungan sederhananya:
NumPy
↓
Operasi numerik dan array
↓
Pandas
↓
Data tabular
↓
Matplotlib / Seaborn
↓
Visualisasi
↓
Scikit-learn
↓
Machine Learning
Pada data gambar, NumPy dapat menjadi representasi dasar sebelum data diproses menggunakan library Computer Vision atau Deep Learning lainnya.
Hal yang Perlu Diingat
Beberapa poin penting dari studi kasus ini:
1. Gambar Dapat Direpresentasikan sebagai Angka
Gambar digital pada dasarnya terdiri dari piksel yang memiliki nilai numerik.
2. NumPy Dapat Merepresentasikan Gambar
Gambar dapat direpresentasikan sebagai:
numpy.ndarray
3. Shape Memberikan Informasi Struktur Gambar
Untuk gambar RGB yang umum:
(height, width, channels)
4. Pixel Memiliki Nilai Numerik
Nilai tersebut merepresentasikan intensitas atau informasi warna.
5. NumPy Memudahkan Manipulasi Data
Operasi seperti slicing, aggregation, reshape, dan indexing dapat diterapkan pada data gambar.
6. Gambar Belum Tentu Langsung Siap untuk Model
Sebelum digunakan dalam Machine Learning atau Deep Learning, data gambar biasanya masih membutuhkan preprocessing dan representasi yang sesuai dengan model.
Ringkasan
Pada materi ini kita melihat contoh nyata penggunaan NumPy untuk membaca dan merepresentasikan gambar.
Proses sederhananya:
File Gambar
↓
imread()
↓
NumPy ndarray
↓
shape
size
ndim
dtype
↓
Manipulasi dengan NumPy
↓
Preprocessing
↓
Machine Learning / Computer Vision
Fungsi dan atribut penting yang digunakan:
| Fungsi / Atribut | Kegunaan |
|---|---|
imread() | Membaca gambar |
type() | Mengetahui tipe objek |
.shape | Mengetahui dimensi/ukuran setiap axis |
.size | Mengetahui jumlah seluruh elemen |
.ndim | Mengetahui jumlah dimensi |
.dtype | Mengetahui tipe data |
.min() | Mencari nilai minimum |
.max() | Mencari nilai maksimum |
.mean() | Menghitung rata-rata |
.std() | Menghitung standar deviasi |
Checklist Pembelajaran
Setelah menyelesaikan materi ini, Anda seharusnya dapat:
- Menjelaskan bagaimana komputer merepresentasikan gambar.
- Menjelaskan konsep pixel dan RGB.
- Membaca gambar menggunakan
imread(). - Memahami bahwa gambar dapat direpresentasikan sebagai NumPy ndarray.
- Memeriksa
shapesebuah gambar. - Memeriksa
sizesebuah gambar. - Memeriksa jumlah dimensi menggunakan
ndim. - Memeriksa tipe data menggunakan
dtype. - Mengakses sebagian data gambar menggunakan slicing.
- Menampilkan gambar menggunakan
plt.imshow(). - Memahami hubungan antara NumPy Array dan Computer Vision.
- Menjelaskan secara sederhana mengapa data gambar perlu direpresentasikan secara numerik untuk Machine Learning.
Latihan
Latihan 1 — Membaca Gambar
Siapkan sebuah gambar di dalam folder:
images/
└── image.png
Kemudian:
- Import
imread. - Baca gambar.
- Tampilkan gambar.
- Periksa
type. - Periksa
shape. - Periksa
size. - Periksa
ndim. - Periksa
dtype.
Latihan 2 — Eksplorasi Nilai Piksel
Gunakan gambar yang sama dan cari:
image.min()
image.max()
image.mean()
image.std()
Kemudian jelaskan apa arti masing-masing nilai tersebut.
Latihan 3 — Slicing Gambar
Ambil sebagian kecil gambar menggunakan slicing.
Contoh:
cropped = image[:200, :200]
Kemudian tampilkan hasilnya menggunakan:
plt.imshow(cropped)
plt.axis("off")
plt.show()
Perhatikan bagaimana slicing pada NumPy dapat digunakan untuk mengambil bagian tertentu dari gambar.