Jumat, 11 Desember 2009

Teknik Deteksi Tepi

Deteksi tepi (edge detection) pada suatu citra adalah suatu proses yang menghasilkan tepi-tepi citra, tujuannya adalah :
  1. menandai bagian yang menjadi detail citra.
  2. untuk memperbaiki detail citra yang kabur.
  3. memperjelas bentuk suatu citra.



Ada dua metode deteksi tepi yang populer dan sering digunakan, yaitu laplacian dan gradien. Metode laplacian akan mencari titik nol persimpangan di turunan kedua dari gambar untuk menemukan tepi gambar. Marrs-Hildreth adalah salah satu teknik deteksi tepi yang menggunakan metode laplacian sebagai dasarnya.

Metode gradien digunakan pada teknik Roberts, Prewitt dan Sobel untuk mendeteksi tepi pada citra. Metode gradien mendeteksi tepi dengan terlebih dahulu menghitung ukuran kekuatan tepi, biasanya sebuah ekspresi derivatif orde pertama seperti gradien besar, kemudian mencari arah lokal maksimum dari besarnya gradien menggunakan sebuah perhitungan perkiraan berdasarkan tepi lokal.





Dibawah ini adalah script yang digunakan dalam mendeteksi tepi citra dengan metode Prewitt, Sobel serta laplacian :


clear all;
l=imread('nori.jpg');
l1=rgb2gray(l);
l2=fft(double(l1));
l2_1=fft(double(l));
figure(1)
clf(subplot(3,2,1),imshow(l));
title('Original image');
hold on;
subplot(3,2,2),imshow(l1);
title('Gray scale image ');

% creat filter matrix(3x3 window)
h=fspecial('prewitt');
l_pre=uint8(round(filter2(h,l1)));
l_pre_1=fft(double(l_pre));
subplot(3,2,3),imshow(l_pre)
title('Prewitt filtered image');

% creat filter matrix(3x3 window)
h=fspecial('sobel');
l_sobel=uint8(round(filter2(h,l1)));
l_sobel_1=fft(double(l_sobel));
subplot(3,2,4),imshow(l_sobel)
title('Sobel filtered image');

h=fspecial('log',5);
l_log=uint8(round(filter2(h,l1)));
l_log_1=fft(double(l_log));
subplot(3,2,5),imshow(l_log)
title('5x5 Laplacian of Guassian Filtered Image');


h=fspecial('log',3);
l_log3=uint8(round(filter2(h,l1)));
l_log3_1=fft(double(l_log3));
subplot(3,2,6),imshow(l_log3)
title('3x3 Laplacian of Guassian Filtered Image');

%suitable images are TIFF images ,png,jpgonly bmp is not suitable.
figure(2)
subplot(3,2,1),imshow(l2);
subplot(3,2,2),imshow(l2);
subplot(3,2,3),imshow(l_pre_1);
subplot(3,2,4),imshow(l_sobel_1);
subplot(3,2,5),imshow(l_log_1);
subplot(3,2,6),imshow(l_log3_1);
Hasil dari script tersebut dapat dilihat pada gambar dibawh ini :

Kamis, 10 Desember 2009

Melihat Komposisi Warna pada Citra dalam Bentuk Histogram dengan Matlab

Sebuah citra berwarna tentu memiliki komposisi warna yang berbeda. Standar warna pada sebuah citra berwarna adalah RGB (Red, Green, Blue).  Percampuran antar ketiga warna inilah yang akan membedakan kontras dan kecerahan pada suatu citra.

Dengan Matlab,  komposisi warna merah, biru ataupun hijau dapat ditambah atau dikurangi untuk berbagai keperluan seperti fotografi, penyidikan, kompresi citra dan sebagainya. Sebagai contoh, jika ingin membuat sebuah foto berwarna menjadi foto hitam putih, maka kita cukup menghilangkan semua nilai RGB dari foto tersebut. Maka foto akan kehilangan semua warna RGB dan pencampurannya.

Berikut ini adalah kode matlab untuk pembuatan histogram pada foto berwarna, serta penghapusan komposisi RGB sehingga foto menjadi hitam putih:


clear all;
close all;
l=imread('cewe.jpg');
l1=rgb2gray(l);
figure(1)
subplot(1,2,1)
imshow(l1)
title('Original Image');
[counts x]=imhist(l1);
counts1=counts(2:256-1,:);
x1=[2:1:255];
h=hist(counts1,x1);
p=histeq(l1,h);
subplot(1,2,2)
imshow(p);
title('Processed Image');
hold on;
figure(2)
subplot(1,2,1)
imhist(l1)
title('Histogram of Original Image');
subplot(1,2,2)
imhist(p)
title('Histogram of Processed Image');
hold on;

k=mean2(l1);
k2=mean2(p);
dev=std2(l1);
dev1=std2(p);
[co xi]=imhist(l1,8);
[co1 xi1]=imhist(p,8);
m=mean2(xi);
m2=mean2(xi1);
stdev=std2(xi);
stdev1=std2(xi1);
disp('********Comparison of Mean and Standard Deviation for Whole Image and 8x8 Block*********');
disp('Original Image');
disp('Mean of Whole Image=')
disp(k);
disp('Mean for 8x8 Sub-Block of Intensities=');
disp(m);
disp('Standard Deviation of Whole Image=')
disp(dev);
disp('Standard Deviation for 8x8 Sub-Block of Intensities=');
disp(stdev);

disp('Processed Image');
disp('Mean of Whole Image=')
disp(k2);
disp('Mean for 8x8 Sub-block of Intensities=');
disp(m2);
disp('Standard Deviation of Whole Image=')
disp(dev1);
disp('Standard Deviation for 8x8 Sub-block of Intensities=');
disp(stdev1);


Setelah kode diatas dieksekusi, maka histogramnya akan muncul dan proses penghapusan elemen RGB akan tampak seperti gambar dibawah ini :



Jumat, 20 November 2009

Konversi Citra ke Pixel Matrix

Pada dasarnya, citra adalah sekumpulan bilangan bulat (integer) yang mewakili warna tertentu. Percampuran warna akan membuat kita melihat sebuah objek pada layar tampak seperti aslinya. 

Pixel sendiri merupakan satuan ukuran standar yang digunakan pada hampir semua perangkat pengolah citra (monitor, kamera digital, printer, scanner) di dunia. Pixel adalah sebuah titik yang hanya dapat mewakili satu warna. Pencampuran pixel-pixel yang berbeda akan menciptakan kreasi warna, dan tentunya akan mencitrakan suatu gambar. 

Kode dibawah ini akan mengkonversi sebuah gambar 240 (lebar) X 362 (tinggi) pixel menjadi bentuk pixel matrix dengan ukuran yang sama:

c=imread('cewe.jpg');
asci=uint8(c)
asci(:,:,1)



Kode diatas akan memperlihatkan bentuk matrix pada pixel-pixel yang memiliki derajat keabuan berwarna merah RGB. Untuk warna lainnya, kita cukup mengubah parameter 1 pada kode asci(:,:,1) dengan nilai 2 (hijau) atau 3 (biru). Hasilnya tampak seperti dibawah ini: