Deteksi Lingkaran Menggunakan Transformasi Hough


Apakah yang dimaksud dengan Transformasi Hough??

Transformasi Hough merupakan salah satu metode image processing yang dapat digunakan untuk mendeteksi garis dan lingkaran pada suatu citra digital. Transformasi Hough bekerja dengan cara mencari hubungan ketetanggaan antar piksel menggunakan persamaan garis lurus untuk mendeteksi garis dan persamaan lingkaran untuk mendeteksi lingkaran. Berikut ini merupakan contoh aplikasi 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. Normalisasi citra dengan cara 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:

Contoh pengolahan citra digital di atas dapat dikembangkan lagi lebih lanjut menggunakan metode pengolahan citra terbaru sehingga diperoleh tingkat akurasi yang lebih baik.

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

Penerapan metode transformasi hough untuk mendeteksi objek yang berbentuk lingkaran dapat dilihat pada video tutorial berikut ini:

Posted on November 4, 2018, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , . Bookmark the permalink. 14 Comments.

  1. Ridho Aji Pangestu

    permisi mau tanya pak, itu untuk luas dari bola satuan piksel ya ?

  2. Ridho Aji Pangestu

    dijadikan menjadi satuan cm2 tidak pak ? kalau boleh tau rumusnya bagaimana ? terima kasih 🙂

  3. Maaf mau tanya. setelah deteksi tepi lalu ke deteksi objek bentuk lingkaran ada double type argunen di parameter h. Kira kira cara ataainya bagaimana mas.

  4. Pak klo deteksi lingkaran tidak pas di bola bagai mana pak?

  5. Tety Yuningsih

    izin bertanya pak
    bagaimana konsep dasar dan contoh perhitungan manual dari metode cht ini?
    mohon bantuan nya

  6. maaf izin bertanya jika fungsi circle_hough tidak terdeteksi bagaimana ya?

  7. Assalamualaikum, maaf mas mas disini, saya mau bertanya,
    sewaktu codingan saya jalankan, dan sampai di line fungsi “circle_hough”
    Saya mendapatkan error seperti ini:
    Undefined function or variable ‘circle_hough’.

    itu cara mengatasinya bagaimana ya mas?
    MATLAB saya versi R2017b

  8. Pak Adi, apakah perbedaan kamera dapat mempengaruhi akurasi machine learning, dikarenakan kualitas pixel gambar?

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: