Lewati ke konten utama
Logo Memahami Aljabar Linear

Subbab 3.3 Kompresi citra

Konsep-konsep yang telah kita lihat dalam beberapa bagian terakhir muncul dalam pengolahan citra dan digunakan setiap hari tanpa selalu kita sadari. Bagian ini memperkenalkan algoritma kompresi JPEG dan transformasi Fourier diskret sebagai penerapan gagasan-gagasan tersebut. Selain memperlihatkan kekuatan cara berpikir aljabar linear, penerapan ini membantu menjadikan beberapa konsep abstrak yang telah kita kembangkan lebih konkret dan wajar.

Subbagian 3.3.1 Pendahuluan

Citra digital, seperti foto yang diambil dengan ponsel Anda, ditampilkan sebagai larik piksel berbentuk persegi panjang. Sebagai contoh, foto pada Gambar 3.3.1 memiliki lebar 1440 piksel dan tinggi 1468 piksel. Jika foto tersebut kita perbesar, kita dapat melihat piksel-pikselnya satu per satu, seperti yang ditampilkan di sebelah kanan.
Foto dinding ngarai batu merah dengan latar langit biru.
Foto dinding ngarai gurun dengan latar langit biru. Terdapat bayangan pekat pada dinding ngarai, tetapi sebagian besar dinding berwarna jingga yang cukup seragam. Langitnya juga berwarna biru yang cukup seragam.
Satu blok piksel \(8\times8\) yang diambil dari foto pemandangan gurun. Blok ini diambil dari daerah yang ditempati dinding ngarai. Warna ke-64 piksel tersebut tidak banyak berubah. Semuanya berwarna jingga yang cukup seragam dengan sedikit perubahan kecerahan.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.1. Citra yang disimpan sebagai larik piksel \(1440\times1468\text{,}\) beserta tampilan dekat larik \(8\times8\) yang lebih kecil.
Diperlukan banyak data untuk menampilkan citra ini. Banyaknya data digital sering diukur dalam bita; satu bita adalah kapasitas penyimpanan yang diperlukan untuk mencatat sebuah bilangan bulat antara 0 dan 255. Seperti yang akan segera kita lihat, setiap piksel memerlukan tiga bita untuk mencatat warnanya. Artinya, banyaknya data yang diperlukan untuk menampilkan citra ini adalah \(3\times1440\times1468 = 6,341,760\) bita atau sekitar 6,3 megabita.
Tentu saja, kita ingin menyimpan citra ini di ponsel atau komputer dan mungkin mengirimkannya melalui paket data untuk dibagikan kepada orang lain. Jika mungkin, kita ingin menemukan cara merepresentasikan citra ini dengan lebih sedikit data agar memori ponsel tidak habis dan paket data tidak cepat terkuras.
Seperti yang akan kita lihat dalam bagian ini, algoritma kompresi JPEG menyediakan cara untuk melakukan hal tersebut. Ketika disimpan dalam format JPEG, citra ini hanya memerlukan 467.359 bita data, yaitu sekitar 7% dari 6,3 megabita yang diperlukan untuk menampilkan citra. Dengan kata lain, ketika menampilkan citra ini, kita merekonstruksinya hanya dari 7% data aslinya. Hal ini tidak terlalu mengejutkan karena citra tersebut memiliki cukup banyak redundansi; bagian kiri citra hampir seluruhnya berwarna biru seragam. Algoritma JPEG mendeteksi redundansi ini dengan merepresentasikan data menggunakan basis-basis yang sesuai untuk tugas tersebut.

Aktivitas Pratinjau 3.3.1.

Karena kita akan menggunakan berbagai basis dan sistem koordinat yang ditentukannya, mari kita tinjau kembali cara mengonversi antarsistem koordinat.
(a)
Misalkan kita memiliki basis \(\bcal=\{\vvec_1,\vvec_2,\ldots,\vvec_m\}\) untuk \(\real^m\text{.}\) Jelaskan apa yang dimaksud dengan representasi \(\coords{\xvec}{\bcal}\) dari vektor \(\xvec\) dalam sistem koordinat yang ditentukan oleh \(\bcal\text{.}\)
(b)
Jika diberikan representasi \(\coords{\xvec}{\bcal}\text{,}\) bagaimana kita dapat memperoleh kembali vektor \(\xvec\text{?}\)
(c)
Jika diberikan vektor \(\xvec\text{,}\) bagaimana kita dapat menentukan \(\coords{\xvec}{\bcal}\text{?}\)
(d)
Misalkan
\begin{equation*} \bcal=\left\{\twovec{1}{3},\twovec{1}{1}\right\} \end{equation*}
adalah basis untuk \(\real^2\text{.}\) Jika \(\coords{\xvec}{\bcal} = \twovec{1}{-2}\text{,}\) tentukan vektor \(\xvec\text{.}\)
(e)
Jika \(\xvec=\twovec{2}{-4}\text{,}\) tentukan \(\coords{\xvec}{\bcal}\text{.}\)

Subbagian 3.3.2 Model warna

Secara digital, warna direpresentasikan oleh vektor dalam \(\real^3\text{.}\) Namun, ada berbagai cara untuk merepresentasikan warna, bergantung pada apakah warna itu akan diproses oleh komputer atau manusia. Kita akan menjelaskan dua representasi tersebut, yang disebut model warna, dan memperlihatkan penggunaannya dalam algoritma kompresi JPEG.
Layar digital biasanya menghasilkan warna dengan mencampurkan merah, hijau, dan biru dalam kadar yang berbeda-beda. Karena itu, kita dapat menjelaskan suatu warna dengan memasukkan kadar merah, hijau, dan biru penyusunnya ke dalam vektor \(\threevec{R}{G}{B}\text{.}\) Besaran \(R\text{,}\) \(G\text{,}\) dan \(B\) masing-masing disimpan dalam satu bita informasi, sehingga berupa bilangan bulat antara 0 dan 255. Representasi ini disebut model warna \(RGB\text{.}\)
Kita mendefinisikan basis \(\bcal=\{\vvec_1,\vvec_2,\vvec_3\}\) dengan
\begin{equation*} \vvec_1 =\left[\begin{array}{c} 1 \\ 1 \\ 1 \end{array}\right],~~~ \vvec_2 =\left[\begin{array}{c} 0 \\ -0.34413 \\ 1.77200 \end{array}\right],~~~ \vvec_3 =\left[\begin{array}{c} 1.40200 \\ -0.71414 \\ 0 \end{array}\right] \end{equation*}
untuk mendefinisikan sistem koordinat baru dengan koordinat yang kita nyatakan sebagai \(Y\text{,}\) \(C_b\text{,}\) dan \(C_r\text{:}\)
\begin{equation*} \coords{\threevec{R}{G}{B}}{\bcal} = \threevec{Y}{C_b}{C_r}\text{.} \end{equation*}
Koordinat \(Y\) disebut luminans, sedangkan \(C_b\) dan \(C_r\) masing-masing disebut krominans biru dan merah. Dalam sistem koordinat ini, luminans bernilai antara 0 dan 255, sedangkan krominans bernilai antara -127,5 dan 127,5. Representasi ini dikenal sebagai model warna \(YC_bC_r\text{.}\) (Agar sepenuhnya tepat, seharusnya kita menambahkan 127,5 pada nilai krominans supaya berada antara 0 dan 255, tetapi hal itu tidak perlu kita perhatikan di sini.)

Kegiatan 3.3.2.

Aktivitas ini menyelidiki kedua model warna tersebut, yang kita pandang sebagai sistem koordinat untuk menjelaskan warna.
  1. Pertama, kita akan menjelajahi model warna \(RGB\text{.}\)
    Diagram interaktif untuk menjelajahi model warna \(RGB\text{.}\) Terdapat tiga penggeser yang memungkinkan pembaca mengubah besaran \(R\text{,}\) \(G\text{,}\) dan \(B\text{.}\) Warna yang dihasilkan kemudian ditampilkan.
    Petunjuk.
    Diagram di bawah memungkinkan Anda membuat warna dengan kadar merah, hijau, dan biru yang berbeda-beda. Untuk masing-masing dari ketiga besaran ini, penggeser bergerak antara 0 dan 255.
    Gambar 3.3.2. Model warna \(RGB\text{.}\)
    1. Apa yang terjadi ketika \(G=0\text{,}\) \(B=0\) (digeser sepenuhnya ke kiri), dan \(R\) dibiarkan berubah?
    2. Apa yang terjadi ketika \(R=0\text{,}\) \(G=0\text{,}\) dan \(B\) dibiarkan berubah?
    3. Bagaimana cara menghasilkan warna hitam dalam model warna ini?
    4. Bagaimana cara menghasilkan warna putih?
  2. Selanjutnya, kita akan menjelajahi model warna \(YC_bC_r\text{.}\)
    Diagram interaktif untuk menjelajahi model warna \(YC_bC_r\text{.}\) Terdapat tiga penggeser yang memungkinkan pembaca mengubah besaran \(Y\text{,}\) \(C_b\text{,}\) dan \(C_r\text{.}\) Warna yang dihasilkan kemudian ditampilkan.
    Petunjuk.
    Diagram di bawah memungkinkan Anda membuat warna menggunakan berbagai nilai luminans \(Y\text{,}\) krominans biru \(C_b\text{,}\) dan krominans merah \(C_r\text{.}\) Penggeser luminans bergerak antara 0 dan 255, sedangkan penggeser krominans bergerak antara -127,5 dan 127,5.
    Gambar 3.3.3. Model warna \(YC_bC_r\text{.}\)
    1. Apa yang terjadi ketika \(C_b=0\) dan \(C_r=0\) (dipertahankan di tengah), sedangkan \(Y\) dibiarkan berubah?
    2. Apa yang terjadi ketika \(Y=0\) (digeser ke kiri), \(C_r=0\) (dipertahankan di tengah), dan \(C_b\) dibiarkan meningkat dari 0 hingga 127,5?
    3. Apa yang terjadi ketika \(Y=0\text{,}\) \(C_b=0\text{,}\) dan \(C_r\) dibiarkan meningkat dari 0 hingga 127,5?
    4. Bagaimana cara menghasilkan warna hitam dalam model warna ini?
    5. Bagaimana cara menghasilkan warna putih?
  3. Verifikasikan bahwa \(\bcal\) merupakan basis untuk \(\real^3\text{.}\)
  4. Tentukan matriks \(P_{\bcal}\) yang mengonversi koordinat \(\threevec{Y}{C_b}{C_r}\) menjadi koordinat \(\threevec{R}{G}{B}\text{.}\) Kemudian tentukan matriks \(P_{\bcal}^{-1}\) yang mengonversi koordinat \(\threevec{R}{G}{B}\) kembali menjadi koordinat \(\threevec{Y}{C_b}{C_r}\text{.}\)
  5. Tentukan koordinat \(\threevec{Y}{C_b}{C_r}\) untuk warna-warna berikut dan, dengan menggunakan diagram di atas, periksalah bahwa kedua representasinya sesuai.
    1. Merah murni adalah \(\threevec{R}{G}{B}= \threevec{255}{0}{0}\text{.}\)
    2. Biru murni adalah \(\threevec{R}{G}{B}= \threevec{0}{0}{255}\text{.}\)
    3. Putih murni adalah \(\threevec{R}{G}{B}= \threevec{255}{255}{255}\text{.}\)
    4. Hitam murni adalah \(\threevec{R}{G}{B}= \threevec{0}{0}{0}\text{.}\)
  6. Tentukan koordinat \(\threevec{R}{G}{B}\) untuk warna-warna berikut dan, dengan menggunakan diagram di atas, periksalah bahwa kedua representasinya sesuai.
    1. \(\threevec{Y}{C_b}{C_r}=\threevec{128}{0}{0}\text{.}\)
    2. \(\threevec{Y}{C_b}{C_r}=\threevec{128}{60}{0}\text{.}\)
    3. \(\threevec{Y}{C_b}{C_r}=\threevec{128}{0}{60}\text{.}\)
  7. Tuliskan bentuk untuk
    1. luminans \(Y\) sebagai fungsi dari \(R\text{,}\) \(G\text{,}\) dan \(B\text{.}\)
    2. krominans biru \(C_b\) sebagai fungsi dari \(R\text{,}\) \(G\text{,}\) dan \(B\text{.}\)
    3. krominans merah \(C_r\) sebagai fungsi dari \(R\text{,}\) \(G\text{,}\) dan \(B\text{.}\)
    Jelaskan cara menafsirkan besaran-besaran ini secara kasar dengan menyatakan bahwa
    1. luminans merepresentasikan kecerahan warna.
    2. krominans biru mengukur kadar biru dalam warna.
    3. krominans merah mengukur kadar merah dalam warna.
Kedua model warna ini menyediakan dua cara untuk merepresentasikan warna, dan masing-masing berguna dalam konteks tertentu. Layar digital, seperti layar ponsel dan monitor komputer, menghasilkan warna dengan menggabungkan kadar merah, hijau, dan biru yang berbeda-beda. Oleh karena itu, model \(RGB\) paling sesuai untuk penerapan digital.
Sebaliknya, model warna \(YC_bC_r\) dibuat berdasarkan penelitian mengenai penglihatan manusia dan bertujuan memusatkan data yang paling penting secara visual ke dalam satu koordinat, yaitu luminans, yang paling peka ditangkap mata kita. Tentu saja, setiap basis \(\real^3\) harus memiliki tiga vektor, sehingga kita memerlukan dua koordinat lagi, yaitu krominans biru dan merah, jika ingin merepresentasikan semua warna.
Untuk melihatnya secara jelas, Gambar 3.3.4 menampilkan citra asli dan citra yang dirender hanya dengan luminans. Artinya, di sebelah kanan, warna setiap piksel direpresentasikan hanya oleh satu bita, yaitu luminans. Citra ini pada dasarnya tampak seperti versi skala abu-abu dari citra asli dengan seluruh detail visualnya. Bahkan, sebelum televisi digital menjadi standar, sinyal televisi disiarkan dengan model warna \(YC_bC_r\text{.}\) Ketika sinyal ditampilkan pada televisi hitam-putih, luminans ditampilkan sedangkan kedua nilai krominans diabaikan begitu saja.
Foto dinding ngarai batu merah dengan latar langit biru.
Foto dinding ngarai gurun dengan latar langit biru. Terdapat bayangan pekat pada dinding ngarai, tetapi sebagian besar dinding berwarna jingga yang cukup seragam. Langitnya juga berwarna biru yang cukup seragam.
Foto yang sama dengan hanya nilai luminans setiap piksel yang ditampilkan.
Foto yang sama dengan hanya nilai luminans setiap piksel yang ditampilkan. Citra ini pada dasarnya tampak seperti versi hitam-putih dari foto tersebut, dan sebagian besar detail dalam foto masih dapat dikenali. Citra ini memuat banyak informasi visual.
Gambar 3.3.4. Citra asli yang dirender hanya dengan nilai luminans.
Sebagai perbandingan, Gambar 3.3.5 menampilkan citra-citra yang bersesuaian dan dibuat hanya dengan krominans biru dan krominans merah. Perhatikan bahwa detail visual dalam citra-citra ini jauh lebih sedikit.
Foto yang sama dengan hanya krominans biru yang ditampilkan.
Foto yang sama dengan hanya krominans biru yang ditampilkan. Informasi visualnya tidak sebanyak sebelumnya, dan ciri-ciri dalam foto lebih sulit dikenali.
Foto yang sama dengan hanya krominans merah yang ditampilkan.
Foto yang sama dengan hanya krominans merah yang ditampilkan. Informasi visualnya tidak sebanyak sebelumnya, dan ciri-ciri dalam foto lebih sulit dikenali.
Gambar 3.3.5. Citra asli yang dirender hanya dengan krominans biru di sebelah kiri dan hanya dengan krominans merah di sebelah kanan.
Tujuan algoritma kompresi JPEG adalah merepresentasikan citra dengan data sesedikit mungkin. Dengan mengonversi dari model warna \(RGB\) ke model warna \(YC_bC_r\text{,}\) kita memusatkan data yang paling penting secara visual ke dalam nilai-nilai luminans. Hal ini berguna karena sebagian data dalam nilai krominans dapat diabaikan dengan aman sebab data tersebut tidak sepenting luminans secara visual.

Subbagian 3.3.3 Algoritma kompresi JPEG

Kunci untuk merepresentasikan citra dengan lebih sedikit data adalah mendeteksi redundansi dalam data tersebut. Sebagai langkah awal, kita membagi citra yang tersusun atas \(1440\times 1468\) piksel menjadi blok-blok kecil berukuran \(8\times8\) piksel. Sebagai contoh, kita akan meninjau blok \(8\times8\) piksel yang diberi garis tepi hijau pada citra asli di sebelah kiri Gambar 3.3.6. Citra di sebelah kanan memperbesar blok itu.
Foto dinding ngarai gurun dengan blok piksel berukuran delapan kali delapan yang disorot.
Foto dinding ngarai gurun dengan blok piksel berukuran delapan kali delapan yang disorot. Blok piksel yang diambil dari bagian dinding ngarai itu tampak sangat kecil.
Versi foto yang sama yang diperbesar beserta blok piksel berukuran delapan kali delapan.
Foto dan blok piksel berukuran delapan kali delapan yang sama ditampilkan pada skala berbeda agar pembaca dapat melihat beberapa detail di dalam blok piksel.
Gambar 3.3.6. Blok piksel \(8\times8\) yang diberi garis tepi hijau pada citra asli di sebelah kiri. Blok yang sama tampak pada skala yang lebih kecil di sebelah kanan.
Perhatikan bahwa blok ini tampak sangat kecil pada citra asli. Jika sebagian warna dalam blok ini kita ubah sedikit, mata kita mungkin tidak akan menyadarinya.
Di sini kita melihat tampilan dekat blok tersebut. Hal yang penting adalah bahwa warna dalam blok ini tidak banyak berubah. Bahkan, kita memperkirakan hal ini berlaku untuk sebagian besar blok. Tentu saja, beberapa blok akan memuat perubahan mencolok, misalnya di tempat langit dan batu bertemu, tetapi blok semacam itu merupakan pengecualian.
Blok piksel berukuran delapan kali delapan. Warna-warna dalam blok ini tidak banyak berubah karena semuanya berwarna jingga dengan sedikit variasi kecerahan.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.7. Blok \(8\times8\) yang sedang ditinjau.
Mengikuti pembahasan sebelumnya, kita akan mengubah representasi warna dari model warna \(RGB\) ke model \(YC_bC_r\text{.}\) Langkah ini memisahkan warna menjadi nilai luminans dan krominans yang akan kita tinjau secara terpisah. Pada Gambar 3.3.8, kita melihat nilai luminans blok ini. Sekali lagi, perhatikan bahwa nilai-nilai tersebut tidak banyak berubah di seluruh blok.
Blok piksel berukuran delapan kali delapan yang dirender hanya dengan luminans. Setiap piksel berwarna abu-abu sedang dengan sedikit variasi kecerahan.
Nilai numerik luminans dalam blok piksel berukuran delapan kali delapan. Secara umum, nilai luminans berada antara 0 dan 255. Nilai-nilai dalam blok ini hanya menunjukkan sedikit variasi. Sebagian besar berada antara 150 dan 170, meskipun pada satu bagian terdapat beberapa nilai yang mendekati 130.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.8. Nilai luminans dalam blok ini.
Strategi kita dalam algoritma kompresi adalah melakukan perubahan basis untuk memanfaatkan fakta bahwa nilai luminans tidak banyak berubah di seluruh blok. Alih-alih mencatat luminans setiap piksel, perubahan basis ini memungkinkan kita mencatat luminans rata-rata beserta sejumlah informasi tentang penyimpangan setiap warna dari nilai rata-rata tersebut.
Mari kita lihat kolom pertama nilai luminans, yang merupakan vektor dalam \(\real^8\text{:}\)
\begin{equation*} \xvec = \left[\begin{array}{c} 176 \\ 181 \\ 165 \\ \vdots \\ 150 \\ \end{array}\right]\text{.} \end{equation*}
Kita akan melakukan perubahan basis dan menjelaskan vektor ini melalui rata-rata nilai luminans serta informasi tentang penyimpangannya dari rata-rata.
Algoritma kompresi JPEG menggunakan Transformasi Fourier Diskret, yang didefinisikan menggunakan basis \(\bcal\) dengan vektor-vektor basis
\begin{equation*} \begin{aligned} \vvec_0 = \left[\begin{array}{c} \cos\left(\frac{(2\cdot0+1)\cdot0\pi}{16}\right) \\ \cos\left(\frac{(2\cdot1+1)\cdot0\pi}{16}\right) \\ \cos\left(\frac{(2\cdot2+1)\cdot0\pi}{16}\right) \\ \vdots \\ \cos\left(\frac{(2\cdot7+1)\cdot0\pi}{16}\right) \\ \end{array}\right], \amp \vvec_1 = \left[\begin{array}{c} \cos\left(\frac{(2\cdot0+1)\cdot1\pi}{16}\right) \\ \cos\left(\frac{(2\cdot1+1)\cdot1\pi}{16}\right) \\ \cos\left(\frac{(2\cdot2+1)\cdot1\pi}{16}\right) \\ \vdots \\ \cos\left(\frac{(2\cdot7+1)\cdot1\pi}{16}\right) \\ \end{array}\right], \\ \\ \ldots, \vvec_6 = \left[\begin{array}{c} \cos\left(\frac{(2\cdot0+1)\cdot6\pi}{16}\right) \\ \cos\left(\frac{(2\cdot1+1)\cdot6\pi}{16}\right) \\ \cos\left(\frac{(2\cdot2+1)\cdot6\pi}{16}\right) \\ \vdots \\ \cos\left(\frac{(2\cdot7+1)\cdot6\pi}{16}\right) \\ \end{array}\right], \amp \vvec_7 = \left[\begin{array}{c} \cos\left(\frac{(2\cdot0+1)\cdot7\pi}{16}\right) \\ \cos\left(\frac{(2\cdot1+1)\cdot7\pi}{16}\right) \\ \cos\left(\frac{(2\cdot2+1)\cdot7\pi}{16}\right) \\ \vdots \\ \cos\left(\frac{(2\cdot7+1)\cdot7\pi}{16}\right) \\ \end{array}\right]\text{.} \\ \end{aligned} \end{equation*}
Sekilas, hal ini mungkin tampak rumit, tetapi kita dapat memahaminya dengan melihat vektor-vektor tersebut secara grafis. Gambar 3.3.9 menampilkan empat di antara vektor basis ini. Perhatikan bahwa \(\vvec_0\) bernilai 1 secara konstan, \(\vvec_1\) berubah relatif lambat, \(\vvec_2\) berubah sedikit lebih cepat, dan \(\vvec_7\) berubah cukup cepat. Hal utama yang perlu diperhatikan adalah bahwa vektor-vektor basis berubah dengan laju yang berbeda: vektor-vektor awal berubah relatif lambat, sedangkan vektor-vektor berikutnya berubah lebih cepat.
Representasi grafis \(\vvec_0\text{,}\) yang semua komponennya bernilai satu secara konstan. Diagram memiliki sumbu horizontal berlabel nol hingga tujuh, dan di atas setiap label terdapat titik pada ketinggian satu di sumbu vertikal.
Representasi grafis \(\vvec_1\text{,}\) yang komponennya dibentuk oleh fungsi kosinus yang berubah lambat. Diagram memiliki sumbu horizontal berlabel nol hingga tujuh, dan di atas setiap label terdapat titik pada ketinggian yang sesuai dengan komponen vektornya di sumbu vertikal.
Representasi grafis \(\vvec_2\text{,}\) yang komponennya dibentuk oleh fungsi kosinus yang berubah. Diagram memiliki sumbu horizontal berlabel nol hingga tujuh, dan di atas setiap label terdapat titik pada ketinggian yang sesuai dengan komponen vektornya di sumbu vertikal.
Representasi grafis \(\vvec_7\text{,}\) yang komponennya dibentuk oleh fungsi kosinus yang berubah cepat. Diagram memiliki sumbu horizontal berlabel nol hingga tujuh, dan di atas setiap label terdapat titik pada ketinggian yang sesuai dengan komponen vektornya di sumbu vertikal.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.9. Empat vektor basis \(\vvec_0\text{,}\) \(\vvec_1\text{,}\) \(\vvec_2\text{,}\) dan \(\vvec_7\text{.}\)
Vektor-vektor ini membentuk basis \(\bcal\) untuk \(\real^8\text{.}\) Ingat bahwa \(\xvec\) adalah vektor nilai luminans pada kolom pertama, seperti terlihat di sebelah kanan. Kita akan menuliskan \(\xvec\) dalam koordinat baru
\begin{equation*} \coords{\xvec}{\bcal} = \left[\begin{array}{c} F_0 \\ F_1 \\ F_2 \\ \vdots \\ F_7 \end{array}\right]\text{.} \end{equation*}
Koordinat \(F_j\) disebut koefisien Fourier dari vektor \(\xvec\text{.}\)
Representasi visual vektor yang dibentuk oleh komponen-komponen vektor \(\xvec\text{,}\) yang memberikan nilai luminans pada kolom pertama blok berukuran delapan kali delapan. Nilainya sedikit meningkat dari nilai pertama ke nilai kedua, kemudian menurun perlahan hingga nilai kelima, lalu meningkat perlahan hingga nilai kedelapan.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi

Kegiatan 3.3.3.

Kita akan menjelajahi pengaruh koefisien Fourier terhadap vektor \(\xvec\text{.}\)
  1. Sebagai awal, kita akan melihat koefisien Fourier \(F_0\text{.}\)
    Diagram interaktif dengan penggeser yang memungkinkan pembaca mengubah koefisien Fourier \(F_0\text{.}\) Ketika koefisien diubah, kedelapan titik yang diplot dinaikkan atau diturunkan dalam jumlah yang sama sehingga selalu berada pada ketinggian yang sama.
    Petunjuk.
    Gunakan penggeser di bawah untuk menjelajahi bagaimana koefisien Fourier \(F_0\) memengaruhi vektor \(\xvec\text{.}\)
    Gambar 3.3.10. Pengaruh koefisien Fourier \(F_0\) terhadap vektor \(\xvec = F_0\vvec_0\text{.}\)
    Jelaskan pengaruh \(F_0\) terhadap vektor \(\xvec\text{.}\) Apakah Anda akan menyebut komponen-komponen \(\xvec\) konstan, berubah lambat, atau berubah cepat?
  2. Sebagai perbandingan, mari kita lihat bagaimana koefisien Fourier \(F_3\) memengaruhi \(\xvec\text{.}\)
    Diagram interaktif dengan penggeser yang memungkinkan pembaca mengubah koefisien Fourier keempat, \(F_3\text{.}\) Mula-mula koefisien ini ditetapkan nol dan kedelapan titik yang diplot berada pada ketinggian konstan. Namun, ketika \(F_3\) dinaikkan, titik-titik menurun dari titik pertama hingga ketiga, kemudian meningkat hingga titik kelima, lalu menurun hingga titik kedelapan. Semakin besar koefisiennya, semakin besar amplitudo variasinya.
    Petunjuk.
    Gunakan penggeser di bawah untuk menjelajahi bagaimana koefisien Fourier \(F_3\) memengaruhi vektor \(\xvec\text{.}\)
    Gambar 3.3.11. Pengaruh koefisien Fourier \(F_3\) terhadap vektor \(\xvec = F_3\vvec_3\text{.}\)
    Jelaskan pengaruh \(F_3\) terhadap vektor \(\xvec\text{.}\) Apakah Anda akan menyebut komponen-komponen \(\xvec\) konstan, berubah lambat, atau berubah cepat?
  3. Sekarang mari kita selidiki bagaimana koefisien Fourier \(F_7\) memengaruhi vektor \(\xvec\text{.}\)
    Diagram interaktif dengan penggeser yang memungkinkan pembaca mengubah koefisien Fourier terakhir, \(F_7\text{.}\) Mula-mula titik-titik berada pada nilai konstan di skala vertikal. Ketika \(F_7\) dinaikkan, titik-titik mulai berubah cepat dengan pola naik-turun-naik-turun. Ketika \(F_7\) terus dinaikkan, amplitudo variasinya menjadi semakin besar.
    Petunjuk.
    Gunakan penggeser di bawah untuk menjelajahi bagaimana koefisien Fourier \(F_7\) memengaruhi vektor \(\xvec\text{.}\)
    Gambar 3.3.12. Pengaruh koefisien Fourier \(F_7\) terhadap vektor \(\xvec = F_7\vvec_7\text{.}\)
    Jelaskan pengaruh \(F_7\) terhadap vektor \(\xvec\text{.}\) Apakah Anda akan menyebut komponen-komponen \(\xvec\) konstan, berubah lambat, atau berubah cepat?
  4. Jika komponen-komponen \(\xvec\) berubah relatif lambat, sifat apa yang Anda perkirakan dimiliki koefisien Fourier \(F_j\text{?}\)
  5. Sel Sage di bawah akan menyusun matriks \(P_{\bcal}\text{,}\) yang dinyatakan sebagai P, dan inversnya \(P_{\bcal}^{-1}\text{,}\) yang dinyatakan sebagai Pinv. Evaluasilah sel Sage ini dan perhatikan bahwa sel tersebut mencetak matriks \(P_{\bcal}^{-1}\text{.}\)
    Sekarang perhatikan bentuk \(P_{\bcal}^{-1}\) dan jelaskan mengapa \(F_0\) merupakan rata-rata nilai luminans dalam vektor \(\xvec\text{.}\)
  6. Sel Sage di bawah mendefinisikan vektor \(\xvec\text{,}\) yaitu vektor nilai luminans pada kolom pertama, seperti terlihat pada Gambar 3.3.8. Gunakan sel di bawah untuk menentukan vektor \(\fvec\) yang memuat koefisien Fourier \(F_0,F_1,\ldots,F_7\text{.}\) Jika Anda telah mengevaluasi sel di atas, P dan Pinv masih dapat dirujuk dalam sel ini.
    Tuliskan koefisien Fourier tersebut dan bahas ukuran relatif koefisien-koefisiennya.
  7. Mari kita lihat apa yang terjadi jika koefisien \(F_6\) dan \(F_7\) kita abaikan. Bentuklah vektor koefisien Fourier baru dengan membulatkan koefisien ke bilangan bulat terdekat serta menetapkan \(F_6\) dan \(F_7\) sama dengan nol. Vektor ini merupakan hampiran bagi \(\fvec\text{,}\) yaitu vektor koefisien Fourier. Gunakan hampiran bagi \(\fvec\) itu untuk membentuk hampiran bagi vektor \(\xvec\text{.}\)
    Seberapa besar perbedaan antara hampiran Anda dan vektor \(\xvec\) yang sebenarnya?
  8. Ketika koefisien Fourier yang bersesuaian dengan elemen basis yang berubah cepat kita abaikan, vektor \(\xvec\) yang kita rekonstruksi ternyata sangat dekat dengan vektor aslinya. Bahkan, nilai luminans dalam hampiran berbeda paling banyak satu atau dua dari nilai luminans sebenarnya. Mata kita tidak cukup peka untuk mendeteksi perbedaan ini.
    Sejauh ini, kita hanya berfokus pada satu kolom dalam blok nilai luminans \(8\times8\text{.}\) Sekarang mari kita tinjau semua kolom. Sel Sage berikut mendefinisikan matriks bernama luminance, yaitu matriks nilai luminans \(8\times8\text{.}\) Tentukan matriks \(8\times8\) \(F\) yang kolom-kolomnya merupakan koefisien Fourier dari setiap kolom nilai luminans.
  9. Perhatikan bahwa baris pertama matriks ini terdiri atas koefisien Fourier \(F_0\) untuk setiap kolom. Seperti yang kita lihat sebelumnya, entri-entri pada baris ini tidak banyak berubah ketika kita bergerak sepanjang baris tersebut. Dalam sel Sage di bawah, tuliskan entri-entri ini dalam vektor \(\yvec\) dan tentukan koefisien Fourier yang bersesuaian.
Sampai di sini, kita telah bekerja dengan nilai luminans dalam satu blok \(8\times8\) dari citra kita. Kita membentuk koefisien Fourier untuk setiap kolom blok tersebut. Setelah memperhatikan bahwa koefisien Fourier sepanjang suatu baris relatif konstan, masuk akal untuk menentukan koefisien Fourier dari baris-baris matriks koefisien Fourier. Langkah ini menghasilkan matriks
\begin{equation*} \left[\begin{array}{rrrrrrrr} 160.6 \amp -4.0 \amp -4.8 \amp -1.7 \amp 0.0 \amp 0.9 \amp 0.8 \amp 0.3 \\ 2.7 \amp 14.7 \amp 3.8 \amp 1.1 \amp -1.6 \amp -0.3 \amp -0.3 \amp -0.4 \\ 3.8 \amp 7.0 \amp 2.1 \amp 2.9 \amp 0.8 \amp -0.2 \amp -0.3 \amp -0.3 \\ -2.4 \amp -3.9 \amp -1.9 \amp 0.1 \amp 1.2 \amp 1.2 \amp 0.7 \amp 0.1 \\ -0.6 \amp -1.4 \amp -1.5 \amp -0.9 \amp 0.2 \amp 0.6 \amp -0.2 \amp -0.5 \\ -0.7 \amp -1.6 \amp 0.0 \amp -1.1 \amp 0.0 \amp 0.3 \amp -0.1 \amp -0.2 \\ -0.0 \amp -1.4 \amp 0.4 \amp 0.9 \amp 0.1 \amp -0.5 \amp 0.0 \amp 0.5 \\ 0.0 \amp 0.2 \amp 0.3 \amp 0.3 \amp 0.0 \amp -0.0 \amp -0.2 \amp 0.0 \\ \end{array}\right]\text{.} \end{equation*}
Jika kita melihat isi sebuah berkas citra JPEG, kita akan menemukan banyak matriks seperti ini. Untuk setiap blok \(8\times 8\text{,}\) terdapat tiga matriks koefisien Fourier dari baris-baris koefisien Fourier, masing-masing satu matriks untuk nilai luminans, krominans biru, dan krominans merah. Namun, koefisien Fourier ini disimpan sebagai bilangan bulat di dalam berkas JPEG, sehingga kita perlu membulatkannya ke bilangan bulat terdekat, seperti ditampilkan di sini:
\begin{equation*} \left[\begin{array}{rrrrrrrr} 161 \amp -4 \amp -5 \amp -2 \amp 0 \amp 1 \amp 1 \amp 0 \\ 3 \amp 15 \amp 4 \amp 1 \amp -2 \amp 0 \amp 0 \amp 0 \\ 4 \amp 7 \amp 2 \amp 3 \amp 1 \amp 0 \amp 0 \amp 0 \\ -2 \amp -4 \amp -2 \amp 0 \amp 1 \amp 1 \amp 1 \amp 0 \\ -1 \amp -1 \amp -1 \amp -1 \amp 0 \amp 1 \amp 0 \amp 0 \\ -1 \amp -2 \amp 0 \amp -1 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp -1 \amp 0 \amp 1 \amp 0 \amp -1 \amp 0 \amp 1 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ \end{array}\right]\text{.} \end{equation*}
Matriks ini memiliki banyak entri nol, dan kita dapat menghemat ruang dalam berkas citra JPEG dengan hanya mencatat koefisien Fourier yang tak nol.
Bahkan, ketika berkas JPEG dibuat, terdapat parameter “kualitas” yang dapat ditetapkan, seperti ditampilkan pada Gambar 3.3.13. Ketika parameter kualitas tinggi, kita menyimpan banyak koefisien Fourier; ketika parameter itu rendah, kita mengabaikan lebih banyak koefisien.
Jendela dari paket perangkat lunak grafis yang memungkinkan pengguna mengatur kualitas citra JPEG yang diekspor.
Jendela dari paket perangkat lunak grafis yang memungkinkan pengguna mengatur kualitas citra JPEG yang diekspor pada skala numerik dari \(0\) hingga \(100\text{.}\)
Gambar 3.3.13. Ketika membuat berkas JPEG, kita memilih nilai parameter “kualitas”.
Untuk melihat cara kerjanya, misalkan pengaturan kualitas relatif tinggi. Setelah membulatkan koefisien Fourier, kita akan menetapkan semua koefisien yang nilai mutlaknya kurang dari 2 sama dengan nol, sehingga terbentuk matriks:
\begin{equation*} \left[\begin{array}{rrrrrrrr} 161 \amp -4 \amp -5 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 3 \amp 15 \amp 4 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 4 \amp 7 \amp 2 \amp 3 \amp 0 \amp 0 \amp 0 \amp 0 \\ -2 \amp -4 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ \end{array}\right]. \end{equation*}
Perhatikan bahwa dari 64 koefisien Fourier, hanya 12 koefisien tak nol yang perlu kita catat. Akibatnya, kita hanya menyimpan \(12/64 \approx 19\%\) dari data.
Sebaliknya, jika pengaturan kualitas relatif rendah, kita menetapkan semua koefisien Fourier yang nilai mutlaknya kurang dari 4 sama dengan nol, sehingga terbentuk matriks:
\begin{equation*} \left[\begin{array}{rrrrrrrr} 161 \amp -4 \amp -5 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 15 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 7 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \amp 0 \\ \end{array}\right]\text{.} \end{equation*}
Perhatikan bahwa sekarang hanya ada 5 koefisien Fourier tak nol yang perlu kita catat, sehingga kita hanya menyimpan \(5/64\approx 8\%\) dari data. Hal ini menghasilkan berkas JPEG yang lebih kecil untuk merepresentasikan citra.
Dengan pengaturan kualitas yang lebih rendah, kita membuang lebih banyak informasi tentang koefisien Fourier sehingga citra tidak dapat direkonstruksi setepat sebelumnya. Untuk melihatnya, kita dapat merekonstruksi nilai luminans dari koefisien Fourier dengan mengonversinya kembali ke sistem koordinat standar. Alih-alih menampilkan nilai luminans itu sendiri, kita akan menampilkan selisih antara nilai luminans asli dan nilai luminans hasil rekonstruksi. Ketika pengaturan kualitas tinggi dan kita menyimpan 12 koefisien Fourier, selisihnya adalah
\begin{equation*} \left[\begin{array}{rrrrrrrr} -7 \amp -7 \amp -1 \amp 3 \amp -2 \amp -1 \amp 0 \amp -1 \\ 4 \amp 4 \amp 4 \amp -1 \amp -3 \amp 0 \amp -1 \amp -3 \\ 1 \amp 3 \amp 0 \amp -7 \amp -3 \amp 1 \amp 3 \amp 3 \\ -7 \amp -3 \amp 3 \amp 1 \amp -5 \amp -2 \amp 1 \amp 2 \\ 0 \amp -3 \amp 4 \amp 4 \amp -1 \amp -1 \amp -1 \amp -2 \\ 2 \amp -5 \amp 3 \amp 1 \amp 1 \amp -1 \amp -1 \amp 1 \\ 1 \amp -2 \amp 4 \amp 3 \amp -4 \amp -6 \amp -2 \amp 3 \\ 0 \amp -1 \amp 2 \amp 1 \amp -1 \amp -4 \amp -1 \amp 5 \\ \end{array}\right]\text{.} \end{equation*}
Ketika pengaturan kualitas lebih rendah dan kita hanya menyimpan 5 koefisien Fourier, selisihnya adalah
\begin{equation*} \left[\begin{array}{rrrrrrrr} 3 \amp -3 \amp -2 \amp 0 \amp 0 \amp 7 \amp 10 \amp 10 \\ 14 \amp 11 \amp 6 \amp -1 \amp -1 \amp 3 \amp 4 \amp 4 \\ 7 \amp 10 \amp 5 \amp -5 \amp -3 \amp -1 \amp 2 \amp 3 \\ -10 \amp -3 \amp 5 \amp 2 \amp -8 \amp -7 \amp -3 \amp -1 \\ -12 \amp -11 \amp 2 \amp 2 \amp -5 \amp -7 \amp -6 \amp -6 \\ -11 \amp -15 \amp -2 \amp -2 \amp -2 \amp -4 \amp -5 \amp -2 \\ -3 \amp -6 \amp 2 \amp 3 \amp -2 \amp -5 \amp -4 \amp -1 \\ 6 \amp 3 \amp 4 \amp 5 \amp 4 \amp 0 \amp -1 \amp 0 \\ \end{array}\right]\text{.} \end{equation*}
Hal ini memperlihatkan adanya kompromi. Dengan pengaturan kualitas tinggi, kita memerlukan lebih banyak ruang penyimpanan untuk menyimpan lebih banyak data, tetapi citra hasil rekonstruksi lebih dekat dengan citra asli. Dengan pengaturan kualitas lebih rendah, kita memerlukan lebih sedikit ruang penyimpanan, tetapi citra hasil rekonstruksi lebih berbeda dari citra asli.
Jika kita ingat bahwa informasi visual yang disimpan oleh nilai krominans biru dan merah tidak sepenting informasi dalam nilai luminans, kita dapat lebih leluasa membuang lebih banyak koefisien Fourier untuk nilai krominans sehingga penghematannya semakin besar.
Gambar 3.3.14 membandingkan citra asli dengan versi yang disimpan menggunakan pengaturan kualitas sangat rendah. Jika diperhatikan dengan saksama, Anda dapat melihat blok-blok \(8\times8\) satu per satu.
Foto asli pemandangan gurun.
Foto asli pemandangan gurun yang telah kita selidiki dalam bagian ini.
Foto asli yang disimpan dengan pengaturan kualitas lebih rendah dalam algoritma kompresi JPEG.
Foto asli yang disimpan dengan pengaturan kualitas lebih rendah dalam algoritma kompresi JPEG sehingga sebagian informasi visual hilang. Sebagai contoh, blok-blok \(8\times8\) dapat terlihat satu per satu sehingga mengganggu kesan bahwa kita sedang melihat pemandangan gurun.
Gambar 3.3.14. Citra asli dan hasil penyimpanan citra dengan pengaturan kualitas rendah.
Pembahasan algoritma kompresi JPEG ini dimaksudkan untuk menjelajahi gagasan yang melandasi penyusunannya dan memperlihatkan pentingnya pemilihan basis beserta sistem koordinat yang menyertainya. Ada beberapa detail, terutama mengenai pembulatan koefisien Fourier, yang tidak sepenuhnya akurat. Implementasi sebenarnya sedikit lebih rumit, tetapi penyajian di sini menyampaikan inti algoritma tersebut.
Algoritma kompresi JPEG memungkinkan kita menyimpan berkas citra hanya dengan sebagian kecil datanya. Gagasan serupa digunakan untuk menyimpan berkas musik dan video digital secara efisien.

Subbagian 3.3.4 Ringkasan

Bagian ini telah menjelajahi bagaimana perubahan basis yang tepat membantu kita merekonstruksi citra hanya dengan sebagian kecil datanya. Proses ini dikenal sebagai kompresi citra.
  • Ada beberapa cara untuk merepresentasikan warna, dan semuanya menggunakan vektor dalam \(\real^3\text{.}\) Kita menjelajahi model warna \(RGB\text{,}\) yang sesuai untuk penerapan digital, serta model \(YC_bC_r\text{,}\) yang menyampaikan informasi visual paling penting melalui komponen \(Y\text{,}\) yang dikenal sebagai luminans.
  • Kita juga menjelajahi perubahan basis yang disebut Transformasi Fourier Diskret. Dalam sistem koordinat yang dihasilkan, koefisien pertama mengukur rata-rata komponen suatu vektor. Koefisien-koefisien lain mengukur penyimpangan komponen dari nilai rata-rata.
  • Kita menggunakan kedua gagasan tersebut untuk memperlihatkan algoritma kompresi JPEG. Citra dibagi menjadi blok-blok \(8\times8\text{,}\) dan warna dipisahkan menjadi luminans, krominans biru, serta krominans merah. Penerapan Transformasi Fourier Diskret memungkinkan kita merekonstruksi hampiran citra yang baik hanya dengan sebagian kecil data asli.

Latihan 3.3.5 Latihan

1.

Perhatikan vektor \(\xvec=\left[\begin{array}{r} 103 \\ 94 \\ 91 \\ 92 \\ 103 \\ 105 \\ 105 \\ 108 \end{array}\right] \text{.}\)
  1. Sel Sage di bawah memuat salinan matriks perubahan basis yang mendefinisikan transformasi Fourier. Tentukan koefisien Fourier dari \(\xvec\text{.}\)
  2. Sekarang kita akan membentuk vektor \(\yvec\text{,}\) yang merupakan hampiran bagi \(\xvec\text{,}\) dengan membulatkan semua koefisien Fourier \(\xvec\) ke bilangan bulat terdekat untuk memperoleh \(\coords{\yvec}{\ccal}\text{.}\) Tentukan vektor \(\yvec\) dan bandingkan hampiran ini dengan \(\xvec\text{.}\) Berapakah galat hampiran ini?
  3. Ulangi bagian terakhir soal ini, tetapi tetapkan koefisien Fourier yang telah dibulatkan sama dengan nol jika nilai mutlaknya kurang dari lima. Gunakan hasilnya untuk membuat hampiran kedua bagi \(\xvec\text{.}\) Berapakah galat hampiran ini?
  4. Bandingkan banyaknya koefisien Fourier tak nol dalam kedua hampiran, lalu bandingkan ketepatan kedua hampiran tersebut. Dalam beberapa kalimat, bahaslah perbandingan yang Anda peroleh.

2.

Algoritma kompresi JPEG terdiri atas beberapa langkah. Pertanyaan-pertanyaan berikut mengkaji alasan di balik beberapa langkah tersebut.
  1. Apakah tujuan keseluruhan algoritma kompresi JPEG?
  2. Mengapa kita mengonversi warna dari model warna \(RGB\) ke model \(YC_bC_r\text{?}\)
  3. Mengapa kita menguraikan citra menjadi kumpulan larik piksel \(8\times8\text{?}\)
  4. Apa peran Transformasi Fourier Diskret dalam algoritma kompresi JPEG?
  5. Secara umum, mengapa informasi yang disampaikan oleh koefisien Fourier untuk variasi cepat kurang penting daripada koefisien untuk variasi lambat?

3.

Transformasi Fourier yang kita gunakan dalam bagian ini sering disebut Transformasi Kosinus Fourier Diskret karena didefinisikan menggunakan basis \(\ccal\) yang terdiri atas fungsi-fungsi kosinus. Terdapat pula Transformasi Sinus Fourier yang didefinisikan menggunakan basis \(\scal\) yang terdiri atas fungsi-fungsi sinus. Sebagai contoh, dalam \(\real^4\text{,}\) vektor-vektor basis \(\scal\) adalah
\begin{equation*} \begin{aligned} \vvec_1 = \left[\begin{array}{c} \sin\left(\frac{1\cdot1\pi}{8}\right) \\ \sin\left(\frac{3\cdot1\pi}{8}\right) \\ \sin\left(\frac{5\cdot1\pi}{8}\right) \\ \sin\left(\frac{7\cdot1\pi}{8}\right) \\ \end{array}\right], \amp \vvec_2 = \left[\begin{array}{c} \sin\left(\frac{1\cdot2\pi}{8}\right) \\ \sin\left(\frac{3\cdot2\pi}{8}\right) \\ \sin\left(\frac{5\cdot2\pi}{8}\right) \\ \sin\left(\frac{7\cdot2\pi}{8}\right) \\ \end{array}\right], \\ \\ \vvec_3 = \left[\begin{array}{c} \sin\left(\frac{1\cdot3\pi}{8}\right) \\ \sin\left(\frac{3\cdot3\pi}{8}\right) \\ \sin\left(\frac{5\cdot3\pi}{8}\right) \\ \sin\left(\frac{7\cdot3\pi}{8}\right) \\ \end{array}\right], \amp \vvec_4 = \left[\begin{array}{c} \sin\left(\frac{1\cdot4\pi}{8}\right) \\ \sin\left(\frac{3\cdot4\pi}{8}\right) \\ \sin\left(\frac{5\cdot4\pi}{8}\right) \\ \sin\left(\frac{7\cdot4\pi}{8}\right) \\ \end{array}\right]\text{.} \\ \end{aligned} \end{equation*}
Kita dapat memahami vektor-vektor ini secara grafis, seperti ditampilkan pada Gambar 3.3.15.
Representasi visual vektor basis pertama, yang komponennya dibentuk oleh fungsi sinus yang berubah lambat.
Representasi visual vektor basis kedua, yang komponennya dibentuk oleh fungsi sinus yang berubah agak lebih cepat.
Representasi visual vektor basis ketiga, yang komponen-komponennya berubah lebih cepat.
Representasi visual vektor basis keempat, yang komponennya dibentuk oleh fungsi sinus yang berubah cepat.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.15. Vektor-vektor \(\vvec_1,\vvec_2,\vvec_3,\vvec_4\) yang membentuk basis \(\scal\text{.}\)
  1. Sel Sage di bawah mendefinisikan matriks S yang kolom-kolomnya merupakan vektor dalam basis \(\scal\text{,}\) serta matriks C yang kolom-kolomnya membentuk basis \(\ccal\) yang digunakan dalam Transformasi Kosinus Fourier.
    Dalam blok nilai luminans \(8\times8\) yang kita tinjau dalam bagian ini, kolom pertama diawali oleh empat entri 176, 181, 165, dan 139, seperti terlihat pada Gambar 3.3.8. Entri-entri ini membentuk vektor \(\xvec=\fourvec{176}{181}{165}{139}\text{.}\) Tentukan \(\coords{\xvec}{\scal}\) dan \(\coords{\xvec}{\ccal}\text{.}\)
  2. Tuliskan satu atau dua kalimat yang membandingkan nilai koefisien Sinus Fourier \(\coords{\xvec}{\scal}\) dengan koefisien Kosinus Fourier \(\coords{\xvec}{\ccal}\text{.}\)
  3. Sekarang misalkan \(\xvec=\fourvec{100}{100}{100}{100}\text{.}\) Tentukan koefisien Sinus Fourier \(\coords{\xvec}{\scal}\) dan koefisien Kosinus Fourier \(\coords{\xvec}{\ccal}\text{.}\)
  4. Tuliskan beberapa kalimat yang menjelaskan mengapa kita menggunakan Transformasi Kosinus Fourier, bukan Transformasi Sinus Fourier, dalam algoritma kompresi JPEG.

4.

Dalam Contoh 3.2.9, kita meninjau suatu basis untuk \(\real^4\) yang disebut basis wavelet Haar. Vektor-vektor basisnya adalah
\begin{equation*} \vvec_1=\fourvec{1}{1}{1}{1}, \vvec_2=\fourvec{1}{1}{-1}{-1}, \vvec_3=\fourvec{1}{-1}{0}{0}, \vvec_4=\fourvec{0}{0}{1}{-1}\text{,} \end{equation*}
yang dapat dipahami secara grafis seperti pada Gambar 3.3.16. Kita akan menyatakan basis ini sebagai \(\wcal\text{.}\)
Representasi visual vektor basis pertama, dengan setiap komponen bernilai satu.
Representasi visual vektor basis kedua, dengan dua komponen pertama bernilai satu dan dua komponen terakhir bernilai negatif satu.
Representasi visual vektor basis ketiga, dengan dua komponen pertama masing-masing bernilai satu dan negatif satu, serta dua komponen terakhir bernilai nol.
Representasi visual vektor basis keempat, dengan dua komponen pertama bernilai nol dan dua komponen terakhir masing-masing bernilai satu dan negatif satu.
Kontrol papan ketik untuk menjelajahi diagram
Tombol Tindakan
Enter, A Aktifkan penjelajahan dengan papan ketik
B Aktifkan penjelajahan dengan menu
Escape Keluar dari mode penjelajahan
Panah bawah Jelajahi tingkat berikutnya di bawah
Panah atas Jelajahi tingkat berikutnya di atas
Panah kanan Jelajahi elemen berikutnya pada tingkat ini
Panah kiri Jelajahi elemen sebelumnya pada tingkat ini
X Aktifkan atau nonaktifkan mode ahli
W Tampilkan rincian tambahan jika tersedia
Spasi Ulangi keluaran suara
M Aktifkan pembesaran bertahap
Koma Aktifkan pembesaran langsung
N Nonaktifkan pembesaran
Z Tampilkan atau sembunyikan subtitel
C Gilir pengaturan kontras
T Gunakan warna monokrom
L Ganti bahasa jika tersedia
K Hentikan suara saat ini
Y Hentikan keluaran suara
O Mulai atau hentikan sonifikasi
P Ulangi keluaran sonifikasi
Gambar 3.3.16. Basis wavelet Haar yang direpresentasikan secara grafis.
Perubahan koordinat dari vektor \(\xvec\) dalam \(\real^4\) menjadi \(\coords{\xvec}{\wcal}\) disebut transformasi wavelet Haar dan kita tuliskan
\begin{equation*} \coords{\xvec}{\wcal} = \fourvec{H_1}{H_2}{H_3}{H_4}\text{.} \end{equation*}
Koefisien \(H_1,H_2,H_3,H_4\) disebut koefisien wavelet.
Mari kita bekerja dengan blok nilai luminans \(4\times4\) di sudut kiri atas blok \(8\times8\) yang lebih besar:
\begin{equation*} \left[\begin{array}{rrrr} 176 \amp 170 \amp 170 \amp 169 \\ 181 \amp 179 \amp 175 \amp 167 \\ 165 \amp 170 \amp 169 \amp 161 \\ 139 \amp 150 \amp 164 \amp 166 \end{array}\right]\text{.} \end{equation*}
  1. Sel Sage berikut mendefinisikan matriks W yang kolom-kolomnya merupakan vektor basis dalam \(\wcal\text{.}\) Jika \(\xvec\) adalah kolom pertama nilai luminans dalam blok \(4\times4\) di atas, tentukan koefisien wavelet \(\coords{\xvec}{\wcal}\text{.}\)
  2. Perhatikan bahwa \(H_1\) memberikan nilai rata-rata komponen \(\xvec\text{,}\) sedangkan \(H_2\) menjelaskan bagaimana rata-rata dua komponen pertama dan dua komponen terakhir berbeda dari rata-rata keseluruhan. Koefisien \(H_3\) dan \(H_4\) masing-masing menjelaskan variasi berskala kecil antara dua komponen pertama dan antara dua komponen terakhir.
    Jika kita menetapkan dua koefisien wavelet terakhir \(H_3=0\) dan \(H_4=0\text{,}\) kita memperoleh koefisien wavelet \(\coords{\yvec}{\wcal}\) untuk vektor \(\yvec\) yang menghampiri \(\xvec\text{.}\) Tentukan vektor \(\yvec\) dan bandingkan dengan vektor asli \(\xvec\text{.}\)
  3. Apa pengaruh penetapan \(H_3=0\) dan \(H_4=0\) terhadap bentuk vektor \(\yvec\text{?}\) Jelaskan bagaimana menetapkan koefisien-koefisien tersebut sama dengan nol mengabaikan perilaku \(\xvec\) pada skala kecil.
  4. Dalam algoritma kompresi JPEG, kita meninjau koefisien Fourier dari semua kolom nilai luminans, lalu melakukan transformasi Fourier pada baris-barisnya. Sel Sage di bawah akan melakukan operasi yang sama menggunakan transformasi wavelet; yaitu, sel ini mula-mula menentukan koefisien wavelet setiap kolom, lalu melakukan transformasi wavelet pada baris-barisnya. Anda hanya perlu mengevaluasi sel tersebut untuk memperoleh koefisien wavelet yang dihasilkan dengan cara ini.
  5. Sekarang tetapkan semua koefisien wavelet sama dengan nol, kecuali koefisien dalam blok \(2\times2\) di kiri atas, lalu gunakan koefisien tersebut untuk mendefinisikan matriks coeffs dalam sel Sage di bawah. Langkah ini mengabaikan semua perbedaan berskala kecil. Mengevaluasi sel ini akan memperoleh kembali nilai luminans hampirannya.
  6. Jelaskan bagaimana transformasi wavelet dan hampiran ini dapat digunakan untuk membuat versi citra beresolusi lebih rendah.
Transformasi wavelet semacam ini merupakan dasar algoritma kompresi JPEG 2000, yang menjadi alternatif bagi algoritma JPEG biasa.

5.

Dalam bagian ini, kita meninjau model warna \(RGB\) dan \(YC_bC_r\text{.}\) Dalam latihan ini, kita akan meninjau model warna \(HSV\text{,}\) dengan \(H\) sebagai rona, \(S\) sebagai saturasi, dan \(V\) sebagai nilai warna. Ketiga besaran tersebut bervariasi antara 0 dan 255.
Diagram interaktif untuk menjelajahi model warna \(HSV\text{.}\) Terdapat tiga penggeser yang memungkinkan pembaca mengubah besaran \(H\text{,}\) \(S\text{,}\) dan \(V\text{.}\) Warna yang dihasilkan kemudian ditampilkan.
Petunjuk.
Diagram di bawah memungkinkan Anda mengubah ketiga parameter \(H\text{,}\) \(S\text{,}\) dan \(V\) dalam model warna \(HSV\text{.}\)
Gambar 3.3.17. Model warna \(HSV\text{.}\)
  1. Jika \(S\) dan \(V\) dipertahankan pada nilai tertentu, apa yang terjadi ketika Anda mengubah nilai \(H\text{?}\)
  2. Naikkan nilai \(V\) hingga 255, yaitu posisi paling kanan. Jelaskan apa yang terjadi ketika Anda mengubah saturasi \(S\) dengan rona \(H\) dan nilai \(V\) tetap.
  3. Jelaskan apa yang terjadi ketika \(H\) dan \(S\) tetap, sedangkan \(V\) berubah.
  4. Bagaimana cara menghasilkan warna putih dalam model warna ini?
  5. Bagaimana cara menghasilkan warna hitam dalam model warna ini?
  6. Tentukan kisaran hampiran rona yang bersesuaian dengan warna biru.
  7. Tentukan kisaran hampiran rona yang bersesuaian dengan warna hijau.
Model warna \(YC_bC_r\) memusatkan informasi visual yang paling penting dalam koordinat luminans, yang secara kasar mengukur kecerahan warna. Dua koordinat lainnya menjelaskan rona warna. Sebaliknya, model warna \(HSV\) memusatkan seluruh informasi tentang rona dalam koordinat \(H\text{.}\)
Hal ini berguna dalam aplikasi visi komputer. Sebagai contoh, jika kita ingin robot mendeteksi bola biru dalam medan pandangnya, kita dapat menentukan kisaran nilai rona yang perlu dicari. Jika pencahayaan di ruangan berubah, saturasi dan nilai warna mungkin berubah, tetapi ronanya tidak. Hal ini memperbesar kemungkinan robot tetap mendeteksi bola biru dalam berbagai kondisi pencahayaan.