Materi Sebelumnya:
1. Pengantar Operasi Biner
Beberapa pemrosesan citra mengacu pada citra biner. Sebagai contoh, dengan menggunakan citra biner, perbandingan panjang dan lebar objek dapat diperoleh. Di depan juga telah dibahas aplikasi citra biner pada morfologi. Namun, tentu saja masih banyak operasi lain yang memanfaatkan citra biner. Beberapa contoh diulas dalam artikel ini.
2. Representasi Bentuk
Fitur suatu objek merupakan karakteristik yang melekat pada objek. Fitur bentuk merupakan suatu fitur yang diperoleh melalui bentuk objek dan dapat dinyatakan melalui kontur, area, dan transformasi, sebagaimana ditunjukkan pada Gambar 8.1. Fitur bentuk biasa digunakan untuk kepentingan identifikasi objek. Sebagai contoh, rasio kebulatan dipakai sebagai salah satu fitur pada identifikasi tanaman (Wu, dkk., 2007) dan Polar Fourier Transform (PFT) dapat dipakai untuk identifikasi daun (Kadir, dkk., 2011).
3. Ekstraksi Tepi Objek
Tepi objek pada citra biner dapat diperoleh melalui algoritma yang dibahas oleh Davis (1990). Pemrosesan dilakukan dengan menggunakan 8-ketetanggaan. Sebagai penjelas, lihatlah Gambar 8.2. Piksel P mempuyai 8 tetangga yang dinyatakan dengan P0 hingga P7. Adapun algoritma tertuang pada Algoritma 8.1.
4. Mengikuti Kontur
Mengikuti kontur (contour following) merupakan suatu metode yang digunakan untuk mendapatkan tepi objek. Terkait dengan hal itu terdapat istilah kontur eksternal dan kontur internal. Gambar berikut memberikan ilustrasi tentang perbedaan kedua jenis kontur tersebut. Piksel yang menjadi bagian kontur eksternal (ditandai dengan f) , sedangkan piksel yang menjadi bagian kontur internal terletak di dalam objek itu sendiri.
Catatan penting
Istilah kontur identik dengan batas (boundary). Itulah sebabnya fitur yang berhubungan dengan kontur sering dinamakan deskriptor batas.
Kontur Internal
Salah satu cara untuk mendapatkan kontur internal yang diurutkan menurut letak piksel adalah dengan memanfaatkan algoritma pelacakan kontur moore. Algoritma ini digunakan pada peta topografik (pradha, dkk,2010).
Selanjutnya lansung saja pada coding octave yang berhubungan pada materi artikel ini :
Program mencari tepi biner objek dengan fungsi
===========================================
function [g] = tepibiner(f)
% tepi biner Berguna untuk mendapatkan tepi objek
% pada citra biner
[jum_baris, jum_kolom] = size(f);
g = zeros(jum_baris, jum_kolom);
for q = 2 : jum_baris - 1
for p = 2 : jum_kolom - 1
p0 = f(q, p+1);
p1 = f(q-1, p+1);
p2 = f(q-1, p);
p3 = f(q-1, p-1);
p4 = f(q, p-1);
p5 = f(q+1, p-1);
p6 = f(q+1, p);
p7 = f(q+1, p+1);
sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
if sigma == 8
g(q, p) = 0;
else
g(q, p) = f(q, p);
end
end
end
end % akhir fungsi
u=imread('c:\image\hotmabin.jpg');
g=tepibiner(u);imshow(g)
program mencari tepi biner objek tanpa fungsi
===========================================
f=imread('c:\image\daun_bin.tif');
[jum_baris, jum_kolom] = size(f);
g=f;
g = zeros(jum_baris, jum_kolom);
for q = 2 : jum_baris - 1
for p = 2 : jum_kolom - 1
p0 = f(q, p+1);
p1 = f(q-1, p+1);
p2 = f(q-1, p);
p3 = f(q-1, p-1);
p4 = f(q, p-1);
p5 = f(q+1, p-1);
p6 = f(q+1, p);
p7 = f(q+1, p+1);
sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
if sigma == 8
g(q, p) = 0;
else
g(q, p) = f(q, p);
end
end
end
subplot(1,2,1);imshow(f)
subplot(1,2,2);imshow(g)
function hasil=perim1(bw)
u=inbound_tracing(bw);
hasil=length(u) -1;
end %akhir fungsi
img=imread('c:\image\daun_bin.tif');
perim1(img)
program perimeter/keliling tanpa inbound_tracing
=========================================
img=imread('c:\image\daun_bin.tif');
perimeter=length(img) -1
program mencari luas objek citra biner denga fungsi
===========================================
function hasil = luas(bw)
% Untuk menghitung luas citra bw (citra biner)
[tinggi, lebar] = size(bw);
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if bw(p, q) == 1
hasil = hasil + 1;
end
end
end
end % akhir fungsi
Daun = imread('c:\image\daun_bin.tif');
luas(Daun)
program mencari luas objek citra biner tanpa fungsi
==========================================
x = imread('c:\image\daun_bin.tif');
[tinggi, lebar] = size(x);
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if x(p, q) == 1
hasil = hasil + 1;
end
end
end
luas_citra_daun_bin=hasil
output
luas_citra_daun_bin = 31862
program diameter objek biner dengan fungsi (masih debug)
================================================
function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW)
U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);
diameter = jarak_maks;
end %akhir fungsi
Daun = imread('c:\image\daun_bin.tif');
[d,x1,y1,x2,y2] = peroleh_diameter(Daun);
d
program diameter objek biner tanpa fungsi
==============================
x= imread('c:\image\daun_bin.tif');
n = length(x);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((x(p,1)-x(q,1)) ^ 2 + (x(p,2)-x(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
diameter = jarak_maks
program pusat massa dan fitur menggunakan pusat massa dengan fungsi
==========================================================
function [pusat_x, pusat_y] = centroid(BW)
% CENTROID Untuk memperoleh pusat massa sebuah objek
% yang terletak pada citra biner BW
[tinggi, lebar] = size(BW);
pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if BW(q, p) == 1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end
pusat_x = pusat_x / luas;
pusat_y = pusat_y / luas;
end %akhir fungsi
Daun = imread('C:\Image\daun_bin.tif');
[x, y] = centroid(Daun); imshow(Daun);
[panjang, lebar] = size(Daun);
line([0 lebar], [round(y) round(y)],’Color’,’b’)
line([round(x) round(x)], [0 panjang],’Color’,’b’)
program pusat massa dan fitur menggunakan pusat massa tanpa fungsi
==========================================================
objek = imread('C:\Image\daun_bin.tif');
[tinggi, lebar] = size(objek);
pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if objek(q, p) ==1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end
pusat_x = pusat_x / luas;
pusat_y = pusat_y / luas;
imshow(objek);
line([0 lebar], [round(pusat_y) round(pusat_y)],’Color’,’b’)
line([round(pusat_x) round(pusat_x)], [0 tinggi],’Color’,’b’)
===========================================
function [g] = tepibiner(f)
% tepi biner Berguna untuk mendapatkan tepi objek
% pada citra biner
[jum_baris, jum_kolom] = size(f);
g = zeros(jum_baris, jum_kolom);
for q = 2 : jum_baris - 1
for p = 2 : jum_kolom - 1
p0 = f(q, p+1);
p1 = f(q-1, p+1);
p2 = f(q-1, p);
p3 = f(q-1, p-1);
p4 = f(q, p-1);
p5 = f(q+1, p-1);
p6 = f(q+1, p);
p7 = f(q+1, p+1);
sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
if sigma == 8
g(q, p) = 0;
else
g(q, p) = f(q, p);
end
end
end
end % akhir fungsi
u=imread('c:\image\hotmabin.jpg');
g=tepibiner(u);imshow(g)
program mencari tepi biner objek tanpa fungsi
===========================================
f=imread('c:\image\daun_bin.tif');
[jum_baris, jum_kolom] = size(f);
g=f;
g = zeros(jum_baris, jum_kolom);
for q = 2 : jum_baris - 1
for p = 2 : jum_kolom - 1
p0 = f(q, p+1);
p1 = f(q-1, p+1);
p2 = f(q-1, p);
p3 = f(q-1, p-1);
p4 = f(q, p-1);
p5 = f(q+1, p-1);
p6 = f(q+1, p);
p7 = f(q+1, p+1);
sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
if sigma == 8
g(q, p) = 0;
else
g(q, p) = f(q, p);
end
end
end
subplot(1,2,1);imshow(f)
subplot(1,2,2);imshow(g)
function hasil=perim1(bw)
u=inbound_tracing(bw);
hasil=length(u) -1;
end %akhir fungsi
img=imread('c:\image\daun_bin.tif');
perim1(img)
program perimeter/keliling tanpa inbound_tracing
=========================================
img=imread('c:\image\daun_bin.tif');
perimeter=length(img) -1
program mencari luas objek citra biner denga fungsi
===========================================
function hasil = luas(bw)
% Untuk menghitung luas citra bw (citra biner)
[tinggi, lebar] = size(bw);
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if bw(p, q) == 1
hasil = hasil + 1;
end
end
end
end % akhir fungsi
Daun = imread('c:\image\daun_bin.tif');
luas(Daun)
program mencari luas objek citra biner tanpa fungsi
==========================================
x = imread('c:\image\daun_bin.tif');
[tinggi, lebar] = size(x);
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if x(p, q) == 1
hasil = hasil + 1;
end
end
end
luas_citra_daun_bin=hasil
output
luas_citra_daun_bin = 31862
program diameter objek biner dengan fungsi (masih debug)
================================================
function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW)
U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);
diameter = jarak_maks;
end %akhir fungsi
Daun = imread('c:\image\daun_bin.tif');
[d,x1,y1,x2,y2] = peroleh_diameter(Daun);
d
program diameter objek biner tanpa fungsi
==============================
x= imread('c:\image\daun_bin.tif');
n = length(x);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((x(p,1)-x(q,1)) ^ 2 + (x(p,2)-x(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
diameter = jarak_maks
program pusat massa dan fitur menggunakan pusat massa dengan fungsi
==========================================================
function [pusat_x, pusat_y] = centroid(BW)
% CENTROID Untuk memperoleh pusat massa sebuah objek
% yang terletak pada citra biner BW
[tinggi, lebar] = size(BW);
pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if BW(q, p) == 1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end
pusat_x = pusat_x / luas;
pusat_y = pusat_y / luas;
end %akhir fungsi
Daun = imread('C:\Image\daun_bin.tif');
[x, y] = centroid(Daun); imshow(Daun);
[panjang, lebar] = size(Daun);
line([0 lebar], [round(y) round(y)],’Color’,’b’)
line([round(x) round(x)], [0 panjang],’Color’,’b’)
program pusat massa dan fitur menggunakan pusat massa tanpa fungsi
==========================================================
objek = imread('C:\Image\daun_bin.tif');
[tinggi, lebar] = size(objek);
pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if objek(q, p) ==1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end
pusat_x = pusat_x / luas;
pusat_y = pusat_y / luas;
imshow(objek);
line([0 lebar], [round(pusat_y) round(pusat_y)],’Color’,’b’)
line([round(pusat_x) round(pusat_x)], [0 tinggi],’Color’,’b’)
Salah satu hasil dari codinjg diatas yaitu :
Terimas Kasih dan Semangat Belajar
Tidak ada komentar:
Posting Komentar