Studi Informatika

Panduan Pembelajaran Ilmu Teknologi & Komputer

Sunday, July 30, 2017

PENGAMBANGAN DAN EKSTRAKSI FITUR BENTUK DAN KONTUR

Yang akan dibahas pada materi ini :

  • Pengambangan 
  • Ekstraksi fitur
  • Tanda-tangan Kontur
  • Deskriptor Fourier

Pembahasan materi di atas Insya Allah akan di update

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 :


Sunday, July 30, 2017 July 30, 2017 - tanpa komentar

No comments:

Post a Comment