UAS 2

 

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);
% melakukan deteksi tepi terhadap citra grayscale
e = edge(im_gray, 'canny');
figure,imshow(e);

% 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

im2 = insertShape(im,

% 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);

% 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);

area = cat(1,stats.Area);
% 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)])


Tidak ada komentar:

Posting Komentar