Sunday, May 14, 2017

Cara Membuat GUI MATLAB Untuk STUDI KOMPARATIF DENOISING BERBASIS DWT DAN FFT




Semua event GUI MATLAB:
function varargout = denoising_adaptif_wavelet(varargin)
% DENOISING_ADAPTIF_WAVELET MATLAB code for denoising_adaptif_wavelet.fig
%      DENOISING_ADAPTIF_WAVELET, by itself, creates a new DENOISING_ADAPTIF_WAVELET or raises the existing
%      singleton*.
%
%      H = DENOISING_ADAPTIF_WAVELET returns the handle to a new DENOISING_ADAPTIF_WAVELET or the handle to
%      the existing singleton*.
%
%      DENOISING_ADAPTIF_WAVELET('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in DENOISING_ADAPTIF_WAVELET.M with the given input arguments.
%
%      DENOISING_ADAPTIF_WAVELET('Property','Value',...) creates a new DENOISING_ADAPTIF_WAVELET or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before denoising_adaptif_wavelet_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to denoising_adaptif_wavelet_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help denoising_adaptif_wavelet

% Last Modified by GUIDE v2.5 16-Apr-2017 07:01:36

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @denoising_adaptif_wavelet_OpeningFcn, ...
                   'gui_OutputFcn',  @denoising_adaptif_wavelet_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before denoising_adaptif_wavelet is made visible.
function denoising_adaptif_wavelet_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to denoising_adaptif_wavelet (see VARARGIN)

% Choose default command line output for denoising_adaptif_wavelet
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes denoising_adaptif_wavelet wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = denoising_adaptif_wavelet_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[namafile namapath]=uigetfile('*.jpg;*.bmp;*.jpeg;*.png;*.tif;*.tiff;','Pilih Sebuah Citra');
namacitra=[namapath namafile];

[baris, kolom, bnykKanal] = size(namacitra);

if(bnykKanal > 1)
    i = im2double(namacitra);
    a = .299*i(:,:,1) + .587*i(:,:,2) + .114*i(:,:,3);
    namacitra=a;
end


axes(handles.axes1)
imshow(namacitra);

axes(handles.axes3)
imhist(uint8(namacitra),128);

global I
I = getimage(handles.axes1);


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I
size(I)
switch get(handles.popupmenu1,'Value')
    case 1
       kabur = I;
    case 2
       H = fspecial('average',11);
       kabur = imfilter(I,H,'replicate');
    case 3
       H = fspecial('motion',20,45);
       kabur = imfilter(I,H,'replicate');
    case 4
       H = fspecial('disk',10);
       kabur = imfilter(I,H,'replicate');
    case 5
       H = fspecial('gaussian',[11 11], 10);
       kabur = imfilter(I,H,'replicate');
end

axes(handles.axes3)
imshow(uint8(kabur));
%axes(handles.axes3)
%imhist(uint8(kabur),128);

global I_kabur
I_kabur = getimage(handles.axes3);

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I_kabur
size(I_kabur)

% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

switch get(handles.popupmenu2,'Value')
    case 1
       derau = imnoise(I_kabur,'gaussian', 0,variansi);
    case 2
       derau = imnoise(I_kabur, 'poisson');
    case 3
       derau = imnoise(I_kabur,'salt & pepper',variansi);
    case 4
       derau = imnoise(I_kabur,'speckle',variansi);
end

axes(handles.axes3)
imshow(uint8(derau));
%axes(handles.axes3)
%imhist(uint8(derau),128);

global I_derau
I_derau = derau;

% --- Executes on button press in tapis inverse.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%global I_derau
%global I_kabur
global I

%kasus 1
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));
H1 = fspecial('average',11);
kabur1 = imfilter(I,H1,'replicate');
derau1 = imnoise(kabur1,'gaussian', 0,variansi);

% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));

% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau1,level,wavelet);

        %Universal Shrink (US)
        M=size(derau1,1)^2;
        US=variansi*sqrt(2*log(M))+ 0.01*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * M);
        set(handles.edit1, 'String', num2str(MSE1));




%kasus 2
H2 = fspecial('gaussian',[11 11], 10);
kabur2 = imfilter(I,H2,'replicate');
derau2 = imnoise(kabur2, 'poisson');
% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));

% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau2,level,wavelet);

        %Universal Shrink (US)
        M=size(derau2,1)^2;
        US=variansi*sqrt(2*log(M))+ 0.01*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE2 = sum(sum(error .* error)) / (M * M);
        set(handles.edit5, 'String', num2str(MSE2));


%kasus 3
H3 = fspecial('disk',10);
kabur3 = imfilter(I,H3,'replicate');
derau3 = imnoise(kabur3,'salt & pepper',variansi);
% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));


% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau3,level,wavelet);

        %Universal Shrink (US)
        M=size(derau3,1)^2;
        US=variansi*sqrt(2*log(M))+ 0.01*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE3 = sum(sum(error .* error)) / (M * M);
        set(handles.edit9, 'String', num2str(MSE3));


%kasus 4
H4 = fspecial('motion',20,45);
kabur4 = imfilter(I,H4,'replicate');
derau4 = imnoise(kabur4,'speckle',variansi);
% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));


% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau4,level,wavelet);

        %Universal Shrink (US)
        M=size(derau4,1)^2;
        US=variansi*sqrt(2*log(M))+ 0.01*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE4 = sum(sum(error .* error)) / (M * M);
        set(handles.edit13, 'String', num2str(MSE4));


MSE_US = [MSE1 MSE2 MSE3 MSE4];

global MSE_US

% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1


% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu2.
function popupmenu2_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu2


% --- Executes during object creation, after setting all properties.
function popupmenu2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

%kasus 1
H1 = fspecial('average',11);
kabur1 = imfilter(I,H1,'replicate');
derau1 = imnoise(kabur1,'gaussian', 0,variansi);
[M,N]=size(derau1);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau1,level,wavelet);

        %Visu Shrink (VS)
        N=size(derau1,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.75*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',VS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
   
        error = double(I) - citraBaru;
        MSE11 = sum(sum(error .* error)) / (M * N);
        set(handles.edit2, 'String', num2str(MSE11));


%kasus 2
H2 = fspecial('gaussian',[11 11], 10);
kabur2 = imfilter(I,H2,'replicate');
derau2 = imnoise(kabur2, 'poisson');
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = 0.01;

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau2,level,wavelet);

        %Visu Shrink (VS)
        N=size(derau2,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.75*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',VS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
   
        error = double(I) - citraBaru;
        MSE12 = sum(sum(error .* error)) / (M * N);
        set(handles.edit6, 'String', num2str(MSE12));


%kasus 3
H3 = fspecial('disk',10);
kabur3 = imfilter(I,H3,'replicate');
derau3 = imnoise(kabur3,'salt & pepper',variansi);
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau3,level,wavelet);

        %Visu Shrink (VS)
        N=size(derau3,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.75*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',VS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
   
        error = double(I) - citraBaru;
        MSE13 = sum(sum(error .* error)) / (M * N);
        set(handles.edit10, 'String', num2str(MSE13));


%kasus 4
H4 = fspecial('motion',20,45);
kabur4 = imfilter(I,H4,'replicate');
derau4 = imnoise(kabur4,'speckle',variansi);
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau4,level,wavelet);

        %Visu Shrink (VS)
        N=size(derau4,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.75*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',VS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
   
        error = double(I) - citraBaru;
        MSE14 = sum(sum(error .* error)) / (M * N);
        set(handles.edit14, 'String', num2str(MSE14));

MSE_VS = [MSE11 MSE12 MSE13 MSE14];

global MSE_VS


% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I
[M,N]=size(I);
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

%kasus 1
H1 = fspecial('average',11);
kabur1 = imfilter(I,H1,'replicate');
derau1 = imnoise(kabur1,'gaussian', 0,variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau1,level,wavelet);

        %Minimax Shrink (MS)
        N=size(derau1,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',MS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        error = double(I) - citraBaru;
     
        MSE21 = sum(sum(error .* error)) / (M * N);
        set(handles.edit3, 'String', num2str(MSE21));


%kasus 2
H2 = fspecial('gaussian',[11 11], 10);
kabur2 = imfilter(I,H2,'replicate');
derau2 = imnoise(kabur2, 'poisson');

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau2,level,wavelet);

        %Minimax Shrink (MS)
        N=size(derau2,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',MS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        error = double(I) - citraBaru;
     
        MSE22 = sum(sum(error .* error)) / (M * N);
        set(handles.edit7, 'String', num2str(MSE22));


%kasus 3
H3 = fspecial('disk',10);
kabur3 = imfilter(I,H3,'replicate');
derau3 = imnoise(kabur3,'salt & pepper',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau3,level,wavelet);

        %Minimax Shrink (MS)
        N=size(derau3,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',MS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE23 = sum(sum(error .* error)) / (M * N);
        set(handles.edit11, 'String', num2str(MSE23));

%kasus 4
H4 = fspecial('motion',20,45);
kabur4 = imfilter(I,H4,'replicate');
derau4 = imnoise(kabur4,'speckle',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));


        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau4,level,wavelet);

        %Minimax Shrink (MS)
        N=size(derau4,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',MS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);    
        error = double(I) - citraBaru;
     
        MSE24 = sum(sum(error .* error)) / (M * N);
        set(handles.edit15, 'String', num2str(MSE24));

MSE_MS = [MSE21 MSE22 MSE23 MSE24];

global MSE_MS


% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I
[M,N]=size(I);
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

%kasus 1
H1 = fspecial('average',11);
kabur1 = imfilter(I,H1,'replicate');
derau1 = imnoise(kabur1,'gaussian', 0,variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise_approksimasi(derau1, variansi, wavelet, level);    
        error = double(I) - citraBaru;
     
        MSE31 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit4, 'String', num2str(MSE31));


%kasus 2
H2 = fspecial('gaussian',[11 11], 10);
kabur2 = imfilter(I,H2,'replicate');
derau2 = imnoise(kabur2, 'poisson');

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise_approksimasi(derau2, variansi, wavelet, level);    
        error = double(I) - citraBaru;
     
        MSE32 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit8, 'String', num2str(MSE32));


%kasus 3
H3 = fspecial('disk',10);
kabur3 = imfilter(I,H3,'replicate');
derau3 = imnoise(kabur3,'salt & pepper',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise_approksimasi(derau3, variansi, wavelet, level);    
        error = double(I) - citraBaru;
     
        MSE33 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit12, 'String', num2str(MSE33));

%kasus 4
H4 = fspecial('motion',20,45);
kabur4 = imfilter(I,H4,'replicate');
derau4 = imnoise(kabur4,'speckle',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));


        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise_approksimasi(derau4, variansi, wavelet, level);    
        error = double(I) - citraBaru;
     
        MSE34 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit16, 'String', num2str(MSE34));


MSE_SS= [MSE31 MSE32 MSE33 MSE34];

global MSE_SS

% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit3_Callback(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
%        str2double(get(hObject,'String')) returns contents of edit3 as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit4_Callback(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text
%        str2double(get(hObject,'String')) returns contents of edit4 as a double


% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu4.
function popupmenu4_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu4 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu4


% --- Executes during object creation, after setting all properties.
function popupmenu4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu3.
function popupmenu3_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu3 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu3


% --- Executes during object creation, after setting all properties.
function popupmenu3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton14.
function pushbutton14_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton13.
function pushbutton13_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton12.
function pushbutton12_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit5_Callback(hObject, eventdata, handles)
% hObject    handle to edit5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit5 as text
%        str2double(get(hObject,'String')) returns contents of edit5 as a double


% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit6_Callback(hObject, eventdata, handles)
% hObject    handle to edit6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit6 as text
%        str2double(get(hObject,'String')) returns contents of edit6 as a double


% --- Executes during object creation, after setting all properties.
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit7_Callback(hObject, eventdata, handles)
% hObject    handle to edit7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text
%        str2double(get(hObject,'String')) returns contents of edit7 as a double


% --- Executes during object creation, after setting all properties.
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit8_Callback(hObject, eventdata, handles)
% hObject    handle to edit8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit8 as text
%        str2double(get(hObject,'String')) returns contents of edit8 as a double


% --- Executes during object creation, after setting all properties.
function edit8_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit9_Callback(hObject, eventdata, handles)
% hObject    handle to edit9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit9 as text
%        str2double(get(hObject,'String')) returns contents of edit9 as a double


% --- Executes during object creation, after setting all properties.
function edit9_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit10_Callback(hObject, eventdata, handles)
% hObject    handle to edit10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit10 as text
%        str2double(get(hObject,'String')) returns contents of edit10 as a double


% --- Executes during object creation, after setting all properties.
function edit10_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit11_Callback(hObject, eventdata, handles)
% hObject    handle to edit11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit11 as text
%        str2double(get(hObject,'String')) returns contents of edit11 as a double


% --- Executes during object creation, after setting all properties.
function edit11_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit12_Callback(hObject, eventdata, handles)
% hObject    handle to edit12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit12 as text
%        str2double(get(hObject,'String')) returns contents of edit12 as a double


% --- Executes during object creation, after setting all properties.
function edit12_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit13_Callback(hObject, eventdata, handles)
% hObject    handle to edit13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit13 as text
%        str2double(get(hObject,'String')) returns contents of edit13 as a double


% --- Executes during object creation, after setting all properties.
function edit13_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit14_Callback(hObject, eventdata, handles)
% hObject    handle to edit14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit14 as text
%        str2double(get(hObject,'String')) returns contents of edit14 as a double


% --- Executes during object creation, after setting all properties.
function edit14_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit15_Callback(hObject, eventdata, handles)
% hObject    handle to edit15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit15 as text
%        str2double(get(hObject,'String')) returns contents of edit15 as a double


% --- Executes during object creation, after setting all properties.
function edit15_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit16_Callback(hObject, eventdata, handles)
% hObject    handle to edit16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit16 as text
%        str2double(get(hObject,'String')) returns contents of edit16 as a double


% --- Executes during object creation, after setting all properties.
function edit16_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

cla(handles.axes1,'reset');
cla(handles.axes2,'reset');
cla(handles.axes3,'reset');
cla(handles.axes4,'reset');
cla(handles.axes5,'reset');

set(handles.edit1, 'String', num2str(0));
set(handles.edit2, 'String', num2str(0));
set(handles.edit3, 'String', num2str(0));
set(handles.edit4, 'String', num2str(0));

set(handles.edit5, 'String', num2str(0));
set(handles.edit6, 'String', num2str(0));
set(handles.edit7, 'String', num2str(0));
set(handles.edit8, 'String', num2str(0));

set(handles.edit9, 'String', num2str(0));
set(handles.edit10, 'String', num2str(0));
set(handles.edit11, 'String', num2str(0));
set(handles.edit12, 'String', num2str(0));

set(handles.edit13, 'String', num2str(0));
set(handles.edit14, 'String', num2str(0));
set(handles.edit15, 'String', num2str(0));
set(handles.edit16, 'String', num2str(0));

set(handles.edit18, 'String', num2str(0));

% --- Executes on button press in pushbutton16.
function pushbutton16_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

close(denoising_adaptif_wavelet);

% --- Executes when selected object is changed in uipanel4.
function uipanel4_SelectionChangeFcn(hObject, eventdata, handles)
% hObject    handle to the selected object in uipanel4
% eventdata  structure with the following fields (see UIBUTTONGROUP)
% EventName: string 'SelectionChanged' (read only)
% OldValue: handle of the previously selected object or empty if none was selected
% NewValue: handle of the currently selected object
% handles    structure with handles and user data (see GUIDATA)

global I_derau
global I
g = I_derau;
[N,M]=size(g);


     
switch get(eventdata.NewValue,'Tag') % Mendapatkan tag dari objek terseleksi
    case 'radiobutton1'
     
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);
     
        %Universal Shrink (US)
        M=size(g,1)^2;
        US=variansi*sqrt(2*log(M))

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        %softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit18, 'String', num2str(MSE1));

    case 'radiobutton2'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        %Visu Shrink (VS)
        N=size(g,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        %softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit18, 'String', num2str(MSE1));
     
    case 'radiobutton3'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        %Minimax Shrink (MS)
        N=size(g,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        %softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit18, 'String', num2str(MSE1));
     
     
    case 'radiobutton4'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        %[C,S]=wavedec2(g,level,wavelet);

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise(g, variansi, wavelet, level);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit18, 'String', num2str(MSE1));
     
     
    case 'radiobutton9'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(g,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        %softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
     
        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit18, 'String', num2str(MSE1));
end



function edit17_Callback(hObject, eventdata, handles)
% hObject    handle to edit17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit17 as text
%        str2double(get(hObject,'String')) returns contents of edit17 as a double


% --- Executes during object creation, after setting all properties.
function edit17_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on slider movement.
function slider2_Callback(hObject, eventdata, handles)
% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider


% --- Executes during object creation, after setting all properties.
function slider2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end



function edit18_Callback(hObject, eventdata, handles)
% hObject    handle to edit18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit18 as text
%        str2double(get(hObject,'String')) returns contents of edit18 as a double


% --- Executes during object creation, after setting all properties.
function edit18_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit19_Callback(hObject, eventdata, handles)
% hObject    handle to edit19 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit19 as text
%        str2double(get(hObject,'String')) returns contents of edit19 as a double


% --- Executes during object creation, after setting all properties.
function edit19_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit19 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit20_Callback(hObject, eventdata, handles)
% hObject    handle to edit20 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit20 as text
%        str2double(get(hObject,'String')) returns contents of edit20 as a double


% --- Executes during object creation, after setting all properties.
function edit20_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit20 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit21_Callback(hObject, eventdata, handles)
% hObject    handle to edit21 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit21 as text
%        str2double(get(hObject,'String')) returns contents of edit21 as a double


% --- Executes during object creation, after setting all properties.
function edit21_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit21 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit22_Callback(hObject, eventdata, handles)
% hObject    handle to edit22 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit22 as text
%        str2double(get(hObject,'String')) returns contents of edit22 as a double


% --- Executes during object creation, after setting all properties.
function edit22_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit22 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton17.
function pushbutton17_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


global MSE_US
global MSE_VS
global MSE_BS
global MSE_MS
global MSE_SS


axes(handles.axes5)
plot(MSE_US,'-.r*')
hold on
plot(MSE_VS,'--mo')
plot(MSE_MS,':bs')
plot(MSE_SS,'-kd')
plot(MSE_BS,'--kd')
hold off
legend('US','VS', 'MS', 'SS', 'BS');
title('Perbandingan MSE dari lima teknik ambang-batas adaptif');
axis([1 4 -1 10])


% --- Executes on button press in pushbutton18.
function pushbutton18_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Memuat citra
X=im2double(getimage(handles.axes3));

% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
%wavelet = 'bior3.7';
   
% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));
   
% Menghitung dekomposisi wavelet 2D multilevel
[C S] = wavedec2(X,level,wavelet);
   
% Mendefinisikan peta warna dan nilai skala
colormap gray;
rv = length(colormap);
   
% Menampilkan dekomposisi wavelet dengan mode square
axes(handles.axes2)
plotwavelet2(C,S,level,wavelet,rv,'square');
axis off;
title(['Dekomposisi pada level ',num2str(level)]);

%axes(handles.axes4)
%imshow(uint8(C(1,:)));


function editLevel_Callback(hObject, eventdata, handles)
% hObject    handle to editLevel (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of editLevel as text
%        str2double(get(hObject,'String')) returns contents of editLevel as a double


% --- Executes during object creation, after setting all properties.
function editLevel_CreateFcn(hObject, eventdata, handles)
% hObject    handle to editLevel (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes during object creation, after setting all properties.
function uipanel4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to uipanel4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called



function edit32_Callback(hObject, eventdata, handles)
% hObject    handle to edit32 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit32 as text
%        str2double(get(hObject,'String')) returns contents of edit32 as a double


% --- Executes during object creation, after setting all properties.
function edit32_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit32 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu5.
function popupmenu5_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu5 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu5


% --- Executes during object creation, after setting all properties.
function popupmenu5_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function editVariansi_Callback(hObject, eventdata, handles)
% hObject    handle to editVariansi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of editVariansi as text
%        str2double(get(hObject,'String')) returns contents of editVariansi as a double


% --- Executes during object creation, after setting all properties.
function editVariansi_CreateFcn(hObject, eventdata, handles)
% hObject    handle to editVariansi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes when selected object is changed in uipanel10.
function uipanel10_SelectionChangeFcn(hObject, eventdata, handles)
% hObject    handle to the selected object in uipanel10
% eventdata  structure with the following fields (see UIBUTTONGROUP)
% EventName: string 'SelectionChanged' (read only)
% OldValue: handle of the previously selected object or empty if none was selected
% NewValue: handle of the currently selected object
% handles    structure with handles and user data (see GUIDATA)

global I_derau
global I
g = I_derau;
[N,M]=size(g);

% Mendefinisikan level dekomposisi
level = str2double(get(handles.editLevel,'String'));

% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

% Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
switch get(eventdata.NewValue,'Tag') % Mendapatkan tag dari objek terseleksi
    case 'radiobutton20'
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        %Universal Shrink (US)
        M=size(g,1)^2;
        US=variansi*sqrt(2*log(M))+ 0.01*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'s',US), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',US)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit32, 'String', num2str(MSE1));

    case 'radiobutton21'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        %Visu Shrink (VS)
        N=size(g,1)^2;
        VS=variansi*sqrt(2*log(N*N)) + 0.75*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',VS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',VS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit32, 'String', num2str(MSE1));
     
    case 'radiobutton22'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        %Minimax Shrink (MS)
        N=size(g,1)^2;
        MS=0.394+0.264*log(N)+ 0.5*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',MS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',MS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / (M * N);
        set(handles.edit32, 'String', num2str(MSE1));
     
     
    case 'radiobutton23'
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        %[C,S]=wavedec2(g,level,wavelet);

        % Ambang-batas SURE Shrink (SS)
        citraBaru = NeighShrinkSUREdenoise_approksimasi(g, variansi, wavelet, level);

        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit32, 'String', num2str(MSE1));
     
  case 'radiobutton24'    
        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan variansi derau
        variansi = str2double(get(handles.editVariansi,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(g,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(g,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',SS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
     
        %Menampilkan hasil citra ambang-batas
        axes(handles.axes4)
        imagesc(citraBaru); axis off;
     
        error = double(I) - citraBaru;
     
        MSE1 = sum(sum(error .* error)) / ((M * N)*N);
        set(handles.edit32, 'String', num2str(MSE1));
end


% --------------------------------------------------------------------
function uipanel4_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to uipanel4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton19.
function pushbutton19_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton19 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global I
[M,N]=size(I);
% Mendefinisikan variansi derau
variansi = str2double(get(handles.editVariansi,'String'));

%kasus 1
H1 = fspecial('average',11);
kabur1 = imfilter(I,H1,'replicate');
derau1 = imnoise(kabur1,'gaussian', 0,variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau1,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(derau1,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',SS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        err = double(I) - citraBaru;
        MSE41 = sum(sum(err .* err)) / ((M * N)*N);
        set(handles.edit34, 'String', num2str(MSE41));


%kasus 2
H2 = fspecial('gaussian',[11 11], 10);
kabur2 = imfilter(I,H2,'replicate');
derau2 = imnoise(kabur2, 'poisson');

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau2,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(derau2,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',SS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        err = double(I) - citraBaru;
        MSE42 = sum(sum(err .* err)) / ((M * N)*N);
        set(handles.edit35, 'String', num2str(MSE42));



%kasus 3
H3 = fspecial('disk',10);
kabur3 = imfilter(I,H3,'replicate');
derau3 = imnoise(kabur3,'salt & pepper',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau3,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(derau3,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',SS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        err = double(I) - citraBaru;
        MSE43 = sum(sum(err .* err)) / ((M * N)*N);
        set(handles.edit36, 'String', num2str(MSE43));


%kasus 4
H4 = fspecial('motion',20,45);
kabur4 = imfilter(I,H4,'replicate');
derau4 = imnoise(kabur4,'speckle',variansi);

        % Mendefinisikan level dekomposisi
        level = str2double(get(handles.editLevel,'String'));

        % Mendefinisikan wavelet
        switch get(handles.popupmenu5,'Value')
           case 1
              wavelet = 'db4';
           case 2
              wavelet = 'db8';
           case 3
              wavelet = 'coif4';
           case 4
              wavelet = 'sym3';
           case 5
              wavelet = 'bior3.7';
        end
     
        %Melakukan dekomposisi wavelet
        [C,S]=wavedec2(derau4,level,wavelet);

        % Ambang-batas Bayes Shrink (SS)
        SS = bayesthf(derau4,variansi) + 0.25*max(C);

        %Ambang-batas halus
        %Hanya pada koefisien-koefisien aproksimasi
        %softC=[wthresh(C(1:S(1,1)^2),'h',SS), C(S(1,1)^2+1:length(C))];
     
        %Pada koefisien-koefisien detil
        softC=[C(1:S(1,1)^2), wthresh(C(S(1,1)^2+1:length(C)),'s',SS)];

        %Merekonstruksi citra dari koefisien-koefisien hasil ambang-batas
        citraBaru=waverec2(softC,S,wavelet);
        err = double(I) - citraBaru;
        MSE44 = sum(sum(err .* err)) / ((M * N)*N);
        set(handles.edit37, 'String', num2str(MSE44));


MSE_BS= [MSE41 MSE42 MSE43 MSE44];

global MSE_BS


function edit34_Callback(hObject, eventdata, handles)
% hObject    handle to edit34 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit34 as text
%        str2double(get(hObject,'String')) returns contents of edit34 as a double


% --- Executes during object creation, after setting all properties.
function edit34_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit34 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit35_Callback(hObject, eventdata, handles)
% hObject    handle to edit35 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit35 as text
%        str2double(get(hObject,'String')) returns contents of edit35 as a double


% --- Executes during object creation, after setting all properties.
function edit35_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit35 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit36_Callback(hObject, eventdata, handles)
% hObject    handle to edit36 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit36 as text
%        str2double(get(hObject,'String')) returns contents of edit36 as a double


% --- Executes during object creation, after setting all properties.
function edit36_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit36 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit37_Callback(hObject, eventdata, handles)
% hObject    handle to edit37 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit37 as text
%        str2double(get(hObject,'String')) returns contents of edit37 as a double


% --- Executes during object creation, after setting all properties.
function edit37_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit37 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --------------------------------------------------------------------
function denoising_fft_Callback(hObject, eventdata, handles)
% hObject    handle to denoising_fft (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

run denoising_adaptif_fft

No comments: