Deteksi Lingkaran Dengan Transfromasi Hough Menggunakan Matlab
1. Tujuan
Bertujuan untuk menjelaskan, secara matematis, tujuan menyelesaikan masalah dalam Transformasi Hough merupakan salah satu metode image processing yang dapat digunakan untuk mendeteksi garis dan lingkaran pada suatu citra digital
2. Optimasi
Problem optimasi secara tipikal akan memaksimalkan atau meminimalkan suatu fungsi yang disebut fungsi obyektif (objective function) pada himpunan titik-titik S (feasible set).
3. Fungsi
Problem : Menentukan lingkararan bola dalam gambar digital
4. Percobaan
1. Membaca citra RGB
1 2 3 4 5 | 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
1 2 3 | % mengkonversi citra RGB menjadi grayscale im_gray = rgb2gray(im); figure,imshow(im_gray); |
3. Melakukan deteksi tepi terhadap citra Grayscale
1 2 3 | % melakukan deteksi tepi terhadap citra grayscale e = edge(im_gray, 'canny' ); figure,imshow(e); |
4. Mendeteksi lingkaran menggunakan Transformasi Hough
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | % 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | % 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
1 2 3 4 5 6 7 8 9 | % 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
1 2 3 4 5 6 | % 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
1 2 3 4 5 | % 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:
5. Link program
clc; clear; close all; warning off all;
% membaca citra RGB
im = imread(
'cristiano ronaldo.jpg'
);
figure,imshow(im);
% mengkonversi citra RGB menjadi grayscale im_gray = rgb2gray(im); figure,imshow(im_gray);
|
Tidak ada komentar:
Posting Komentar