Deteksi Lingkaran Menggunakan Transformasi Hough


Transformasi Hough adalah teknik penting dalam pengolahan citra yang digunakan untuk mendeteksi garis, lingkaran, atau bentuk geometris lainnya dalam citra digital. Salah satu aplikasi utama dari transformasi Hough adalah dalam deteksi lingkaran. Dalam artikel ini akan dijelaskan konsep dasar transformasi Hough dan bagaimana teknik ini digunakan untuk mendeteksi lingkaran dalam citra.

Circle Hough Transform (https://www.cis.rit.edu)

1. Pengenalan Transformasi Hough

Transformasi Hough adalah alat penting dalam pengolahan citra yang pertama kali diperkenalkan oleh Paul Hough pada tahun 1962. Tujuan utama dari transformasi Hough adalah untuk mendeteksi garis atau bentuk geometris dalam citra, terlepas dari variasi ukuran, rotasi, atau transformasi lainnya. Teknik ini menjadi sangat berguna dalam banyak aplikasi, termasuk pengolahan citra medis, pengenalan karakter, dan visi komputer.

2. Transformasi Hough untuk Deteksi Lingkaran

Transformasi Hough dapat dengan mudah diterapkan untuk mendeteksi lingkaran dalam citra. Berikut adalah langkah-langkah dasar untuk deteksi lingkaran menggunakan transformasi Hough:

a. Praproses Citra

Langkah pertama adalah melakukan praproses citra, seperti menghilangkan noise atau meningkatkan kontras, agar hasil deteksi lingkaran lebih akurat.

b. Pencarian Pusat Lingkaran

Untuk setiap piksel dalam citra yang dianggap sebagai titik tepi (misalnya, menggunakan deteksi tepi Canny), transformasi Hough mencari semua lingkaran yang mungkin yang bisa melewati titik tersebut. Ini dilakukan dengan memvariasikan pusat lingkaran dan radiusnya.

c. Transformasi Hough

Transformasi Hough menghasilkan akumulator yang merupakan array dua dimensi. Setiap sel dalam akumulator mewakili suara atau “voting” untuk pusat lingkaran dan radius tertentu. Proses ini melibatkan iterasi melalui setiap titik tepi dalam citra dan meningkatkan nilai sel dalam akumulator yang sesuai dengan parameter pusat dan radius lingkaran yang mungkin.

d. Pencarian Puncak Akumulator

Setelah transformasi Hough selesai, langkah terakhir adalah mencari puncak dalam akumulator. Ini mengindikasikan pusat dan radius lingkaran yang paling mungkin sesuai dengan data citra.

3. Keunggulan Transformasi Hough untuk Deteksi Lingkaran

Transformasi Hough memiliki beberapa keunggulan dalam deteksi lingkaran:

a. Invariansi Skala: Teknik ini dapat mendeteksi lingkaran dengan berbagai ukuran.

b. Invariansi Rotasi: Transformasi Hough tidak terpengaruh oleh rotasi lingkaran dalam citra.

c. Kekuatan dalam Data Tepi: Menggunakan data tepi dari citra memungkinkan deteksi lingkaran pada objek dengan tepi yang jelas.

4. Aplikasi Deteksi Lingkaran

Deteksi lingkaran dengan transformasi Hough memiliki berbagai aplikasi, termasuk:

a. Pengenalan Objek: Identifikasi dan pelacakan objek dalam citra atau video.

b. Pengolahan Medis: Pendeteksian struktur seperti sel-sel dalam citra mikroskop.

c. Industri Otomatisasi: Pengawasan kualitas dalam produksi dan perakitan.

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:

Transformasi Hough adalah alat yang kuat dalam pengolahan citra untuk mendeteksi lingkaran dan bentuk geometris lainnya dengan berbagai keunggulan, seperti invariansi skala dan rotasi. Teknik ini telah membantu dalam berbagai aplikasi di berbagai bidang, dan terus berkembang seiring dengan peningkatan teknologi citra digital. Deteksi lingkaran dengan transformasi Hough merupakan salah satu contoh yang menunjukkan daya tahan dan fleksibilitas teknik ini dalam berbagai konteks.

Source code beserta data lengkap pemrograman MATLAB di atas dapat diperoleh melalui halaman berikut ini: Source Code

Posted on September 13, 2023, in Pengolahan Citra and tagged , , , , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a comment