Mendeteksi Objek yang Berbentuk Lingkaran


Bentuk merupakan salah satu ciri yang dapat diekstrak dari suatu objek. Ciri ini dapat digunakan untuk membedakan antara objek yang satu dengan lainnya. Berikut ini merupakan contoh aplikasi pengolahan citra untuk mendeteksi objek yang berbentuk lingkaran. Salah satu parameter yang dapat digunakan untuk mendefinisikan bentuk lingkaran adalah metric. Metric merupakan nilai perbandingan antara luas dan keliling suatu objek. Nilai metric berkisar antara 0 s.d 1. Objek yang berbentuk lingkaran, nilai metric nya mendekati angka satu. Materi lebih lanjut mengenai nilai metric dapat dilihat pada halaman berikut ini: Ekstraksi Ciri

Langkah-langkah pengolahan citra dan pemrograman MATLAB yang dilakukan untuk mendeteksi objek yang berbentuk lingkaran adalah:

1. Membaca citra RGB asli

clc; clear; close all;
I = imread('shape object.jpg');
figure, imshow(I);

2. Mengkonversi ruang warna citra yang semula berada pada ruang warna RGB menjadi ruang warna YCbCr

YCbCr = rgb2ycbcr(I);
figure, imshow(YCbCr);

3. Mengekstrak masing-masing komponen citra YCbCr

Y = YCbCr(:,:,1);
Cb = YCbCr(:,:,2);
Cr = YCbCr(:,:,3);
figure, imshow(Y);
figure, imshow(Cb);
figure, imshow(Cr);

Komponen Y

Komponen Cb

Komponen Cr

4. Melakukan thresholding terhadap komponen Y sehingga diperoleh citra biner hasil segmentasi

bw = im2bw(Y,.8);
figure, imshow(bw);

5. Melakukan komplemen citra untuk menjadikan objek berwarna putih dan background berwarna hitam

bw = imcomplement(bw);
figure, imshow(bw);

6. Melakukan operasi morfologi berupa area opening untuk menghilangkan noise

bw = bwareaopen(bw,50);
figure, imshow(bw);

7. Menampilkan citra RGB hasil segmentasi

R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);

R(~bw) = 0;
G(~bw) = 0;
B(~bw) = 0;
RGB = cat(3,R,G,B);
figure, imshow(RGB);

8. Melakukan pelabelan terhadap masing-masing objek yang tersegmentasi kemudian menghitung nilai metric masing-masing objek yang terlabeli

[B,L] = bwboundaries(bw,'noholes');
stats = regionprops(L,'All');

bw2 = zeros(size(I,1),size(I,2));
RGB2 = I;
RGB3 = I;

for k = 1:length(B)
    boundary = B{k};
    delta_sq = diff(boundary).^2;
    perimeter = stats(k).Perimeter;
    area = stats(k).Area;
    metric = 4*pi*area/perimeter^2;
    bbox = stats(k).BoundingBox;
    eccentricity = stats(k).Eccentricity;
    MajorAxisLength = stats(k).MajorAxisLength;
    MinorAxisLength = stats(k).MinorAxisLength;
    d = MajorAxisLength/MinorAxisLength;
    position = [boundary(1,2),boundary(1,1)];

    RGB2 = insertText(RGB2,position,num2str(metric),'FontSize',20,'BoxOpacity',0.8,'TextColor','white');

    if metric >0.9
        bw2(L==k) = 1;
        RGB3 = insertObjectAnnotation(RGB3,'rectangle',bbox,'lingkaran','FontSize',20,'LineWidth',4);
    end
end

R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);

R(~bw2) = 0;
G(~bw2) = 0;
B(~bw2) = 0;
RGB = cat(3,R,G,B);

figure, imshow(RGB);
figure, imshow(RGB2);
figure, imshow(RGB3);

9. Mendefinisikan bahwa objek yang berbentuk lingkaran adalah objek yang memiliki nilai metric lebih dari 0,9 (mendekati 1)

10. Menampilkan bounding box hasil deteksi objek yang berbentuk lingkaran

Hasil pengolahan citra tersebut menunjukkan bahwa metode yang digunakan dapat mendeteksi objek yang berbentuk lingkaran dengan cukup baik. Kita dapat mengembangkan metode pengolahan citra digital terbaru dalam proses deteksi objek sehingga diperoleh hasil yang lebih baik.

File source code lengkap beserta citra yang digunakan pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code MATLAB

Penggunaan nilai metric untuk mengklasifikasikan objek pada suatu citra dapat dilihat pada video tutorial berikut ini:

Posted on July 26, 2017, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 16 Comments.

  1. Mas. tolong bantuannya mas.
    kalau ingin mengambil objek Lidah, cara untuk mengambil objek lidah saja caranya gmn mas.
    tolong mas bantuannya mas.

  2. mas ini kalo boleh tau menggukan metode apa ya mas?

  3. Undefined function ‘insertText’ for input, kenapa itu ya mas ?

  4. Mas, bagaimana caranya nilai hasil dari perhitungan RGB di konverikan ke dalam arti warna ?

  5. R = I(:,:,1);
    G = I(:,:,2);
    B = I(:,:,3);

    R(~bw) = 0;
    G(~bw) = 0;
    B(~bw) = 0;

    Mas bisa terangkan perhitungan manual source code diatas?

  6. Astri Novilia Prayuni

    punten mau nanya, itu yg bagian
    bw = im2bw(Y,.8);
    kenapa menggunakan 8 ya?
    makasih sebelumnya

  7. boleh minta pencerahan.
    saya coba cooding diatas…
    saya jalankan di matlab R2015..
    yang tampil cuma sampai poin 7. Menampilkan citra RGB hasil segmentasi

  8. Siang Pak, izin bertanya kenapa saat saya masukin ‘imshow’ keluar warning kayak gini ya pak?

    The function “adjustXYData” was closed with
    an ‘end’, but at least one other function
    definition was not. To avoid confusion when
    using nested functions, it is illegal to use
    both conventions in the same file.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: