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 :