Professional Documents
Culture Documents
June 8, 2012
Dalam beberapa artikel telah kita bahas tentang teori-teori pengolahan citra digital seperti teori color space dan otsu method (segmentasi). Nah, dalam artikel selingan ini saya mencoba memadukan mereka untuk kasus nyata yang bisa kita manfaatkan dalam deteksi objek dalam sebuah citra digital. Jadi dalam artikel ini tidak akan dibahas tentang teori-teori yang terkait. Anda bisa mencari tahu melalui artikel yang sudah saya tulis atau lewat Mbah Goog... Seperti diketahui bahwa terdapat berbagai color space yang bisa dimanfaatkan untuk pengolahan citra seperti HSV, HSI, Lab. Berdasarkan paper-paper yang saya baca, ketiga ruang warna ini dominan sekali digunakan. Untuk itu saya coba bahas salah satu pemanfaatan ruang warna tersebut lalu dipadukan dengan metode thresholding ala Otsu. # kasus pertama adalah mendeteksi objek marking pejalan kaki pada marking pengatur lalu lintas berikut ini.
[janshendry@gmail.com]
Page 1
June 8, 2012
Program yang dibuat terdiri atas 2 yakni program utama dan program konversi RGB ke HSV. Program Utama
clear all; close all; clc; %% Memanfaatkan komponen RGB untuk segmentasi citra filename='image1.jpg'; I=imread(filename); subplot(1,2,1), imshow(I); title('Citra Original'); %% %% Memanfaatkan HSV untuk segmentasi citra % konversi rgb ke hsv [h,s,v]=trans_RGB2HSV(I); % metode otsu level=.9; I2=im2bw(v,level); Ibw = bwareaopen(I2,370); subplot(1,2,2), imshow(Ibw); title('Hasil Deteksi'); %% Jans Hendry
Program RGB to HSV Simpan program ini dengan nama trans_RGB2HSV.m karena merupakan sebuah fungsi.
function [h,s,v]=trans_RGB2HSV(I) I2=im2double(I); R=I2(:,:,1); G=I2(:,:,2); B=I2(:,:,3); minRGB=min(min(R,G),B); v=max(max(R,G),B); s=v-minRGB; h=zeros(size(v)); z = ~s; s = s + z; k = find(R == v); h(k) = (G(k) - B(k))./s(k); k = find(G == v); h(k) = 2 + (B(k) - R(k))./s(k); k = find(B == v); h(k) = 4 + (R(k) - G(k))./s(k);
[janshendry@gmail.com]
Page 2
June 8, 2012
h = h/6; k = find(h < 0); h(k) = h(k) + 1; h=(~z).*h; k = find(v); s(k) = (~z(k)).*s(k)./v(k); s(~v) = 0;
[janshendry@gmail.com]
Page 3
June 8, 2012
Program yang digunakan juga ada 2, yakni program utama dan konversi ruang warna dari RGB ke HSV. Khusus untuk program ke dua tersebut sama persis dengan di atas. Khusus untuk program pertama adalah
clear all; close all; clc; %% Memanfaatkan komponen RGB untuk segmentasi citra filename='image2.jpg'; I=imread(filename); subplot(1,2,1), imshow(I); title('Citra Original'); %% Memanfaatkan HSV untuk segmentasi citra % konversi rgb ke hsv [h,s,v]=trans_RGB2HSV(I); % thresholding level=.9; I2=im2bw(v,level); Ibw = bwareaopen(I2,370); % Ibw =imfill(Ibw,'holes'); subplot(1,2,2), imshow(Ibw); title('Hasil Deteksi'); se=strel('line',15,0); dilatedI=imdilate(Ibw,se); figure, imshow(dilatedI); CC=bwconncomp(dilatedI); S=regionprops(CC,{'Centroid','Area','BoundingBox'}); for m=1:numel(S) luas(m)=S(m).Area; end [Val,Idx]=max(luas); G=S(Idx).BoundingBox; box=[G(1) G(2) G(3) G(4)]; Icrop=imcrop(I,box); figure, imshow(Icrop); % otsu method level=graythresh(Icrop); Ibw2=im2bw(Icrop,level); Ibw2=~Ibw2; Ibw2=bwareaopen(Ibw2,200); figure, imshow(Ibw2); CC=bwconncomp(Ibw2); S=regionprops(Ibw2,{'Centroid','Area','BoundingBox'}); for m=1:numel(S) luas(m)=S(m).Area; end [Val,Idx]=max(luas); G=S(Idx).BoundingBox;
[janshendry@gmail.com]
Page 4
June 8, 2012
box=[G(1) G(2) G(3) G(4)]; Icrop=imcrop(Icrop,box); figure, imshow(Icrop); Icrop2=imcrop(Ibw2,box); Icrop2=~Icrop2; figure, imshow(Icrop2); %% Jans Hendry
Bisa anda lihat bahwa kita hanya menggunakan 2 teori pengolahan citra di sini dan bisa mendapatkan hasil yang diinginkan. Semoga artikel ini bisa membantu. Silahkan copy tapi semoga anda bisa mengingat meletakkan copy right nya. Thanks...
[janshendry@gmail.com]
Page 5