Deteksi Lingkaran Menggunakan Transformasi Hough


Transformasi Hough merupakan salah satu metode yang dapat digunakan untuk mendeteksi garis dan lingkaran pada suatu citra digital. Transformasi Hough bekerja dengan cara mencari hubungan ketetanggan antar piksel menggunakan persamaan garis lurus untuk mendeteksi garis dan persamaan lingkaran untuk mendeteksi lingkaran. Berikut ini merupakan contoh pemrograman matlab untuk melakukan deteksi lingkaran pada citra digital menggunakan Transformasi Hough. Sedangkan materi mengenai deteksi garis menggunakan transformasi hough dapat dilihat pada halaman berikut: Deteksi Titik Sudut Citra Untuk Identifikasi Bentuk

Pemrograman yang dilakukan merupakan modifikasi source code yang sebelumnya telah dikembangkan oleh David Young. Modifikasi dilakukan pada pengolahan akhir citra hasil deteksi sehingga objek dapat dipisahkan dengan background dan dapat dihitung luas dan kelilingnya.

Langkah-langkah pemrogramannya adalah sebagai berikut:

1. Membaca citra RGB

clc; clear; close all; warning off all;

% membaca citra RGB
im = imread('cristiano ronaldo.jpg');
figure,imshow(im);

2. Mengkonversi citra RGB menjadi citra Grayscale

% mengkonversi citra RGB menjadi grayscale
im_gray = rgb2gray(im);
figure,imshow(im_gray);

3. Melakukan deteksi tepi terhadap citra Grayscale

% melakukan deteksi tepi terhadap citra grayscale
e = edge(im_gray, 'canny');
figure,imshow(e);

4. Mendeteksi lingkaran menggunakan Transformasi Hough

% mendeteksi objek yang berbentuk lingkaran
radii = 40:1:80;
h = circle_hough(e, radii, 'same', 'normalise');
peaks = circle_houghpeaks(h, radii, 'nhoodxy', 15, 'nhoodr', 21, 'npeaks', 1);

figure,imshow(im);
hold on;
bw = false(size(im_gray));
for peak = peaks
    [x, y] = circlepoints(peak(3));
    plot(x+peak(1), y+peak(2), 'y-','LineWidth',4);
    bw(x+peak(2), y+peak(1)) = true;
end
hold off

5. Menampilkan citra biner hasil deteksi

% menampilkan citra biner hasil deteksi
im2 = insertShape(im,'circle',[peaks(1),peaks(2),peaks(3)],'LineWidth', 4);
R = im2(:,:,1);
G = im2(:,:,2);
B = im2(:,:,3);
[r,c,~] = find(R==255 & G==255 & B==0);
numind = size(r,1);

bin = false(size(im2,1), size(im2,2));

% Mark Skin Pixels
for i=1:numind
    bin(r(i),c(i)) = 1;
end

bin = imfill(bin,'holes');
str = strel('disk',5);
bin = imerode(bin,str);
figure, imshow(bin);

6. Menampilkan objek hasil deteksi

% menampilkan objek hasil deteksi
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
R(~bin) = 0;
G(~bin) = 0;
B(~bin) = 0;
RGB = cat(3,R,G,B);
figure,imshow(RGB);

7. Melakukan cropping terhadap objek hasil deteksi

% melakukan cropping terhadap objek hasil deteksi
stats = regionprops(bin,'All');
bbox = cat(1,stats.BoundingBox);
im3 = imcrop(RGB,bbox);
imwrite(im3,'myFile.png','Transparency', [0 0 0])
figure, imshow(im3);

8. Menghitung luas dan keliling objek hasil deteksi

% menghitung luas dan keliling objek hasil deteksi
area = cat(1,stats.Area);
perimeter = cat(1,stats.Perimeter);
disp(['Area = ',num2str(area)])
disp(['Perimeter = ',num2str(perimeter)])

Contoh hasil deteksi lingkaran pada citra yang lain:

File citra dan source code pada pemrograman di atas dapat diperoleh pada halaman berikut ini: Source Code

Posted on November 4, 2018, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , . Bookmark the permalink. Leave a comment.

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 )

Google+ photo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

%d bloggers like this: