PENGAMBANGAN DAN EKSTRAKSI FITUR BENTUK DAN KONTUR - andyusuf-informatika

New Post

Minggu, 30 Juli 2017

PENGAMBANGAN DAN EKSTRAKSI FITUR BENTUK DAN KONTUR

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.


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



Salah satu hasil dari coding di atas adalah :


Terima Kasih dan Semangat Belajar

Tidak ada komentar:

Posting Komentar