Pengolahan citra selanjutnya pada materi ini yaitu pengembangan dan ekstraksi fitur bentuk dan kontur, lansung saja admin lampirkan coding octave pada pengembangan dan ekstraksi fitur bentuk dan kontur.
Materi Sebelumnya:
Coding Octave :
Program pengambangan dwi-aras dengan fungsi sudah di modif
================================================================
function [g] = ambang(f, t)
% fungsi ambang Menentukan nilai ambang yang digunakan
% untuk melakukan pengambangan
% f = Citra Masukan berskala keabuan
% t = nilai ambang
% Keluaran: g = citra biner
[m, n] = size(f);
for i=1 : m
for j=1:n
if f(i,j) <= t
g(i,j) = 0;
else
g(i,j) = 1;
end
end
end
end %akhir fungsi
f = imread('c:\image\andri 2.jpg');
g = ambang(f, 100);
subplot(1,2,1);imshow(f)
subplot(1,2,2);imshow(1-g)
f = imread('c:\image\aan.png');
g = ambang(f, 100);
subplot(1,2,1);imshow(f),title('citra Masukan')
subplot(1,2,2);imshow(1-g),title('citra Keluaran')
f = imread('c:\image\aa.jpg');
g = ambang(f, 100);
subplot(1,2,1);imshow(f),title('citra Masukan')
subplot(1,2,2);imshow(1-g),title('citra Keluaran')
Program pengambangan aras jamak dengan fungsi sudah di modif
================================================
function [g] = arasjamak(f, t1, t2)
% Pengambanan dengan dua nilai ambang
% f = Citra berskala keabuan
% t1 = nilai ambang bawah
% t2 = nilai ambang atas
% Masukan : f = citra biner
% Keluaran: g = citra biner
[m, n] = size(f);
for i=1 : m
for j=1:n
if f(i,j) <= t1 || f(i,j) >= t2
g(i,j) = 0;
else
g(i,j) = 1;
end
end
end
end %akhir fungsi
f = imread('c:\image\benda.png');
g = arasjamak(f, 50, 100);
subplot(1,2,1);imshow(f), title('citra masukan')
subplot(1,2,2);imshow(g), title('citra keluaran dengan t1=50 dan t2=100')
Program pengambangan adaftif dengan fungsi sudah dimodif
======================================================
function [g] = adapmean(f, w, c)
% adapmean Melakukan pengambangan adaptif dengan menggunakan mean.
% f = variabel Citra masukan berskala keabuan
% w = ukuran jendela
% c = nilai konstan
% g = variabel citra keluaran
if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrosesan citra
[m, n] = size(f);
delta = floor(w/2);
if c < 0
g = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
g = ones(m, n); % Diasumsikan berlatarbelakang 1
end
f=double(f);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + f(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
rerata = floor(rerata / jum) - c;
if f(y,x) >= rerata
g(y, x) = 1;
else
g(y, x) = 0;
end
end
end
end %akhir fungsi
f = imread('c:\image\andri 2.jpg');
g = adapmean(f, 2, 0);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=2 dan c=0')
f = imread('c:\image\hotmaabuku.png');
g = adapmean(f, 2, 0);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=2 dan c=0')
f = imread('c:\image\maryamah.png');
g = adapmean(f, 13, 15);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=13 dan c=15')
program segmentasi warna denga fungsi
===========================
function [RGB] = segwarna(nama_file)
% SEGWARNA Digunakan untuk melakukan segmentasi citra
% berdasarkan warna
% F = citra berwarna
% Keluaran:
% G = citra berwarna yang telah disegmentasi
Img = imread(nama_file);
[tinggi, lebar, dim] = size(Img);
if dim < 3
error('Masukan harus berupa citra berwarna');
end
% Konversi ke HVS
[H,S,L] = RGBkeHSL(Img(:,:,1),Img(:,:,2),Img(:,:,3));
for y=1: tinggi
for x=1: lebar
h = H(y,x);
% Ubah warna
if h < 11
h = 0;
elseif h < 32
h = 21;
elseif h < 54
h = 43;
elseif h < 116
h = 85;
elseif h < 141
h = 128;
elseif h < 185
h = 170;
elseif h < 202
h = 191;
elseif h < 223
h = 213;
elseif h < 244
h = 234;
else
h = 0;
end
% Ubah komponen H
H(y,x) = h;
% Ubah komponen S
if S(y,x) >= 200
S(y,x) = 255;
elseif S(y,x) <= 20
S(y,x) = 0;
else
S(y,x) = 128;
end
% Ubah komponen L
if L(y,x) >= 200
L(y,x) = 255;
elseif L(y,x) <= 20
L(y,x) = 0;
else
L(y,x) = 128;
end
end
end
[R, G, B] = HSLkeRGB(H, S, L);
RGB(:,:,1) = R;
RGB(:,:,2) = G;
RGB(:,:,3) = B;
return
end %akhir fungsi
G = segwarna('C:\Image\andri4.jpg'); imshow(G)
Program tanda tangan kontur dengan fungsi
==========================================
function [Jarak] = tandatangan(BW)
% TANDATANGAN Digunakan untuk memperoleh jarak-jarak antara
% piksel dalam batas objek dri citra biner BW
% Keluaran: Jarak - Berisi sejumlah pasangan Y, X
% yang menyatakan jarak
[m,n] = size(BW);
Batas = double(BW);
[jum, z] = size(Batas);
[pusat_x, pusat_y] = centroid(BW);
Jarak = zeros(1,m);
for p=1 : jum
Jarak(p) = sqrt((Batas(p,1)-pusat_y)^2 + ...
(Batas(p,2)-pusat_x)^2);
end
% Plot jarak
X = 1: p;
plot(X, Jarak);
end %akhir fungsi
img =imread('C:\Image\ikan-1.png');
jarak = tandatangan(img, 0.5);
function [G] = fiturFourier(F, n)
% FITURFOURIER Memperoleh fitur Fourier sebanyak n buah.
% Masukan:
% F : Deskriptor Fourier yang lengkap
% n : Jumlah fitur yang dikehendaki
% Keluaran:
% G : Deskriptor Fourier sebanyak n buah
jum = length(F);
if jum > n
K1 = fftshift(F);
delta = round((jum-n) / 2);
K2 = K1(1 + delta : n+delta);
G = ifftshift(K2);
else
G = F;
end
end %akhir fungsi
F=imread('c:\image\ikan-5.png')
G = fiturFourier(F, 20);
imshow(G)
function [G] = plotFD(F)
% PLOTFD Menampilkan kontur berdasarkan deskriptor Fourier.
% Masukan: F = Deskriptor Fourier
jum = length(F);
if jum > 0
G = ifft(F); % Transformasi balik
G = [G; G(1)]; % Tambahkan elemen pertama
plot(G);
axis off;
end
end %akhir fungsi
F=imread('c:\image\ikan-1.png');
G=plotFD(F) ;
imshow(G)
function [F] = perolehFD(Kontur)
% PEROLEHFD Memperoleh deskriptor Fourier berdasarkan
% kontur suatu bentuk.
% Masukan: Kontur = kontur objek
% Keluaran: F = deskriptor Fourier
jum = length(Kontur);
% Atur supaya jumlah elemen genap
if rem(jum, 2) == 1
Kontur = [Kontur; Kontur(1,:)];
end
% Peroleh bentuk Fourier kontur
K = Kontur(:, 2) - i * Kontur(:,1);
F = fft(K);
end %akhir fungsi
Img = im2bw(imread('C:\Image\ikan-5.png'), 0.5);
Kontur = inbound_tracing(Img);
F = perolehFD(Kontur);
length(F)
[m,n]=size(Img); m * n
function [] = amatiFD(berkas)
% AMATIFD Digunakan untuk mengamati deskriptor Fourier
% yang telah dinormalisasi.
Img = im2bw(imread(berkas),0.5);
K = inbound_tracing(Img);
F = perolehFD(K);
G = fiturFourier(F,30);
H = normalisasiFD(G);
bar(H);
end %akhir fungsi
amatiFD('C:\Image\guppi-1.png');
================================================================
function [g] = ambang(f, t)
% fungsi ambang Menentukan nilai ambang yang digunakan
% untuk melakukan pengambangan
% f = Citra Masukan berskala keabuan
% t = nilai ambang
% Keluaran: g = citra biner
[m, n] = size(f);
for i=1 : m
for j=1:n
if f(i,j) <= t
g(i,j) = 0;
else
g(i,j) = 1;
end
end
end
end %akhir fungsi
f = imread('c:\image\andri 2.jpg');
g = ambang(f, 100);
subplot(1,2,1);imshow(f)
subplot(1,2,2);imshow(1-g)
f = imread('c:\image\aan.png');
g = ambang(f, 100);
subplot(1,2,1);imshow(f),title('citra Masukan')
subplot(1,2,2);imshow(1-g),title('citra Keluaran')
f = imread('c:\image\aa.jpg');
g = ambang(f, 100);
subplot(1,2,1);imshow(f),title('citra Masukan')
subplot(1,2,2);imshow(1-g),title('citra Keluaran')
Program pengambangan aras jamak dengan fungsi sudah di modif
================================================
function [g] = arasjamak(f, t1, t2)
% Pengambanan dengan dua nilai ambang
% f = Citra berskala keabuan
% t1 = nilai ambang bawah
% t2 = nilai ambang atas
% Masukan : f = citra biner
% Keluaran: g = citra biner
[m, n] = size(f);
for i=1 : m
for j=1:n
if f(i,j) <= t1 || f(i,j) >= t2
g(i,j) = 0;
else
g(i,j) = 1;
end
end
end
end %akhir fungsi
f = imread('c:\image\benda.png');
g = arasjamak(f, 50, 100);
subplot(1,2,1);imshow(f), title('citra masukan')
subplot(1,2,2);imshow(g), title('citra keluaran dengan t1=50 dan t2=100')
Program pengambangan adaftif dengan fungsi sudah dimodif
======================================================
function [g] = adapmean(f, w, c)
% adapmean Melakukan pengambangan adaptif dengan menggunakan mean.
% f = variabel Citra masukan berskala keabuan
% w = ukuran jendela
% c = nilai konstan
% g = variabel citra keluaran
if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrosesan citra
[m, n] = size(f);
delta = floor(w/2);
if c < 0
g = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
g = ones(m, n); % Diasumsikan berlatarbelakang 1
end
f=double(f);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + f(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
rerata = floor(rerata / jum) - c;
if f(y,x) >= rerata
g(y, x) = 1;
else
g(y, x) = 0;
end
end
end
end %akhir fungsi
f = imread('c:\image\andri 2.jpg');
g = adapmean(f, 2, 0);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=2 dan c=0')
f = imread('c:\image\hotmaabuku.png');
g = adapmean(f, 2, 0);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=2 dan c=0')
f = imread('c:\image\maryamah.png');
g = adapmean(f, 13, 15);
subplot(1,2,1);imshow(f) , title('citra masukan')
subplot(1,2,2);imshow(g) , title('citra keluaran dengan w=13 dan c=15')
program segmentasi warna denga fungsi
===========================
function [RGB] = segwarna(nama_file)
% SEGWARNA Digunakan untuk melakukan segmentasi citra
% berdasarkan warna
% F = citra berwarna
% Keluaran:
% G = citra berwarna yang telah disegmentasi
Img = imread(nama_file);
[tinggi, lebar, dim] = size(Img);
if dim < 3
error('Masukan harus berupa citra berwarna');
end
% Konversi ke HVS
[H,S,L] = RGBkeHSL(Img(:,:,1),Img(:,:,2),Img(:,:,3));
for y=1: tinggi
for x=1: lebar
h = H(y,x);
% Ubah warna
if h < 11
h = 0;
elseif h < 32
h = 21;
elseif h < 54
h = 43;
elseif h < 116
h = 85;
elseif h < 141
h = 128;
elseif h < 185
h = 170;
elseif h < 202
h = 191;
elseif h < 223
h = 213;
elseif h < 244
h = 234;
else
h = 0;
end
% Ubah komponen H
H(y,x) = h;
% Ubah komponen S
if S(y,x) >= 200
S(y,x) = 255;
elseif S(y,x) <= 20
S(y,x) = 0;
else
S(y,x) = 128;
end
% Ubah komponen L
if L(y,x) >= 200
L(y,x) = 255;
elseif L(y,x) <= 20
L(y,x) = 0;
else
L(y,x) = 128;
end
end
end
[R, G, B] = HSLkeRGB(H, S, L);
RGB(:,:,1) = R;
RGB(:,:,2) = G;
RGB(:,:,3) = B;
return
end %akhir fungsi
G = segwarna('C:\Image\andri4.jpg'); imshow(G)
Program tanda tangan kontur dengan fungsi
==========================================
function [Jarak] = tandatangan(BW)
% TANDATANGAN Digunakan untuk memperoleh jarak-jarak antara
% piksel dalam batas objek dri citra biner BW
% Keluaran: Jarak - Berisi sejumlah pasangan Y, X
% yang menyatakan jarak
[m,n] = size(BW);
Batas = double(BW);
[jum, z] = size(Batas);
[pusat_x, pusat_y] = centroid(BW);
Jarak = zeros(1,m);
for p=1 : jum
Jarak(p) = sqrt((Batas(p,1)-pusat_y)^2 + ...
(Batas(p,2)-pusat_x)^2);
end
% Plot jarak
X = 1: p;
plot(X, Jarak);
end %akhir fungsi
img =imread('C:\Image\ikan-1.png');
jarak = tandatangan(img, 0.5);
function [G] = fiturFourier(F, n)
% FITURFOURIER Memperoleh fitur Fourier sebanyak n buah.
% Masukan:
% F : Deskriptor Fourier yang lengkap
% n : Jumlah fitur yang dikehendaki
% Keluaran:
% G : Deskriptor Fourier sebanyak n buah
jum = length(F);
if jum > n
K1 = fftshift(F);
delta = round((jum-n) / 2);
K2 = K1(1 + delta : n+delta);
G = ifftshift(K2);
else
G = F;
end
end %akhir fungsi
F=imread('c:\image\ikan-5.png')
G = fiturFourier(F, 20);
imshow(G)
function [G] = plotFD(F)
% PLOTFD Menampilkan kontur berdasarkan deskriptor Fourier.
% Masukan: F = Deskriptor Fourier
jum = length(F);
if jum > 0
G = ifft(F); % Transformasi balik
G = [G; G(1)]; % Tambahkan elemen pertama
plot(G);
axis off;
end
end %akhir fungsi
F=imread('c:\image\ikan-1.png');
G=plotFD(F) ;
imshow(G)
function [F] = perolehFD(Kontur)
% PEROLEHFD Memperoleh deskriptor Fourier berdasarkan
% kontur suatu bentuk.
% Masukan: Kontur = kontur objek
% Keluaran: F = deskriptor Fourier
jum = length(Kontur);
% Atur supaya jumlah elemen genap
if rem(jum, 2) == 1
Kontur = [Kontur; Kontur(1,:)];
end
% Peroleh bentuk Fourier kontur
K = Kontur(:, 2) - i * Kontur(:,1);
F = fft(K);
end %akhir fungsi
Img = im2bw(imread('C:\Image\ikan-5.png'), 0.5);
Kontur = inbound_tracing(Img);
F = perolehFD(Kontur);
length(F)
[m,n]=size(Img); m * n
function [] = amatiFD(berkas)
% AMATIFD Digunakan untuk mengamati deskriptor Fourier
% yang telah dinormalisasi.
Img = im2bw(imread(berkas),0.5);
K = inbound_tracing(Img);
F = perolehFD(K);
G = fiturFourier(F,30);
H = normalisasiFD(G);
bar(H);
end %akhir fungsi
amatiFD('C:\Image\guppi-1.png');
Salah satu hasil dari coding di atas adalah :
Terima Kasih dan Semangat Belajar
Tidak ada komentar:
Posting Komentar