Pola Bentuk


Bentuk merupakan salah satu ciri yang dapat diekstrak dari suatu objek untuk membedakan objek tersebut dengan objek lainnya.

Berikut ini merupakan contoh aplikasi pemrograman matlab untuk mengekstraksi ciri bentuk suatu objek dalam citra digital berdasarkan parameter luas, keliling, metric, dan eccentricity.

Luas merupakan banyaknya piksel yang menyusun suatu objek.

Sedangkan keliling merupakan banyaknya piksel yang berada pada boundary objek.

Eccentricity merupakan nilai perbandingan antara jarak foci ellips minor dengan foci ellips mayor suatu objek. Eccentricity memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai eccentricitynya mendekati angka 1, sedangkan objek yang berbentuk bulat/lingkaran, nilai eccentricitynya mendekati angka 0.

Sedangkan Metric merupakan nilai perbandingan antara luas  dan keliling objek. Metric memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai metricnya mendekati angka 0, sedangkan objek yang berbentuk bulat/lingkaran, nilai metricnya mendekati angka 1.

Langkah-langkah ekstraksi ciri pola bentuk adalah sebagai berikut:
1. Membaca citra RGB

2. Mengkonversi citra RGB menjadi citra grayscale

3. Mengkonversi citra grayscale menjadi citra biner menggunakan metode thresholding Otsu

4. Menghilangkan noise dengan cara menghapus objek yang memiliki luas di bawah 30

5. Operasi morfologi yaitu closing dan filling holes

6. Labelling objek

7. Menghitung luas, keliling, metric, dan eccentricity masing-masing objek

8. Mengklasifikasikan bentuk objek dengan ‘aturan if’ sederhana

Source code untuk mengekstraksi ciri bentuk suatu objek dalam citra digital adalah sebagai berikut:

% Adi Pamungkas, S.Si, M.Si
% Website: https://pemrogramanmatlab.com/
% Email  : adipamungkas@st.fisika.undip.ac.id

clc;clear;close all;

RGB = imread('pillsetc.png');
imshow(RGB);

I = rgb2gray(RGB);
threshold = graythresh(I);
bw = im2bw(I,threshold);
bw = bwareaopen(bw,30);

se = strel('disk',2);
bw = imclose(bw,se);
bw = imfill(bw,'holes');
[B,L] = bwboundaries(bw,'noholes');

hold on
for k = 1:length(B)
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end

stats = regionprops(L,'Area','Centroid','Eccentricity');

for k = 1:length(B)
    boundary = B{k};
    delta_sq = diff(boundary).^2;
    perimeter = sum(sqrt(sum(delta_sq,2)));
    area = stats(k).Area;
    eccentricity = stats(k).Eccentricity;
    metric = 4*pi*area/perimeter^2;

    centroid = stats(k).Centroid;
    text(centroid(1),centroid(2)-16,num2str(k),'Color','r',...
        'FontSize',20,'FontWeight','bold');
    disp('===================================')
    disp(strcat(['Object number = ', num2str(k)]))
    disp(strcat(['Area = ',num2str(area)]))
    disp(strcat(['Perimeter = ',num2str(perimeter)]))
    disp(strcat(['Metric = ',num2str(metric)]))
    disp(strcat(['Eccentricity = ',num2str(eccentricity)]))

    if metric>0.8
        text(centroid(1)-16,centroid(2)+16,'Bulat','Color','r',...
            'FontSize',20,'FontWeight','bold');
    else
        text(centroid(1)-16,centroid(2)+16,'Tidak Bulat','Color','b',...
            'FontSize',20,'FontWeight','bold');
    end
end

File source code lengkap beserta citra pada materi di atas dapat diperoleh melalui halaman berikut ini: Source Code

Sedangkan materi lebih lanjut mengenai pengolahan citra digital untuk mendeteksi warna dan bentuk suatu objek dapat dilihat pada halaman berikut: link

Tutorial mengenai klasifikasi jenis beras berdasarkan ekstraksi ciri bentuk dapat dilihat pada video berikut ini:

  1. Assalamualaikum mas, bisa tunjukan teori nya ?
    Terima kasih

  2. mas, bisa bantu contoh gui perbandingan citra sidik jari untuk mengukur prosentasi keidentikan

  3. idenya saya mau buat sp identifikasi sidik jari, ditempat saya kerja banyak perkara pemalsuan sidik jari, nah ada tantangan ke saya utk bagaimana membuat aplikasi yang mampu mengukur prosentasi keidentikan sidik jari yang di uji dengan sidik jari pembanding, tapi terus terang saja saya baru-baru aja coba pake matlab, sebelumya pake vb ato delphi, jadi kurang paham untuk matlabnya,.mohon bantuannya

  4. Pak Rizal, untuk perancangan sistem identifikasi sidik jari yang terintegrasi dengan hardware saya rekomendasikan untuk tidak menggunakan perangkat lunak matlab
    Meskipun juga support untuk proses interface, Software Matlab lebih difokuskan untuk penghitungan, simulasi, pemodelan, dan visualisasi
    Untuk proses interface, banyak software lain yang lebih handal di antaranya delphi, java, dan c

    Sedangkan untuk sistem identifikasi sidik jari sendiri, metode yang umumnya digunakan adalah deteksi minutiae, atau bisa juga dengan menggunakan metode filter bank gabor

    Semoga dapat memberikan gambaran dalam perancangan sistem tersebut

  5. mau tanya, apa benar untuk ekstraksi fitur kodingan gray (statistik) dan biner (morfologi) berbeda?

    • Benar
      Utk pengenalan pola bentuk, citra yg digunakan adalah citra biner
      Sedangkan utk pengenalan pola tekstur, citra yg digunakan adalah citra grayscale

  6. Mas, untuk mengklarifikasi bentuk seperti gambar nomor 8 bisa minta sourcodenya? Soalnya yg diatas klarifikasi hanya 1 objek (persegi panjang).
    Terima kasih

    • Klasifikasi mas
      Bukan klarifikasi
      Source codenya sdh saya share di atas
      Coding tsb digunakan utk membedakan antara objek berbentuk bulat dg tidak bulat

  7. Mas, mau tanya untuk kasus diatas apabila digunakan lebih dari satu image yang akan diektraksi ciri bentuknya bagaimana ya ? apakah untuk ektraksi ciri bentuk hanya eccoecentricity saja ?

    kemudian hasil dari ekstraksi ciri bentuk tsb akan diklasifikasi dengan menggunakan metode machine learning seperti SVM begitu bagaimana ya ?

    Terima kasih

  8. salam mas adi.,.,
    maaf mas, mu tanya …..
    cara melakukan traning data yang berupa dataset image dengan menggunakan LVQ tekniknya gmn ya mas.,.,?
    terima kasih sebelumnya….

    • secara umum, semua jenis jaringan syaraf tiruan ditraining dengan perintah ‘train’, yang membedakan hanya pembentukan arsitektur jaringannya saja misal perceptron menggunakan perintah ‘newp’, propagasi balik menggunakan perintah ‘newff’

  9. assalamu’alaikum mas
    mau nanya bagaimana code untuk menghitung luas, keliling dan centroid citra untuk masing-masing cluster warna citra

  10. bagaimana cara kita mengukur sisi terpanjang dari objek citra yg ingin kita deteksi bentuknya mas?

  11. Kak adi, mau tanya. Kakak pernah pake metode template matching gk?

  12. advinita inggarningtyas

    mas adi mau tanya, bagaimana untuk automatisasi di matlab buat segmentasi citra ya mas ? apa ada refrensi untuk kasus tersebut ?

  13. mas adi, saya mau nanya dong, cara segmentasi gambar lalu diambil bagian dari gambar itu gimana ya caranya? misanl ada gambar bunga, lalu yang diambi cm bagian kelopaknya aja mas. terima kasih mas

  14. cara cropping citra biner untuk dicocokkan dengan dataset gambar bagaimana caranya mas?

  15. semoga ke depan terdapat materi mengenai cara melakukan otomatisasi label suatu citra dengan menggunakan SOM (self ornagizing maps), dimana label tersebut juga ditampilkan dengan SOM

  16. min, kalau untuk pengenalan huruf karakter bisa pakai Penggabungan antara PCA dan JST-Back Propagation nggak min ? sekalian codingnya min…

  17. Kalo pengenalan pola mata kira kira bisa ga min pake cara diatas

  18. Assalamualaikum, mas kalo boleh tau ini memakai metode apa ya dalam menentukan bentuk lingkarannya?

  19. Analisis bentuk contoh nya seperti identifikasi buah tomat itu ya min? Makasih min

  20. min, mau tanya, diatas itu menggunakan metode curvelet atau bukan ? maaf masih newbie 😀

  21. assalamuallaikum mas adi, mau tanya saya kan mau membandingkan 2 bentuk desain, desain saya buat di autodesk powerShape ultimate. nah bentuk file yang saya simpan nanti biar bisa di bandingin di matlab apa ya?

  22. kalau file bentuk *.pic bisa gak ya mas?

  23. Mas, kalo nilai luasnya mau dijumlah dari semua objek, gimana ya codingnya? Thx

  24. bisa menggunakan perintah sum

  25. Muhammad Irfan Fathurrahman

    mas adi maaf mau tanya, untuk klasifikasi jenis kayu pengenalan tekstur nya apa bisa pake metode ini sebelum pake jst? terima kasih

  26. mas, kalau untuk program region filling (imfill) jika lokasi dan koneksinya ditentukan sendiri itu gimana ya program buat GUI nya? kalau di m.file nya saya nulisnya imfill(I,[4 4],8); I=citra format .bmp, tapi ketika program tersebut saya pindahkan ke GUI malah jadi error. mohon bantuannya mas, terima kasih.

  27. punten mas mau nanya, kalo saya mencari area piksel pada gambar saya tapi malah ga muncul nilai areanya, yg muncul ini
    7×1 struct array with fields: .. itu kenapa ya mas?

  28. assalamu’alaikum ….
    mas ada contoh pengenalan pola huruf pada matlab ya mas? sebelum nya terimakasih

  29. ziqrahaniffah

    mas kalau untuk menentukan bentuk sidik jari bisa tidak ya mas?

  30. mas bisa bagi informasi soal langkah2 kerja fuzzy dan jaringan syaraf tiruan untuk pengenalan pola suatu objek

  31. ada yang membaca citra alphabet mengenal jenis hruf mas adi

  32. kak cara hitung metric dan ecentricity secara manualnya gimana ya?

  33. Mas mau tanya, kenapa ya regionprops di matlab saya eror, katanya loadLibrary can’t reload. Terima kasih mohon bantuan nya 🙏

  34. mas kalau mau membuat tentang pengenalan angka bagaimana ya?

  35. Meli permata Sari

    Assalamualaikum kak
    Untuk membedakan ukuran buah kecil dengan besar menggunakan ektraksi ciri apa ya kak?

  36. Rohadatul Aisyi

    assalamualaikum mas
    saya mau tanya, bagaimana cara menghitung jumlah objek yang bulat dan jumlah objek yang tidak bulat? mohon bantuannya mas untuk tuhas akhir saya🙏🏻

Leave a comment