Deteksi Objek Berbentuk Lingkaran dengan Matlab
Disini saya menggunakan Matlab R2018a untuk melakukannya. Apabila teman-teman menggunakan versi lain, boleh mencobanya terlebih dahulu.
Disini saya menggunakan 2 gambar ini:
Pertama yang dilakukan adalah load gambar yang akan didetksi objeknya
img=imread('objek4.jpg');
lalu ubah ke grayscale
gray=rgb2gray(img);
Haluskan dengan filter gaussian
imgGauss=imgaussfilt(gray,4);
Ambil nilai ambang untuk menjadikannya gambar biner
level=graythresh(imgGauss);
Ubah ke gambar biner sesuai dengan nilai ambang
BW=imbinarize(gray,level);
Isi area yang mungkin terdapat bolongan2.
imgFill=imfill(BW,'holes');
Hilangkan objek yang kecil yang kurang dari 500px
imgOpen=bwareaopen(imgFill,500);
Beri label setiap wilayah dengan 8 connectivity
imgLabel = bwlabel(imgOpen,8);
Dapatkan properties centroid, major axis, minor axis, eccentricity, dan bounding box setiap label
stats = regionprops('table',imgLabel,'Centroid','MajorAxisLength','MinorAxisLength','Eccentricity','BoundingBox');
Tampilkan objek yang berbentuk lingkaran dengan lingkaran warna hijau dan yang bukan lingkaran dengan kotak warna merah
figure('name','deteksi objek lingkaran - Irfan Muhammad Ghani www.kangghani.com');imshow(img); hold on;
jumlahlingkaran=0;
posisi=[];
for x = 1 : numel(stats.Eccentricity)
lingkarA = stats.Eccentricity(x);
% Eccentricity bernilai 0-1
% semakin dekat ke 0 maka objek tersebut adalah lingkaran
% jika eccentricity kurang dari 0.5 maka itu lingkaran
if lingkarA < 0.5
%hitung jumlah lingkaran
jumlahlingkaran=jumlahlingkaran+1;
%ketahui posisi lingkaran
posisi(jumlahlingkaran)=x;
%cari titik tengah lingkaran x
centers = stats.Centroid(x,:);
%cari diameter lingkaran x
diameters = mean([stats.MajorAxisLength(x) stats.MinorAxisLength(x)],2);
%cari jari2 lingkaran x
radii = diameters/2;
%tandai objek yang termasuk lingkaran dengan warna hijau
viscircles(centers,radii,'color','g');
else
%tandai objek yang bukan lingkaran dengan warna merah
bb = stats.BoundingBox(x,:);
rectangle('position',bb,'edgecolor','r','linewidth',2)
end
end
hold off;
Hasil dari deteksi objek berbentuk lingkaran dengan Matlab:
Complete Code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% dibuat oleh: Irfan Muhammad Ghani
% Deteksi Objek Lingkaran dengan
% melihat propertiesnya
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;clc;close all;
% load gambar asli
img=imread('objek4.jpg');
% ubah ke gray
gray=rgb2gray(img);
% haluskan gambar asli dengan gaussian
imgGauss=imgaussfilt(gray,4);
% ambil level threshold
level=graythresh(imgGauss);
% gambar biner dari thresold gambar gray
BW=imbinarize(gray,level);
% isi wilayah yang bolong
imgFill=imfill(BW,'holes');
% hilangkan objek yang kurang dari 500px
imgOpen=bwareaopen(imgFill,500);
% beri label setiap wilayah
imgLabel = bwlabel(imgOpen,8);
% ambil properties centroid, major axis, minor axis, eccentricity, dan
% bounding Box
stats = regionprops('table',imgLabel,'Centroid','MajorAxisLength','MinorAxisLength','Eccentricity','BoundingBox');
% tampilkan deteksi objek lingkaran
figure('name','deteksi objek lingkaran - Irfan Muhammad Ghani 15101052');imshow(img); hold on;
jumlahlingkaran=0;
posisi=[];
for x = 1 : numel(stats.Eccentricity)
lingkarA = stats.Eccentricity(x);
% Eccentricity bernilai 0-1
% semakin dekat ke 0 maka objek tersebut adalah lingkaran
% jika eccentricity kurang dari 0.5 maka itu lingkaran
if lingkarA < 0.5
%hitung jumlah lingkaran
jumlahlingkaran=jumlahlingkaran+1;
%ketahui posisi lingkaran
posisi(jumlahlingkaran)=x;
%cari titik tengah lingkaran x
centers = stats.Centroid(x,:);
%cari diameter lingkaran x
diameters = mean([stats.MajorAxisLength(x) stats.MinorAxisLength(x)],2);
%cari jari2 lingkaran x
radii = diameters/2;
%tandai objek yang termasuk lingkaran dengan warna hijau
viscircles(centers,radii,'color','g');
else
%tandai objek yang bukan lingkaran dengan warna merah
bb = stats.BoundingBox(x,:);
rectangle('position',bb,'edgecolor','r','linewidth',2)
end
end
hold off;
Sekian dari postingan ini, terimakasih telah mengunjungi blog saya, dan semoga bermanfaat.





Komentar
Posting Komentar