Sebuah kamera dijital terdiri dari suatu susunan optik dan sebuah CCD (Charged-Coupled Device) yang berfungsi untuk menangkap bayangan benda, lalu mengubahnya menjadi citra dijital. Jika tidak ada CCD, satu buah fotodioda-pun dapat dipakai untuk membuat kamera dijital. Bagaimana caranya?
Kamera Piksel-Tunggal
Technology Review adalah sebuah majalah bulanan yang sering dijadikan acuan untuk melihat perkembangan teknologi terkini. Seperti pada tahun-tahun sebelumnya, sekitar bulan Maret majalah ini menampilkan sepuluh buah teknologi terkini yang akan menjadi trend di masa datang. Pada tahun 2006, satu dari 10 teknologi ini menarik perhatian khalayak luas karena dianggap sangat tidak biasa, yaitu Kamera Piksel-Tunggal. Kamera ini tidak memakai CCD sebagai pengubah bayangan benda menjadi gambar dijital, melainkan hanya satu buah fotodioda saja.
Sebuah kamera piksel-tunggal, seperti yang diperlihatkan pada Gambar 1, memanfaatkan susunan cermin renik (DMD-Digital Micromirror Device) yang dapat dikendalikan komputer untuk melakukan penyapuan bayangan benda secara acak. Bagian bayangan yang jatuh pada elemen cermin yang sedang ”aktif” diteruskan kesebuah fotodioda untuk diubah menjadi sinyal listrik. Perangkat DMD biasanya dipakai pada televisi proyeksi.
Gambar 1. Kamera piksel-tunggal
Informasi elemen DMD aktif dan intensitas cahaya yang sudah didijitasi selanjutnya disampaikan ke sebuah pengolah data. Karena tidak seluruh cermin diaktifkan untuk menangkap bayangan benda, jumlah piksel yang direkam lebih kecil jika dibandingkan dengan kamera dijital biasa. Selanjutnya rekonstruksi dilakukan menurut prinsip pencuplikan kompresif.
Dari sudut pandang pencuplikan kompresif, operasi pengambilan elemen bayangan secara acak oleh DMD adalah proses pengamatan yang dapat dinyatakan sebagai proyeksi s dengan matriks pengukur . Jika N jumlah total dari cermin DMD, sedangkan M adalah cermin aktif dalam satu kali pengambilan gambar, maka
akan berupa sebuah matriks berukuran MxN. Setiap baris dari matriks ini akan berisi satu buah angka satu yang letaknya acak, sedangkan elemen sisanya pada baris ini bernilai nol. Operasi pengukuran ini dapat dituliskan sebagai:
(1)
Berdasarkan persamaan diatas, proses pengamatan dapat dipandang sebagai pencuplikan kompresif dengan dua cara yang berbeda, yaitu:
- Pencuplikan kawasan spasial terhadap sinyal s secara acak
- Pencuplikan kawasan transform sebagian dari basis penjarang
secara acak
Dua cara pandang ini dapat memberikan dua pendekatan berbeda dalam mencari solusi atau merekonstruksi citra hasil pengamatan. Tulisan ini akan menjelaskan terlebih dahulu cara pertama, sedangkan cara kedua akan dijelaskan pada tulisan berikutnya.
Pencuplikan kompresif kawasan spasial
Sebelumnya telah diperkenalkan formulasi teknik pencuplikan kompresif dalam kawasan ruang-waktu. Secara prinsipil, teknik pencitraan yang pertama ini tidak berbeda dari yang telah dijelaskan dalam pencuplikan kompresif. Dengan demikian, diagram ranah-jamaknya masih tetap sama seperti sebelumnya.
Operasi proyeksi dilakukan dengan mengalikan sinyal asli s dengan operator proyeksi yang dibuat dengan ”mengaktifkan” satu elemen saja dari setiap vektor baris matriks ini. Setelah mengubah ”bayangan” benda dari larik dua dimensi menjadi satu dimensi, instruksi untuk mensimulasikan proses pengukuran dengan Matlab adalah:
% *** Simulasikan Digital Micromirror Device *** rp=randperm(N); act_cell(1:M_sub)=rp(1:M_sub); %randomize mirror in DMD PHI=zeros(M_sub,N); for k=1:M_sub; PHI(k,act_cell(k))=1;end; PHI=orth(randn(M_sub,N)’)'>0; %*** Lakukan pengukuran x_sub=PHI*x0 *** x_sub=PHI*x0;
Pada contoh ini akan diamati sebuah objek sederhana, yaitu citra yang menyerupai huruf “H” seperti yang diperlihatkan pada Gambar 2. Hasil pengukuran akan merupakan citra tak-sempurna karena piksel yang terambil hanya sedikit dan letaknya acak. Hasil ini diperlihatkan pada Gambar 3.
Gambar 2. Citra sederhana dalam pencitraan kompresif
Gambar 3. Citra hasil pengukuran
Berdasarkan hasil pengukuran, gambar dapat direkonstruksi dengan melalui algoritma basis pursuit. Sebagai contoh bisa diambil DCT sebagai transformasi penjarang. Jika menyatakan hasil pengamatan,
vektor basis penjarang ke-k, maka pencarian basis dapat dirumuskan sebagai berikut:
P1: min ||S||1 s.t.
(2)
Setelah seluruh vektor basis ditemukan, citra bisa direkonstruksi dengan menjumlahkan vektor-vektor basis ini yang diboboti dengan Sk yang sesuai. Hasil rekonstruksi ditunjukkan pada Gambar 4.
Gambar 4. Citra rekonstruksi
Meskipun citra huruf ”H” masih terlihat pada hasil rekonstruksi, Gambar 4 memperlihatkan bahwa secara visual hasilnya masih kurang baik. Hal ini bisa dijelaskan dengan melihat seluruh komponen Sk yang terambil pada pencarian basis.
Gambar 5. Magnitudo koefisien terpilih yang diurutkan
Gambar 5 memperlihatkan kurva magnitudo Sk yang telah diurutkan. Meskipun koefisien ini meluruh, terlihat bahwa peluruhan ini kurang cepat. Pengambilan koefisien sebanyak derajat sparsity yang diperkirakan masih akan menyisakan informasi yang cukup penting. Dengan demikian, masalah utamanya adalah pemilihan transformasi penjarang yang kurang tepat. Bagaimana cara mengatasinya?
Daftar Pustaka
- Michael Wakin, Jason Laska, Marco Duarte, Dror Baron, Shriram Sarvotham, Dharmpal Takhar, Kevin Kelly, and Richard Baraniuk, “An Architecture for Compressive Imaging,” Proc. International Conference on Image Processing — ICIP 2006, Atlanta, GA, Oct. 2006.
- Dharmpal Takhar, Jason Laska, Michael Wakin, Marco Duarte, Dror Baron, Shriram Sarvotham, Kevin Kelly and Richard Baraniuk, “A New Compressive Imaging Camera Architecture using Optical-Domain Compression,” Proc. of Computational Imaging IV at SPIE Electronic Imaging, San Jose, CA, Jan. 2006.
- Marco F. Duarte, Mark A. Davenport, Dharmpal Takhar, Jason N. Laska, Ting Sun, Kevin F. Kelly and Richard G. Baraniuk, “Single Pixel Imaging via Compressive Sampling”, IEEE Signal Processing Magazine, March 2008.
Kode Matlab
%———————————————————- % Pencitraan Kompresif: kamera dijital dng 1 foto-dioda %———————————————————- clear;%close all;clc; % read original image %cam01=double(imread(‘cameraman.tif’,'tif’)); %I=cam01(140:155,35:50); %load cam01; I=cam01; %baca citra I=double(imread(‘IMG\H.bmp’,'bmp’)); %tampilkan citra asal; figure(1); imagesc(I); colormap(gray); title(‘citra asli’); [N_col,N_row]=size(I); N=N_col*N_row; %panjang sinyal %Pembentukan basis sparsity /DCT PSI=dct(eye(N,N))’; %buat matriks DCT K_sparse=2*round(sqrt(N));%tingkat sparsity x = reshape(I,N,1); %ubah menjadi vektor x0=(x-mean(x))/(max(x)-min(x));%normalisasi %proses pengamatan/pengukuran %estimasikan minimal jumlah cuplikan M>CKlog(N) mu=1*(1/sqrt(N)); %tentukan koherensi->perkiraan C=sqrt(N)*mu; %koherensi tak ternormalisasi=sqrt(N).koh M_sub=ceil(C*K_sparse*log(N)); % *** Simulasikan Digital Micromirror Device *** rp=randperm(N); act_cell(1:M_sub)=rp(1:M_sub); %randomize mirror in DMD PHI=zeros(M_sub,N); for k=1:M_sub; PHI(k,act_cell(k))=1;end; PHI=orth(randn(M_sub,N)’)'>0; % *** Lakukan pengukuran x_sub=PHI*x0 *** x_sub=PHI*x0; x_obs=zeros(N,1);x_obs(act_cell)=x0(act_cell); %Lakukan recovery %Bentuk kamus basis D=PHI*PSI D=PHI*PSI; %x_sub=D*x0; figure(4);imagesc(reshape(x_obs,N_row,N_col));colormap(gray);title(‘DMD aktif’); [D_row,D_col]=size(D); D_pos=-D; %ubah L1 menjadi LP A=zeros(D_row,2*D_col); A(:,1:D_col)=D; A(:,D_col+1:2*D_col)=D_pos; f=ones(2*D_col,1); lb=zeros(2*D_col,1); f1=ones(2*D_col,1); lb1=zeros(2*D_col,1); A1=-A; x_sub1=x_sub; %******************************* %* Jalankan algoritma simpleks * %******************************* alpha0=linprog(f,[],[],A,x_sub,lb); %get positive part alpha1=linprog(f1,[],[],A1,x_sub1,lb1);%get negative part alpha=alpha0-alpha1; % Urutkan [z,imax]=sort(abs(alpha(1:D_col)),’descend’); x_abs=1:D_col; figure(2); plot(x_abs, z,’b-’); %Reconstrusi Citra %=== x_hat=zeros(N,1); for k=1:K_sparse; x_hat=x_hat+alpha(imax(k))*PSI(:,imax(k)); end; Ip = reshape(x_hat, N_row, N_col); figure(3);imagesc(Ip);colormap(gray);title(‘citra rekonstruksi’);