Mode belajar: tulis kode sendiri. Copy/cut, seleksi teks dan klik kanan dibatasi pada halaman; pembatasan UI bukan jaminan anti-penyalinan mutlak.
1. Tujuan
- Membuat notebook Google Colab dengan identitas Nama dan NPM serta menjalankan sel Python secara berurutan.
- Membaca tiga file gambar berbeda, memvalidasi hasil decoding, dan menampilkan gambarnya.
- Mengukur tinggi, lebar, jumlah pixel, jumlah channel, tipe data, dan ukuran file setiap gambar.
- Mengakses nilai pixel pada koordinat valid dan menjelaskan urutan channel BGR, grayscale, atau BGRA.
Prasyarat: Dapat menggunakan browser, akun Google, dan operasi dasar variabel serta indeks Python. Tidak memerlukan instalasi Python di komputer.
2. Materi Pembahasan

2.1 Pengolahan citra sebagai transformasi data
Citra digital bukan sekadar gambar yang terlihat di layar, melainkan susunan nilai yang dapat dibaca dan diubah program. Satu pixel mewakili sampel pada lokasi tertentu. Foto daun, misalnya, menyimpan informasi warna permukaan, bayangan, dan latar pada banyak lokasi. Pengolahan citra mengubah susunan tersebut untuk tujuan seperti memperjelas kontras, memisahkan objek, atau mencari batas bentuk. Proses ini berbeda dari pemahaman semantik: program membaca nilai pixel terlebih dahulu, bukan otomatis mengetahui bahwa objeknya daun.
Alur awal yang sehat adalah menetapkan input, memeriksa data, melakukan operasi, lalu mengevaluasi output. Dalam modul ini belum diperlukan model kecerdasan buatan. Membaca dan memeriksa tiga gambar sudah menunjukkan bahwa ukuran, pencahayaan, serta format input dapat berbeda. Kesalahan pembacaan harus diketahui sebelum algoritme berikutnya dijalankan, agar hasil tidak ditafsirkan dari data yang sebenarnya kosong.
2.2 Resolusi, dimensi, dan ukuran berkas
Dimensi spasial ditulis sebagai lebar × tinggi, sedangkan shape array NumPy lazimnya diawali tinggi lalu lebar. Jumlah pixel dihitung dari perkalian kedua dimensi tersebut, tanpa mengalikan jumlah channel. Istilah resolusi pada praktikum ini berarti dimensi pixel, bukan ukuran cetak atau dpi. Foto beresolusi lebih besar memiliki lebih banyak sampel spasial, tetapi tidak selalu lebih tajam jika fokus, gerakan kamera, atau kualitas lensa buruk.
Ukuran file adalah jumlah byte data tersimpan, sedangkan nbytes array menyatakan memori data setelah decoding. Keduanya tidak harus sama karena JPEG menggunakan kompresi dan PNG menyimpan data dengan cara berbeda. Membandingkan ukuran file saja tidak cukup untuk menyimpulkan kualitas gambar. Catat dimensi, format, tipe data, dan ukuran byte bersama-sama agar istilah ukuran tidak ambigu ketika melaporkan hasil.
2.3 Channel dan representasi intensitas
Gambar grayscale menyimpan satu intensitas untuk setiap posisi dan biasanya berbentuk array dua dimensi. Gambar berwarna lazimnya memiliki tiga channel. OpenCV membaca warna dalam urutan biru, hijau, merah atau BGR; Matplotlib menafsirkan tiga komponen sebagai merah, hijau, biru atau RGB. PNG tertentu mempunyai channel alpha keempat yang menyatakan transparansi. Membaca dengan IMREAD_UNCHANGED membantu mengamati channel asli, sehingga grayscale tidak diam-diam diubah menjadi tiga channel.
Untuk citra uint8, setiap komponen memiliki rentang 0 sampai 255. Nilai tersebut bukan ukuran suhu atau ukuran fisik warna. Citra dengan kedalaman bit lain dapat memiliki rentang berbeda. Praktikum membatasi input ke uint8 supaya pembacaan nilai dan tampilan konsisten. Ketika alpha tersedia, konversi BGRA ke RGBA dilakukan khusus untuk tampilan; array asli tetap dipertahankan untuk pengukuran.
2.4 Koordinat dan pembacaan pixel
Titik gambar biasa disebut dengan pasangan (x, y), tetapi akses array menggunakan img[y, x]. Baris meningkat ke bawah dan kolom meningkat ke kanan, dengan titik awal di kiri atas. Karena indeks dimulai dari nol, indeks yang sama dengan tinggi atau lebar sudah melewati batas. Sel contoh memilih titik tengah setiap gambar dan menampilkan koordinatnya secara eksplisit. Dengan demikian gambar kecil tetap dapat diproses tanpa memakai koordinat tetap yang mungkin tidak tersedia.
Pada gambar warna, hasil akses satu pixel berupa vektor komponen, bukan satu bilangan. Jelaskan vektor itu menurut urutan channel sumber. Membandingkan satu pixel dari tiga foto tidak otomatis membandingkan objek yang sama, sebab posisi tengah dapat berisi latar pada salah satu foto. Untuk tugas, pilih pula titik yang secara visual berada pada objek atau background dan catat alasan pemilihannya.
2.5 Notebook Colab yang dapat diperiksa
Google Colab menjalankan Python melalui runtime jarak jauh dan menampilkan hasil di browser. Sel kode dikerjakan berurutan karena variabel hasil pembacaan diperlukan pada sel berikutnya. Setelah runtime terputus, variabel dan file sementara dapat hilang; menjalankan sel upload kembali adalah tindakan yang wajar. Notebook harus menyimpan kode, output, serta analisis mahasiswa, bukan hanya teks tanpa hasil eksekusi. Sel Markdown paling atas digunakan untuk Nama dan NPM.
Gunakan files.upload untuk memilih tiga gambar JPEG atau PNG yang berbeda. Periksa hasil decoding, batas ukuran, dan jumlah input, bukan hanya ekstensi nama berkas. Semua tampilan memakai Matplotlib, bukan jendela desktop cv2.imshow. Sesudah selesai, jalankan ulang seluruh sel pada runtime bersih untuk memastikan tidak ada ketergantungan tersembunyi, lalu bagikan satu link Google Colab dengan akses Viewer.
Video pembelajaran sesuai bab
25 - Reading Images, Splitting Channels, Resizing using openCV in Python — DigitalSreeni.
Fokus saat menonton: Amati cara membaca gambar, shape array, nilai piksel dan urutan BGR. Bedakan ukuran berkas dengan resolusi.
Referensi dan sumber ilustrasi
3. Praktikum Google Colab
Buat notebook baru, simpan pada Drive milik sendiri, lalu isi identitas. Gunakan sel kode terpisah untuk setiap langkah dan jalankan berurutan dengan Shift + Enter. Tidak perlu mengunduh notebook contoh atau memasang Python lokal.
# Materi 01 — Pengolahan Citra
Nama: [Nama lengkap mahasiswa]
NPM: [NPM mahasiswa]
Kelas: [Kelas, jika diperlukan]- Buka Google Colab; buat sel Markdown Nama dan NPM, lalu ketik sel kode sesuai urutan.
- Siapkan tiga gambar berbeda, misalnya daun, objek berwarna, dan gambar grayscale uint8.
- Upload ketiganya sekaligus; jika validasi gagal, perbaiki input dan jalankan kembali sel upload.
- Baca laporan ukuran dan bandingkan shape array dengan dimensi lebar × tinggi pada judul gambar.
- Tentukan satu koordinat valid per gambar, baca nilai pixel, dan jelaskan urutan channel serta lokasi titik.
- Tambahkan analisis sebagai sel Markdown, jalankan semua sel ulang, simpan output, lalu atur akses link Viewer.
Sel 1 — 1. Import library di Colab
Buat notebook baru, isi sel Markdown Nama dan NPM di atas, kemudian ketik dan jalankan sel ini. Library umum Colab tidak perlu diinstal lokal.
import cv2
import numpy as np
import matplotlib.pyplot as plt
from google.colab import files
print("OpenCV:", cv2.__version__)Sel 2 — 2. Upload dan validasi tiga gambar
Pilih tepat tiga JPEG/PNG berbeda dalam satu dialog. Maksimum 10 MiB dan 12 juta pixel per gambar; input harus uint8 dengan 1, 3, atau 4 channel.
uploaded = files.upload()
if len(uploaded) != 3:
raise ValueError("Pilih tepat tiga file gambar berbeda; jalankan ulang sel upload.")
if len(set(uploaded.values())) != 3:
raise ValueError("Isi ketiga file harus berbeda, bukan salinan file yang sama.")
gambar = []
for nama, data in uploaded.items():
if not nama.lower().endswith((".jpg", ".jpeg", ".png")):
raise ValueError(f"{nama}: gunakan JPEG atau PNG.")
if not data or len(data) > 10 * 1024 * 1024:
raise ValueError(f"{nama}: file kosong atau melebihi 10 MiB.")
img = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_UNCHANGED)
if img is None:
raise ValueError(f"{nama}: tidak dapat didecode sebagai gambar.")
h, w = img.shape[:2]
channel = 1 if img.ndim == 2 else img.shape[2]
if h * w > 12_000_000 or img.dtype != np.uint8 or channel not in (1, 3, 4):
raise ValueError(f"{nama}: gunakan gambar uint8 <=12 MP, channel 1/3/4.")
gambar.append({"nama": nama, "img": img, "file_bytes": len(data)})
print("Tiga gambar berhasil dibaca.")Sel 3 — 3. Tampilkan gambar dan laporan ukuran
Output membedakan dimensi spasial, jumlah pixel, jumlah channel, byte file, dan byte array. Urutan channel hanya dikonversi saat tampilan.
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
for ax, item in zip(axes, gambar):
img = item["img"]
h, w = img.shape[:2]
c = 1 if img.ndim == 2 else img.shape[2]
if c == 1:
ax.imshow(img, cmap="gray", vmin=0, vmax=255)
else:
flag = cv2.COLOR_BGR2RGB if c == 3 else cv2.COLOR_BGRA2RGBA
ax.imshow(cv2.cvtColor(img, flag))
ax.set_title(f"{item['nama']}\n{w} × {h} pixel; {c} channel")
ax.axis("off")
print({"nama": item["nama"], "shape": img.shape, "lebar": w,
"tinggi": h, "jumlah_pixel": w*h, "channel": c,
"dtype": str(img.dtype), "file_bytes": item["file_bytes"],
"array_bytes": img.nbytes})
plt.tight_layout()
plt.show()Sel 4 — 4. Baca pixel pada titik tertentu
Contoh memilih titik tengah yang selalu valid. Untuk tugas ubah koordinat pada setiap gambar, tetap periksa rentangnya, dan jelaskan apakah titik berada pada objek atau latar.
for item in gambar:
img = item["img"]
h, w = img.shape[:2]
x, y = w // 2, h // 2
if not (0 <= x < w and 0 <= y < h):
raise ValueError("Koordinat pixel di luar gambar.")
c = 1 if img.ndim == 2 else img.shape[2]
urutan = {1: "grayscale", 3: "B, G, R", 4: "B, G, R, A"}[c]
print(f"{item['nama']}: (x,y)=({x},{y}), nilai={img[y,x].tolist()}, urutan={urutan}")Jika terjadi error
- Jumlah file tidak tepat tiga atau isi file identik.
- Pilih tiga file berbeda sekaligus dan jalankan ulang sel upload.
- Foto tampil dengan merah dan biru tertukar.
- Gunakan COLOR_BGR2RGB; untuk empat channel gunakan COLOR_BGRA2RGBA.
- IndexError ketika membaca pixel.
- Gunakan img[y, x] dengan y < tinggi dan x < lebar; indeks dimulai dari nol.
- NameError setelah runtime terputus.
- Jalankan ulang import dan upload sebelum sel pengukuran. File unggahan sementara bukan penyimpanan permanen.
Runtime Colab dan file upload bersifat sementara. Simpan output penting pada notebook/Drive sebelum sesi berakhir. Jika runtime direset, jalankan ulang sel dari awal. Gunakan media berizin dan hindari unggahan data sensitif tanpa izin.
4. Tugas 1
Buat program Google Colab yang membaca tiga gambar berbeda, menampilkan ketiganya, serta melaporkan ukuran/resolusi/channel dan nilai pixel tertentu pada setiap gambar. Kumpulkan hanya SATU link Google Colab dengan kode, output, analisis, Nama dan NPM terlihat; akses Viewer.
Ketentuan pengerjaan
- Tiga gambar JPEG/PNG berbeda dibaca dengan validasi, bukan tiga salinan satu file.
- Tampilkan setiap gambar dengan urutan warna benar.
- Laporkan nama file, lebar, tinggi, jumlah pixel, channel, tipe data, byte file, dan byte array.
- Catat minimal satu koordinat (x, y) valid per gambar, nilai pixelnya, serta makna urutan channel.
- Sertakan analisis perbedaan ketiga gambar dalam sel Markdown dan semua output eksekusi.
- Serahkan satu link Google Colab akses Viewer; tidak mengumpulkan .ipynb, ZIP, PDF, atau screenshot terpisah.
Pertanyaan analisis
- Mengapa dimensi spasial pada laporan berbeda urutannya dari shape array?
- Apakah file dengan byte terbesar selalu memiliki jumlah pixel terbesar? Gunakan data unggahan untuk menjawab.
- Apa yang dapat dan tidak dapat disimpulkan dari nilai satu pixel?
# Materi 01 — Pengolahan Citra
Nama: [Nama lengkap mahasiswa]
NPM: [NPM mahasiswa]
Kelas: [Kelas, jika diperlukan]Pengumpulan
Kumpulkan satu link Google Colab saja. Nama dan NPM wajib berada pada sel Markdown paling atas. Sertakan kode, output yang tersimpan/terlihat serta analisis di notebook; tidak perlu mengumpulkan file .ipynb, ZIP, PDF atau screenshot terpisah.
- Jalankan sel dengan konfigurasi valid dan simpan notebook beserta output. Pastikan opsi menghilangkan output saat menyimpan tidak aktif untuk versi pengumpulan.
- Bagikan sebagai Viewer/Pelihat kepada dosen. Gunakan akses link jika diizinkan institusi; bila dibatasi, beri akses khusus akun dosen. Jangan memberi izin edit publik.
- Periksa akses dari akun penerima. Kirim URL notebook Colab, bukan folder Drive atau runtime sementara.
| Aspek | Bobot | Indikator |
|---|---|---|
| Pembacaan dan validasi | 25% | Tiga file berbeda terbaca dan kasus input tidak valid ditangani. |
| Ukuran dan channel | 30% | Dimensi, jumlah pixel, channel, dtype, serta ukuran byte benar dan tidak tertukar. |
| Tampilan dan nilai pixel | 25% | Warna benar, koordinat valid, nilai pixel serta urutan channel dijelaskan. |
| Analisis dan notebook | 20% | Analisis menggunakan output sendiri; identitas, output, dan satu link Viewer lengkap. |