77
Lampiran 1. Fungsi Menu Utama
function varargout = menu_utm(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @menu_utm_OpeningFcn, ... 'gui_OutputFcn', @menu_utm_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 function menu_utm_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; movegui(gcf, 'center'); guidata(hObject, handles); function varargout = menu_utm_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btnProsesPenyisipan_Callback(hObject, eventdata, handles) figure(prosesPenyisipan); function btnProsesEkstraksi_Callback(hObject, eventdata, handles) figure(prosesEkstraksi); function btnHitungMSE_Callback(hObject, eventdata, handles)
Universitas Sumatera Utara
78
figure (hitungMSE); function btnHitungMSE_CreateFcn(hObject, eventdata, handles) function btnKeluar_Callback(hObject, eventdata, handles) close all;
Universitas Sumatera Utara
79
Lampiran 2. Fungsi Enkripsi dan Encoding
function varargout = prosesPenyisipan(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @prosesPenyisipan_OpeningFcn, ... 'gui_OutputFcn', @prosesPenyisipan_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 function prosesPenyisipan_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); btnClear_Callback(handles) function varargout = prosesPenyisipan_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btnClear_Callback(handles) axes(handles.picCitraCover); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); axes(handles.picCitraStego); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); set(handles.txtPesanRahasia,'String',''); set(handles.txtKataKunciPertama,'String','');
Universitas Sumatera Utara
80
set(handles.txtKataKunciKedua,'String',''); set(handles.txtKataKunciKetiga,'String',''); set(handles.lblNamaFile,'String',''); clearvars -global; function btnPilihCitraCover_Callback(hObject, eventdata, handles) [fileGambar, folderGambar] = uigetfile('*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover'); if isequal(fileGambar,0) return; end axes(handles.picCitraStego); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); global gmbInput namaFile pathGambar = [folderGambar fileGambar]; axes(handles.picCitraCover) cla(gca, 'reset'); imshow(pathGambar); drawnow; tmpImg = imread(pathGambar); gmbInput = tmpImg; set(handles.lblNamaFile,'String',fileGambar(1:length(fi leGambar)-4)); namaFile = fileGambar; function txtPesanRahasia_Callback(hObject, eventdata, handles) function txtPesanRahasia_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
Universitas Sumatera Utara
81
function txtKataKunciPertama_Callback(hObject, eventdata, handles) function txtKataKunciPertama_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function txtKataKunciKedua_Callback(hObject, eventdata, handles) function txtKataKunciKedua_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function txtKataKunciKetiga_Callback(hObject, eventdata, handles) function txtKataKunciKetiga_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btnProsesPenyisipan_Callback(hObject, eventdata, handles) global gmbInput gmbOutput if (isempty(gmbInput)) message = sprintf('Pilih citra cover terlebih dahulu!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtPesanRahasia,'String'))) message = sprintf('Masukkan pesan rahasia!'); uiwait(msgbox(message)); return
Universitas Sumatera Utara
82
end if (isempty(get(handles.txtKataKunciPertama,'String'))) message = sprintf('Masukkan kata kunci pertama!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtKataKunciKedua,'String'))) message = sprintf('Masukkan kata kunci kedua!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtKataKunciKetiga,'String'))) message = sprintf('Masukkan kata kunci ketiga!'); uiwait(msgbox(message)); return end filterGmbInput = gmbInput; filterGmbInput(filterGmbInput bin2dec('00011110'); filterGmbInput(filterGmbInput bin2dec('00111110'); filterGmbInput(filterGmbInput bin2dec('01111110'); filterGmbInput(filterGmbInput bin2dec('11111110');
== bin2dec('00011111')) = == bin2dec('00111111')) = == bin2dec('01111111')) = == bin2dec('11111111')) =
[gmbOutput] = MLSB(true, filterGmbInput, get(handles.txtPesanRahasia,'String'), ... get(handles.txtKataKunciPertama,'String'), ... get(handles.txtKataKunciKedua,'String'), ... get(handles.txtKataKunciKetiga,'String')); if ~isempty(gmbOutput) axes(handles.picCitraStego) cla(gca, 'reset'); imshow(gmbOutput); drawnow; message = sprintf('Proses Penyisipan Berhasil'); uiwait(msgbox(message)); end function btnSimpanCitraStego_Callback(hObject, eventdata, handles)
Universitas Sumatera Utara
83
global namaFile gmbOutput if (isempty(gmbOutput)) message = sprintf('Lakukan proses penyisipan terlebih dahulu!'); uiwait(msgbox(message)); return end nama = namaFile(1:strfind(namaFile, '.')-1); ekstensi = namaFile(strfind(namaFile, '.'):end); [fileGambar, folderGambar] = uiputfile([nama '_Stego' ekstensi],'Save file name'); if ~isequal(fileGambar, 0) pathGambar = [folderGambar fileGambar]; imwrite(gmbOutput, pathGambar); end
Universitas Sumatera Utara
84
Lampiran 3. Fungsi Decoding dan Dekripsi
function varargout = prosesEkstraksi(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @prosesEkstraksi_OpeningFcn, ... 'gui_OutputFcn', @prosesEkstraksi_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 function prosesEkstraksi_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); btnClear_Callback(handles) function varargout = prosesEkstraksi_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btnClear_Callback(handles) axes(handles.picCitraStego); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); set(handles.txtKataKunciPertama,'String',''); set(handles.txtKataKunciKedua,'String',''); set(handles.txtKataKunciKetiga,'String',''); set(handles.lblNamaFile,'String',''); set(handles.txtPesanRahasia,'String','');
Universitas Sumatera Utara
85
clearvars -global; function btnCitraStego_Callback(hObject, eventdata, handles) [fileGambar, folderGambar] = uigetfile('*.pgm;*.png;*.tif;*.bmp','Pilih Citra Stego'); if isequal(fileGambar,0) return; end set(handles.txtPesanRahasia,'String',''); global gmbInput namaFile pathGambar = [folderGambar fileGambar]; axes(handles.picCitraStego) cla(gca, 'reset'); imshow(pathGambar); drawnow; tmpImg = imread(pathGambar); gmbInput = tmpImg; set(handles.lblNamaFile,'String',fileGambar(1:length(fi leGambar)-4)); namaFile = fileGambar; function txtKataKunciPertama_Callback(hObject, eventdata, handles) function txtKataKunciPertama_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function txtKataKunciKedua_Callback(hObject, eventdata, handles) function txtKataKunciKedua_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
Universitas Sumatera Utara
86
set(hObject,'BackgroundColor','white'); end function txtKataKunciKetiga_Callback(hObject, eventdata, handles) function txtKataKunciKetiga_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function txtPesanRahasia_Callback(hObject, eventdata, handles) function txtPesanRahasia_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function btnProsesEkstraksi_Callback(hObject, eventdata, handles) global gmbInput if (isempty(gmbInput)) message = sprintf('Pilih citra stego terlebih dahulu!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtKataKunciPertama,'String'))) message = sprintf('Masukkan kata kunci pertama!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtKataKunciKedua,'String'))) message = sprintf('Masukkan kata kunci kedua!'); uiwait(msgbox(message)); return end if (isempty(get(handles.txtKataKunciKetiga,'String')))
Universitas Sumatera Utara
87
message = sprintf('Masukkan kata kunci ketiga!'); uiwait(msgbox(message)); return end [pesan] = MLSB(false, gmbInput, '', ... get(handles.txtKataKunciPertama,'String'), ... get(handles.txtKataKunciKedua,'String'), ... get(handles.txtKataKunciKetiga,'String')); if ~isempty(pesan) %Tampilkan pada layar set(handles.txtPesanRahasia,'String',pesan); message = sprintf('Proses Ekstraksi Berhasil'); uiwait(msgbox(message)); end
Universitas Sumatera Utara
88
Lampiran 4. Fungsi Means Square Error (MSE)
function varargout = hitungMSE(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @hitungMSE_OpeningFcn, ... 'gui_OutputFcn', @hitungMSE_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 function hitungMSE_OpeningFcn(hObject, eventdata, handles, varargin) guidata(hObject, handles); btnClear_Callback(handles) function varargout = hitungMSE_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function btnClear_Callback(handles) axes(handles.picCitraCover); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); axes(handles.picCitraStego); cla(gca, 'reset'); set(gca,'XTick',[],'YTick',[]); set(handles.lblNamaFileCitraCover,'String',''); set(handles.lblNamaFileCitraStego,'String',''); set(handles.lblMSE,'String',''); clearvars -global;
Universitas Sumatera Utara
89
function btnPilihCitraCover_Callback(hObject, eventdata, handles) [fileGambar, folderGambar] = uigetfile('*.jpg;*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover'); if isequal(fileGambar,0) return; end global gmbInput pathGambar = [folderGambar fileGambar]; axes(handles.picCitraCover) cla(gca, 'reset'); imshow(pathGambar); drawnow; tmpImg = imread(pathGambar); gmbInput = tmpImg; set(handles.lblNamaFileCitraCover,'String',fileGambar(1 :length(fileGambar)-4)); function btnPilihCitraStego_Callback(hObject, eventdata, handles) [fileGambar, folderGambar] = uigetfile('*.jpg;*.pgm;*.png;*.tif;*.bmp','Pilih Citra Cover'); if isequal(fileGambar,0) return; end global gmbOutput pathGambar = [folderGambar fileGambar]; axes(handles.picCitraStego) cla(gca, 'reset'); imshow(pathGambar); drawnow; tmpImg = imread(pathGambar); gmbOutput = tmpImg; %Tampilkan nama file
Universitas Sumatera Utara
90
set(handles.lblNamaFileCitraStego,'String',fileGambar(1 :length(fileGambar)-4)); function btnHitungMSE_Callback(hObject, eventdata, handles) global gmbInput gmbOutput if (isempty(gmbInput)) message = sprintf('Pilih citra cover terlebih dahulu!'); uiwait(msgbox(message)); return end if (isempty(gmbOutput)) message = sprintf('Pilih citra stego terlebih dahulu!'); uiwait(msgbox(message)); return end if length(size(gmbInput)) ~= length(size(gmbOutput)) message = sprintf('Ukuran citra tidak sama!'); uiwait(msgbox(message)); return end for i = 1 : length(size(gmbInput)) if size(gmbInput, i) ~= size(gmbOutput, i) message = sprintf('Ukuran citra tidak sama!'); uiwait(msgbox(message)); return end end for i = 1 : length(size(gmbInput)) tmpMSE = norm(double(gmbInput(:,:,i) gmbOutput(:,:,i))); mse = mse + (tmpMSE / (size(gmbInput, 1) * size(gmbInput, 2))); end set(handles.lblMSE,'String',['MSE = ' num2str(mse)]);
Universitas Sumatera Utara