Minggu, 27 Agustus 2017

Macam-Macam Noise Matlab

Ada banyak jenis noise yang dapat mempengaruhi kualitas citra, diantaranya adalah salt and pepper, gaussian, speckle, localvar dan poisson. Efek masing-masing noise tentunya berbeda-beda. Ada yang efeknya sangat mempengaruhi tampilan citra, tapi ada juga yang tidak begitu berpengaruh terhadap citra.






Salt & Peper

Seperti namanya noise jenis ini terlihat seperti salt and pepper. Pada citra akan nampak seperti titik-titik. Untuk citra RGB titik-titik muncul dalam tiga warna yakni merah (red), hijau (green) dan biru (blue), sedangkan pada citra GRAY noise akan muncul dalam dua warna yakni hitam (black) dan putih (white). Noise ini memberikan efek ”on dan off” pada pixel. Pada MatLab kita dapat mengatur ”konstanta” noise. Konstanta berupa angka numerik non negatif dengan range 0 sampai dengan 1. Makin besar konstantanya citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default untuk konstanta noise adalah 0.05.

Gaussian
Disebut juga Gaussian White Noise. Untuk menambahkan noise ini pada MatLab memerlukan input tambahan berupa rata-rata dan variasi. Rata-rata dan variasi merupakan suatu konstanta real. Nilainya bisa positif maupun negative. Makin besar rata-rata dan variasinya maka citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default adalah 0 untuk mean dan 0.01 untuk variance. Disebut white noise karena pada saat nilai rata-rata dan variasinya besar maka citra seolah-olah hanya terlihat seperti citra putih saja.

Poisson
Poisson noise bukan merupakan noise buatan. Poisson merupakan noise yang ditambahkan langsung pada citra tanpa kita menambahkan parameter apapun, sehingga efeknya pada citra pun tetap, berbeda dengan tipe noise yang sudah dijelaskan sebelumnya. Pada MatLab, jika matrik citra adalah double precision, maka nilai piksel inputnya dianggap sebagai mean dari distribusi Poisson dengan skala 10^12. Sebagai contoh jika piksel inputnya mempunyai nilai 5.5 10^-12, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 5.5 di kembalikan lagi ke skala 10^12. Jika matrik citra adalah single precision, maka factor skalanya menggunakan 10^6. Jika matrik citra adalah uint8 atau uint16, maka nilai input piksel digunakan langsung tanpa factor skala. Sebagai contoh jika input piksel uint8 mempunyai nilai 10, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 10.

Speckle
Speckle merupakan noise ganda. Noise ini ditambahkan pada citra menggunakan persamaan J=I+n*I, dimana n terdistribusi random seragam dengan mean 0 dan variance V. V adalah konstanta non negative yang besarnya dapat berubah-ubah. Default nilai untuk V adalah 0.04. Makin besar nilai V maka citra akan semakiin kabur.

Localvar
Pada MatLab kita harus mengunakan dua parameter untuk menambahkan noise ini pada citra. Dua parameter tersebut berupa vector yang ukurannya sama, dan grafik kedua parameter tersebut menggambarkan relasi fungsional antara varians noise dan intensitas citra. Vektor intensitas citra harus bernilai antara 0 dan 1 (normal). Localvar merupakan Gaussian noise dengan mean 0, dengan variance noise adalah fungsi dari intensitas citra yang nilainya berada dalam matrik citra. Vektor intensitas citra tidak boleh bernilai sama karena citra akan nampak sebagai layar putih (Gaussian White Noise).

Macam-macam Filter Image/Citra pada Matlab

Filter pada dasarnya adalah sebuah metode untuk meredamkan atau menghilangkan noise pada citra digital atau image. Jenis filter bermacam-macam dan fungsi serta efeknya juga berbeda-beda pula. Filter citra dibagi menjadi dua, yaitu filter linear dan filter non-linear. Filter spasial linear adalah filter yang bekerja dengan cara korelasi atau konvolusi. Filter spasial non-linier atau biasanya disebut juga dengan filter statistik berdasar urutan adalah filter yang respon nya didasarkan pada urutan atau rangking piksel yang ada dalam citra yang dicakup oleh area filter dengan menggantikan nilai dari piksel yang berada di tengah digantikan dengan nila hasil pengurutan atau perangkingan tersebut. Filter non-linear memiliki lebih banyak keunggulan dibandingkan dengan filter linear pada ukuran jendela filter yang sama.

Macam-macam filter spasial linear antara lain :

1. Filter Rata-rata
Penghalusan dengan filter rata-rata adalah proses filtering citra f(x,y) dengan filter rata-rata g(x,y) untuk berbagai ukuran filter, dari ukuran 3×3, 5×5, 7×7, 9×9, dan seterusnya.

2. Filter Gaussian
Penghalusan dengan filter gaussian tekniknya sama dengan filter rata-rata, yaitu filtering citra f(x,y) dengan filter gaussian g(x,y) untuk berbagai ukuran filter, dari ukuran 3×3, 5×5, 7×7, 9×9, dan seterusnya.

Macam-macam filter spasial non-linear antara lain :

1. Filter Median
Penghalusan dengan filter median adalah dengan menggantikan nilai tengah dari piksel yang di cakup oleh area filter dengan sebuah nilai tengah (median) setelah diurutkan terlebih dahulu dari yang terkecil ke yang terbesar.

2. Filter Maksimum
Penghalusan dengan filter median adalah menggantikan piksel dengan nilai tertinggi dari suatu deret yang terbentuk dari matriks yang sesuai dengan ukuran dari jendela filter.
3. Filter Minimum

Penghalusan dengan filter median adalah menggantikan piksel dengan nilai terendah dari suatu deret yang terbentuk dari matriks yang sesuai dengan ukuran dari jendela filter.





Contoh JST + Normalisasi code nya

function [gab] = Normalisasi( G)
u=66;
v=100;
max=u*v;
I=imresize(G,[u v]);
M=NR(I);
filter_khusus=fspecial('unsharp');
Q=imfilter(M,filter_khusus,'replicate');

red=Q(:,:,1);
A1= edge(red,'canny');
A=reshape(A1,1,max);

green=Q(:,:,2);
B1= edge(green,'canny');
B=reshape(B1,1,max);

blue=Q(:,:,3);
C1= edge(blue,'canny');
C=reshape(C1,1,max);

gab=[A,B,C];
end


function [ K ] = NR(I) %Noise Remover
%M = wiener2(V);
%N = medfilt2(J);
%O = imnoise(J,'gaussian');%pilih1
w=size(I,1);
h=size(I,2);
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);

JR=medfilt2(R);
JG=medfilt2(G);
JB=medfilt2(B);
        
J=[];
for i=1:w
    for j=1:h
        J(i,j,1)=JR(i,j);
        J(i,j,2)=JG(i,j);
        J(i,j,3)=JB(i,j);
    end
end    
K=uint8(J);
end



Perintah dan Pengujian JST 
I=imread('matang\1.jpg');
    U=Normalisasi(I);
    Data(1,:)=U;
I=imread('matang\2.jpg');
    U=Normalisasi(I);
    Data(2,:)=U;
I=imread('matang\3.jpg');
    U=Normalisasi(I);
    Data(3,:)=U;
I=imread('matang\4.jpg');
    U=Normalisasi(I);
    Data(4,:)=U;    
I=imread('matang\5.jpg');
    U=Normalisasi(I);
    Data(5,:)=U;
I=imread('matang\6.jpg');
    U=Normalisasi(I);
    Data(6,:)=U;
 I=imread('matang\7.jpg');
    U=Normalisasi(I);
    Data(7,:)=U;
 I=imread('matang\8.jpg');
    U=Normalisasi(I);
    Data(8,:)=U;   
 I=imread('matang\9.jpg');
    U=Normalisasi(I);
    Data(9,:)=U;  
 I=imread('matang\10.jpg');
    U=Normalisasi(I);
    Data(10,:)=U;
 I=imread('mentah\1.JPG');
    U=Normalisasi(I);
    Data(11,:)=U;
 I=imread('mentah\2.JPG');
    U=Normalisasi(I);
    Data(12,:)=U;
 I=imread('mentah\3.JPG');
    U=Normalisasi(I);
    Data(13,:)=U;
 I=imread('mentah\4.JPG');
    U=Normalisasi(I);
    Data(14,:)=U;   
 I=imread('mentah\5.JPG');
    U=Normalisasi(I);
    Data(15,:)=U;   
 I=imread('mentah\6.JPG');
    U=Normalisasi(I);
    Data(16,:)=U;
 I=imread('mentah\7.JPG');
    U=Normalisasi(I);
    Data(17,:)=U;   
 I=imread('mentah\8.JPG');
    U=Normalisasi(I);
    Data(18,:)=U;   
 I=imread('mentah\9.JPG');
    U=Normalisasi(I);
    Data(19,:)=U;
 I=imread('mentah\10.JPG');
    U=Normalisasi(I);
    Data(20,:)=U;   
 I=imread('ranum\1.jpg');
    U=Normalisasi(I);
    Data(21,:)=U;
 I=imread('ranum\2.jpg');
    U=Normalisasi(I);
    Data(22,:)=U;   
 I=imread('ranum\3.jpg');
    U=Normalisasi(I);
    Data(23,:)=U;   
 I=imread('ranum\4.jpg');
    U=Normalisasi(I);
    Data(24,:)=U;   
 I=imread('ranum\5.jpg');
    U=Normalisasi(I);
    Data(25,:)=U;
 I=imread('ranum\6.jpg');
    U=Normalisasi(I);
    Data(26,:)=U;   
 I=imread('ranum\7.jpg');
    U=Normalisasi(I);
    Data(27,:)=U;
 I=imread('ranum\8.jpg');
    U=Normalisasi(I);
    Data(28,:)=U;   
 I=imread('ranum\9.jpg');
    U=Normalisasi(I);
    Data(29,:)=U;
 I=imread('ranum\10.jpg');
    U=Normalisasi(I);
    Data(30,:)=U;   
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
Training=Data;
jummatang=10;    
jummentah=10;
jumranum=10;

jumdata=jummatang+jummentah+jumranum;    
t=linspace(0,1,jumdata)
Target=t;

save myTraining.mat Training;
save myTarget.mat Target;
%=====================================================================
Pengujian

load myTraining.mat;
load myTarget.mat;

data_latih=Training';
kelas_latih=Target;
    net = newff(minmax (double(data_latih)), [15,7,1], {'logsig','logsig','logsig'},'traincgf');
    net.performFcn='mse';%sse
    net.trainParam.mc=0.95;
    net.trainParam.epochs = 1000;
    net.trainParam.goal = 0.1;
    net.trainParam.lr = 0.001;
    net.trainParam.show = 100;

    [net_keluaran,tr,Y,E]=train(net,double(data_latih),double(kelas_latih));
    jumlah_iterasi=tr.num_epochs;
    nilai_keluaran=Y;
    nilai_error=E;
    error=0.5*sum(nilai_error.^2)

    %%PENGUJIAN
I=imread('ranum\3.jpg');
    dataUji=Normalisasi(I);
    Q=dataUji';
    kelas_uji=sim(net_keluaran,double(Q))
    
    c1=Target(1,10);
    c2=Target(1,20);
    c3=Target(1,30);
    
    hasil='Ranum';
    if kelas_uji <=c1
        hasil='Matang';
    elseif kelas_uji <=c2
        hasil='Mentah';
    end    
    
    disp(hasil);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    


1 komentar: