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
Posted on November 4, 2018, in Pengenalan Pola, Pengolahan Citra and tagged cara deteksi lingkaran, cara mendeteksi lingkaran, contoh deteksi tepi, contoh pengolahan citra digital, definisi transformasi hough, deteksi lingkaran menggunakan transformasi hough, deteksi tepi, deteksi tepi canny, ekstraksi ciri, menghitung luas dan keliling objek, source code deteksi lingkaran, source code hough transform, source code transformasi hough, transformasi hough adalah, tutorial matlab. Bookmark the permalink. 5 Comments.
permisi mau tanya pak, itu untuk luas dari bola satuan piksel ya ?
Iya betul
Luas dan keliling dalam satuan piksel
dijadikan menjadi satuan cm2 tidak pak ? kalau boleh tau rumusnya bagaimana ? terima kasih 🙂
untuk mengkonversi satuan piksel menjadi cm2 bisa menggunakan resolusi spasial
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.