Skip to main content

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:

  1. Mengambil tiga channel warna.
  2. Menghitung rata-rata nilai RGB.
  3. 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 / AtributKegunaan
imread()Membaca gambar
type()Mengetahui tipe objek
.shapeMengetahui dimensi/ukuran setiap axis
.sizeMengetahui jumlah seluruh elemen
.ndimMengetahui jumlah dimensi
.dtypeMengetahui 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 shape sebuah gambar.
  • Memeriksa size sebuah 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:

  1. Import imread.
  2. Baca gambar.
  3. Tampilkan gambar.
  4. Periksa type.
  5. Periksa shape.
  6. Periksa size.
  7. Periksa ndim.
  8. 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.