Chaotic Pearls

Lamunan dari seberang GKU lama …

Archive for June 2nd, 2008

Pencitraan Kompresif (1)

Posted by suksmono on June 2, 2008

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.

one pixel camera

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 \Phi  . Jika N jumlah total dari cermin DMD, sedangkan M adalah cermin aktif dalam satu kali pengambilan gambar, maka \Phi  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:

\hat{s}= \Phi s = [ \Phi \Psi] S  (1)

Berdasarkan persamaan diatas, proses pengamatan dapat dipandang sebagai pencuplikan kompresif dengan dua cara yang berbeda, yaitu:

  1. Pencuplikan kawasan spasial terhadap sinyal s secara acak
  2. Pencuplikan kawasan transform sebagian dari basis penjarang \psi  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 \Phi  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.

Original H-image

Gambar 2. Citra sederhana dalam pencitraan kompresif

measured image

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 \hat{s}  menyatakan hasil pengamatan, {\Psi}_{k}  vektor basis penjarang ke-k, maka pencarian basis dapat dirumuskan sebagai berikut:

P1: min ||S||1 s.t. \hat{s} = \sum_{k} {S}_{k} {\Psi}_{k}  (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.

DCT rekonstruksi

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.

Ordered-magnitude of H

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

  1. 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.
  2. 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.
  3. 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’);

Posted in Applications, Compressive Imaging, Compressive Sensing, Image Processing, Imaging, Uncategorized | Leave a Comment »