BAB IV HASIL DAN PEMBAHASAN
4.2. Penjelasan Program
Pembangkit kode morse dapat dilakukan dengan melakukan langkah seperti yang dijelaskan di atas. Tampilan program pembangkit kode morse dapat dilihat pada gambar 4.3. Pada tampilan pembangkit kode morse terdapat “transmit” dan “kata yang akan dikirim”. User dapat memulai pembangkit kode morse dengan menggetik perintah terlebih dahulu pada command window. User dapat memastikan terlebih dahulu apakah current directory sudah sesuai dengan tempat penyimpanan program sebelum mengetik perintah
global putih hitam
putih=single(ones(730,1360)); hitam=single(zeros(730,1360));
yang perlu dilakukan. Setelah sesuai dengan tempat penyimpanan program, user dapat memulai pembangkit kode morse dengan menggetik perintah “transmit” dan menekan
enter untuk menjalankan program. Setelah muncul perintah “kata yang akan dikirim”, user mengetik kata yang akan dikirim kemudian menekan enter. Hasil pembangkit kode morse yang ditampilkan adalah citra berupa cahaya kedap-kedip.
a. Tampilan Citra Berupa Cahaya Kedap-Kedip
Untuk menampilkan citra berupa cahaya kedap-kedip pada pembangkit kode morse, user dapat melakukan pembangkit kode morse dengan menjalankan proses. Proses tersebut diawali dengan menggunakan display putih dan hitam yang berupa matriks 1 dan matriks 0. Program yang digunakan untuk tampilan citra berupa cahaya kedap-kedip ditunjukan pada gambar 4.7.
Gambar 4.7. Program Tampilan Citra Berupa Cahaya Kedap-kedip b. Look up table kode morse
Look up table kode morse adalah proses pemberian kode karakter yang berguna untuk tampilan citra berupa cahaya kedap-kedip. Program look up table terlihat pada gambar 4.8.
Gambar 4.8. Program Look Up Table Kode Morse function mkode(huruf) switch huruf case 'A' pd;ss;pj; case 'B' pj;ss;pd;ss;pd;ss;pd; case 'C' pj;ss;pd;ss;pj;ss;pd; case 'D' pj;ss;pd;ss;pd; case 'E' pd;
Gambar 4.8. Lanjutan Program Look Up Table Kode Morse case 'F' pd;ss;pd;ss;pj;ss;pd; case 'G' pj;ss;pj;ss;pd; case 'H' pd;ss;pd;ss;pd;ss;pd; case 'I' pd;ss;pd; case 'J' pd;ss;pj;ss;pj;ss;pj; case 'K' pj;ss;pd;ss;pj; case 'L' pd;ss;pj;ss;pd;ss;pd; case 'M' pj;ss;pj; case 'N' pj;ss;pd; case 'O' pj;ss;pj;ss;pj; case 'P' pd;ss;pj;ss;pj;ss;pd; case 'Q' pj;ss;pj;ss;pd;ss;pj; case 'R' pd;ss;pj;ss;pd; case 'S' pd;ss;pd;ss;pd; case 'T' pj; case 'U' pd;ss;pd;ss;pj; case 'V' pd;ss;pd;ss;pd;ss;pj; case 'W' pd;ss;pj;ss;pj; case 'X' pj;ss;pd;ss;pd;ss;pj; case 'Y' pj;ss;pd;ss;pj;ss;pj; case 'Z' pj;ss;pj;ss;pd;ss;pd; end
Proses look up table merupakan kode karakter yang berupa kode morse. Dalam prosesnya, kode karakter terdiri dari karakter pj sebagai panjang, pd sebagai pendek, ss sebagai spasi sinyal, sh sebagai spasi huruf dan sk sebagai spasi kata. Karakter yang terdapat pada look up table merupakan kode morse sebagai penampil pada citra berupa cahaya kedap-kedip. Tampilan citra berupa cahaya kedap-kedip, sedangkan karakter pj dan pd sebagai penampil putih dan karakter ss dan sh sebagai penampil hitam. Program tersebut tampak pada gambar 4.9.
Gambar 4.9. Program Kode Karakter
% ===============================================
function pj
% Menampilkan window putih 3 detik
global putih imshow(putih); pause(3); % =============================================== function pd
% Menampilkan window putih 1 detik
global putih imshow(putih); pause(1); % =============================================== function ss
% Menampilkan window hitam 1 detik % (spasi antar sinyal)
global hitam imshow(hitam); pause(1); % =============================================== function sh
% Menampilkan window hitam 3 detik % (spasi antar huruf)
global hitam imshow(hitam); pause(3);
Gambar 4.9. Lanjutan Program Kode Karakter
Program tersebut memiliki karakter dengan fungsinya masing-masing. Karakter pj menampilkan citra berupa putih dengan waktu 3 detik, karakter pd menampilkan citra berupa putih dengan waktu 1 detik, karakter ss menampilkan citra berupa cahaya kedap-kedip berupa hitam dengan waktu 1 detik, karakter sh menampilkan citra berupa cahaya kedap-kedip berupa hitam 3 detik, dan karakter sk menampilkan citra berupa cahaya kedap-kedip berupa hitam 7 detik.
4.2.2. Pengenalan kode morse
Pengenalan kode morse dapat dilakukan dengan melakukan berbagai langkah seperti yang telah dijelaskan pada 4.1. Tampilan program pengenalan kode morse dapat dilihat pada gambar 4.4. Pada tampilan pengenalan kode morse terdapat 2 axes, 3 push button, dan 1 static text. User dapat memulai pengenalan kode morse dengan menekan
tombol “TERIMA”. Hasil pengenalan kode morse yang ditampilkan berupa kamera, sinyal
biner, dan kata yang berasil dikenali. User dapat mengulang pengenalan kode morse dengan menekan tombol “RESET” dan mengakhiri pengenalan kode morse dengan menekan tombol “SELESAI” seperti yang telah dijelaskan di 4.1.
a. Tombol “TERIMA”
Tombol “TERIMA” ini adalah tombol yang berfungsi untuk melakukan
pengenalan kode morse. User dapat melakukan pengenalan kode morse dengan
menakan tombol tersebut. Tombol “TERIMA” memulai pengenalan kode morse
dengan menjalankan beberapa subproses. Subproses yang dijalankan dimulai dari rekaman kode morse, preprosesing, decoding, dan penentuan hasil pengenalan
% ===============================================
function sk
% Menampilkan window hitam 7 detik % (spasi antar kata)
global hitam imshow(hitam); pause(7);
kode morse. Program yang digunakan untuk rekaman kode morse terlihat pada gambar 4.10.
Gambar 4.10. Program Rekaman Kode Morse
Perintah rekaman kode morse pada matlab menggunakan videoinput. Hal tersebut dilakukan untuk memulai perintah inisialisasi sesuai nama adaptornya yaitu “winvideo”. Resolusi kamera yang digunakan adalah 320 x 240. Setelah inisialisasi webcam berhasil, pengambilan gambar dilakukan dengan perintah
“getsnapshot”. Kode morse yang telah terekam tersebut ditampilkan pada program pengenalan menggunakan perintah “axes” yang telah tersedia di dalam tampilan program penegenalan kode morse.
Proses preprosesing terdiri dari beberapa bagian program yang digabungkan. Program-program tersebut adalah program penentuan koordinat autocropping, ekstrak frame, RGB ke Gray, average filtering, downsampling,
vid1 = videoinput('winvideo',1, 'YUY2_320x240');
set(vid1, 'FramesPerTrigger', Inf);
set(vid1, 'ReturnedColorspace', 'rgb');
vid1.FrameGrabInterval = 1;% distance between captured
frames
start(vid1)
aviObject1 = avifile('morse700abc.avi'); % Create a new
AVI file
for iFrame = 1:900 % Capture 900 frames
% ...
% You would capture a single image I from your webcam here
% ...
I=getsnapshot(vid1); axes(handles.axes1) imshow(I);
F = im2frame(I); % Convert I to a movie frame
aviObject1 = addframe(aviObject1,F); % Add the frame to
the AVI file
end
aviObject1 = close(aviObject1); % Close the AVI file
stop(vid1); flushdata(vid1);
dan thresholding. Sebelum melakukan program preprosesing, proses program baca file avi yang telah direkam dilakukan terlebih dahulu.
Kode morse yang telah terekam dan tersimpan dipanggil kembali menggunakan perintah mmreader untuk melanjutkan ke preprosesing. Pada proses preprosesing, proses penentuan koordinat autocropping berfungsi untuk memotong bagian citra yang tidak memiliki informasi. Program penentuan koordinat autocropping dapat terlihat pada gambar 4.11.
Gambar 4.11. Program Penentuan Koordinat Autocropping
% Baca file avi
obj=mmreader('morse700abc.avi'); % ukuran avi: 320x240
piksel
% ================================================= % Preprosesing
% ================================================= % Penentuan koordinat autocropping
m=1; n=1; k=1;
k=31; % Mulai frame ke 16
% Frame 1-15 (1 detik pertama)diabaikan
thx=250; while m==1 img1=double(rgb2gray(read(obj,k))); img2=double(rgb2gray(read(obj,k+n))); img3=abs(img1-img2)/1000; sum1=sum(img3); sum2=sum(sum1); if sum2>thx m=0; end n=n+1; if k+n>900 thx=200; n=1; end end
Gambar 4.11. Lanjutan Program Penentuan Koordinat Autocropping
Perintah double pada proses autocropping berfungsi untuk mengubah nilai pada gambar grayscale karena nilainya masih unsigninteger, sedangkan nilai hasil akhir dibagi 1000 sebagai normalisasi. Pada program penentuan koordinat terdapat perintah rgb2gray. Perintah tersebut merupakan perintah untuk mengubah format gambar rgb menjadi grayscale, sedangkan program di atas thx sebagai penentuan nilai atau evaluasi untuk mempermudah proses autocropping. Selanjutnya pada posisi autocropping (kiri atas) terdapat list program posx dan posy sebagai penentu posisi autocropping. Perintah nilai 5 dan 0 pada posx dan posy berfungsi sebagai nilai evaluasi karena nilai offset yang digunakan yaitu 10. Nilai offset berfungsi untuk menghilangkan efek border. Nilai tersebut digunakan karena hasil dari percobaan yang dilakukan lampiran (3). Nilai perintah [posx posy 10 10] berfungsi sebagai cropping. Nilai dari percobaan tersebut digunakan karena pada saat mengunakan nilai evaluasi lainnya hasil proses tersebut tidak dapat ditampilkan secara maksimal. Selanjutnya program ekstrak frame berfungsi untuk mengubah citra berupa cahaya kedap-kedip yang telah direkam menjadi jumlah frame untuk nomor framenya. Program ekstrak frame seperti terlihat pada gambar 4.12.
% Posisi autocropping (kiri atas) sum3=sum(img3');
th1=0.8*max(sum1); th3=0.8*max(sum3); x1=find(sum1>th1); y1=find(sum3>th3);
posx=x1(1)+5 % Nilai offset: 10
posy=y1(1)+0 % Nilai offset: 10
% Nilai offset --> menghilangkan efek
border
%figure(2)
img4=rgb2gray(read(obj,k-5)); img5=rgb2gray(read(obj,k));
Gambar 4.12. Program Ekstrak Frame
List program “img7” berfungsi untuk membaca frame. Setelah frame terbaca dilakukan proses cropping untuk pemotongan bagian dari citra yang diperlukan dalam proses pengenalan kode morse dengan nilai 10×10 piksel. Program RGB ke Gray merupakan suatu proses untuk citra digital yang diambil berupa citra RGB dan kemudian dikonversi ke dalam bentuk citra grayscale. Proses tersebut bertujuan untuk mengidentifikasi intensitas warna dari warna hitam dan putih pada citra digital. Program RGB ke Gray dapat terlihat pada gambar 4.13.
Gambar 4.13. Program RGB ke Gray
Perintah “double” pada program di atas berfungsi untuk mengubah nilai pada gambar grayscale karena nilainya masih unsigninteger, sedangkan nilai hasil akhir dibagi 3×255 sebagi normalisasi. Berikutnya program histogram proyeksi vertikal berfungsi untuk suatu citra yang akan diproses dalam rangka
% Ekstrak frame s/d histogram jumframe=obj.NumberOfFrames; vhist0=[];
for a=1:5:jumframe % downsampling
img7=read(obj,a); % baca frame
img8=imcrop(img7,[posx posy 10 10]); % crop 10x10
piksel
% RGB->Gray
r=double(img8(:,:,1)); % matriks r (red)
g=double(img8(:,:,2)); % matriks g (green)
b=double(img8(:,:,3)); % matriks b (blue)
penyimpanan dari citra grayscale. Program histogram proyeksi vertikal seperti terlihat pada gambar 4.14.
Gambar 4.14. Program histogram Proyeksi vertical
List program “vhist0” berfungsi untuk menyimpan citra untuk proses selanjutnya pada pengolahan citra dalam ekstrak frame. Berikutnya program average filtering berfungsi untuk meratakan sinyal yang terekam dengan mencari rata-rata. Program average filtering dapat terlihat pada gambar 4.15.
Gambar 4.15. Program Average Filtering
Fungsi program “avgfilter” adalah untuk memanggil fungsi average filtering, sedangkan fungsi average filtering adalah untuk meratakan sinyal puncak dengan menghitung nilai rata-rata. Proses dilakukan dengan memanggil fungsi yang sudah dibuat pada M-file dengan nama “avgfilter”. Berikutnya program downsampling berfungsi untuk memproses sinyal kotak yang tertangkap dan untuk mengurangi sinyal serta mempertahankan periodenya. Program downsampling dapat terlihat pada gambar 4.16.
Gambar 4.16. Program Downsampling
Perintah “vhist0” diproses setelah hasil dari proses average filtering yang menghasilkan sinyal kotak diproses untuk menghasilkan sinyal kotak yang lebih rapat. Berikutnya program thresholding berfungsi untuk menentukan kode biner 1 dan 0 dari sinyal kotak. Program thresholding dapat terlihat pada gambar 4.17.
vhist0=[vhist0 sum(img9)]; % simpan histogram proyeksi
vertikal
% Average filtering
vhist0=avgfilter(vhist0);
% Downsampling
Gambar 4.17. Program Thresholding
Nilai “0.75” yang terdapat pada program “thresholding” berfungsi sebagai nilai evaluasi pada sinyal kotak yang nantinya akan digunakan pada proses threshold biner. Nilai tersebut digunakan karena sinyal yang dihasilkan pada proses thresholding sesuai dengan kode karakter kode morse yang ditampilkan pada laptop 1. Namun, nilai evaluasi lainnya tidak sesuai dengan kode karakter kode morse yang ditampilkan pada laptop 1. Sinyal thresholding yang menggunakan nilai evaluasi lainnya dapat dilihat pada lampiran (4). List program katain berfungsi sebagai preallocation untuk katain. Dalam prosesnya terdapat perintah “vhist1 (k)>thbin” yang berfungsi untuk menentukan threshold biner yang nilainya lebih besar dari nilai evaluasi. Pada citra berupa cahaya kedap-kedip yang berwarna putih bernilai 1 sedangkan yang bewarna gelap bernilai 0 untuk menampilkan sinyal biner ditampilkan pada axes2.
Proses decoding terdiri dari dua tahap. Tahap yang pertama adalah mengubah kode biner menjadi kode karakter. Tahap pertama ini bertujuan untuk mengetahui kode biner yang terdapat pada citra berupa cahaya kedap-kedip yang
% Thresholding untuk kode biner
%thbin=0.75*max(vhist1); % threshold biner thbin=0.75*max(vhist1);
pjvhist1=length(vhist1);
katain=zeros(1,pjvhist1); % preallocation untuk
katain for k=1:pjvhist1 if vhist1(k)>thbin katain(k)=1; end end katain
%tampilkan pada axes axes(handles.axes2);
kemudian diproses menjadi kode karakter. Dalam proses decoding tahap pertama terdapat program deteksi jumlah nol yang bertujuan untuk menentukan jumlah kode biner sebagai spasi berdasar jumlah nol. Program deteksi jumlah nol dapat terlihat pada gambar 4.18.
Gambar 4.18. Program Deteksi Jumlah Nol
Pada program di atas tertulis “kataout=[kataout ‘ss’]” yang bertujuan untuk menentukan kode karakter ss dengan menggunakan nilai evaluasi nol lebih kecil dari 7 maka akan dianggap sebagai kode karakter ss. Selanjutnya
“kataout=[kataout ‘sh’]” untuk menentukan kode karakter sh dengan menggunakan nilai evaluasi nol lebih besar dari atau sama dengan 7 dan nol lebih kecil dari atau sama dengan 15 maka kode karakter berupa sh. Setelah itu,
“kataout=[kataout ‘sk’]” untuk kode karakter berupa sk. Nilai-nilai evaluasi
% ---% Deteksi jumlah nol
% --- k=1; m=1; nol=0; while k==1 if katain(m)==0 nol=nol+1; else k=0; end m=m+1; if length(katain)<m k=0; end end
% Definisi spasi berdasar jumlah nol
if nol<7
kataout=[kataout 'ss'];
elseif nol>=7 && nol<=15
kataout=[kataout 'sh'];
else
kataout=[kataout 'sk'];
end
% Pemotongan data input berdasar jumlah nol
tersebut digunakan untuk menentukan kode karakter yakni mendeteksi biner 0 dengan menghitung terlebih dahulu biner berupa 0 dari proses hasil “katain”
seperti pada lampiran (5). Proses selanjutnya adalah deteksi jumlah satu dengan tujuan menentukan jumlah satu dari kode biner. Program deteksi jumlah satu dapat terlihat pada gambar 4.19
Gambar 4.19. Program Deteksi Jumlah Satu
Dalam menentukan kode morse berdasar jumlah satu terdapat program
“kataout=[kataout ‘pd’]” yang bertujuan untuk menentukan kode karakter pd dengan menggunakan nilai evaluasi satu lebih kecil dari atau sama dengan 6 dan satu lebih besar dari atau sama dengan 2 maka kode karakter berupa pd. Namun, untuk menetukan kode karakter pj menggunakan “kataout=kataout[kataout ‘pj’]”
dengan menggunakan nilai evaluasi satu lebih besar dari 6. Nilai-nilai evaluasi tersebut digunakan untuk menentukan kode karakter yang berupa pd maupun pj
% ---% Deteksi jumlah satu
% --- k=1; m=1; satu=0; while k==1 if katain(m)==1 satu=satu+1; else k=0; end m=m+1; if length(katain)<m k=0; end end
% Definisi spasi berdasar jumlah satu
if satu<=6 && satu>=2
kataout=[kataout 'pd'];
else satu>6
kataout=[kataout 'pj'];
end
% Pemotongan data input berdasar jumlah satu
katain(1:satu)=[];
dengan menghitung terlebih dahulu biner berupa 1 dari hasil “katain” seperti
pada lampiran (5).
Pada decoding tahap dua, program akan memproses kode karakter menjadi kata yang telah dihasilkan di tahap pertama. Proses ini dilakukan dengan mengubah kode karakter menjadi kata (teks). Proses decoding tahap kedua dapat terlihat pada gambar 4.20.
Gambar 4.20. Program Decoding tahap kedua
Proses decoding tahap pertama yang menghasilkan kode karakter yang berupa ss, sh, sk, pd dan pj yang akan diproses untuk mengubah menjadi kata (teks). Program tersebut diproses dengan membandingkan kode karakter yang telah dihasilkan oleh decoding tahap pertama. List program “kataout” hasil dari
decoding tahap pertama akan diproses dengan mencocokkan kode karakter pada
% Dekoding tahap 2 (kode karakter --> teks) a=1;hurufin=[];katatxt=[]; while a==1 if strcmp(kataout(1:2),'sh')==0 && strcmp(kataout(1:2),'sk')==0 hurufin=[hurufin kataout(1:2)]; kataout(1:2)=[];
elseif strcmp(kataout(1:2),'sh')==0 &&
strcmp(kataout(1:2),'sk')==1 hurufout=kenalhuruf(hurufin); katatxt=[katatxt hurufout]; kataout=[]; elseif strcmp(kataout(1:2),'sh')==1 hurufout=kenalhuruf(hurufin); katatxt=[katatxt hurufout]; hurufin=[]; kataout(1:2)=[]; end pjkataout=length(kataout); if pjkataout==0 a=0; end end katatxt hasilout=katatxt
axes(handles.axes1); plot(0); axes(handles.axes2); plot(0); set(handles.text9,'String',' '); close all; clear all;
list program “kenalhuruf” dengan menggunakan look up table. Fungsi program
“kenalhuruf” adalah sebagai look up table. Proses dilakukan dengan memanggil fungsi yang telah dibuat pada M-file dengan nama fungsi “kenalhuruf”. Hasil
keluaran ditampilkan dengan format “set(handles.text9, ‘string’,hasilout) dimana
hasil keluaran pada text9 berupa kata (teks). b. Tombol “RESET”
Tombol “RESET” digunakan apabila user masih ingin melakukan pengenalan
kode morse untuk kata lainnya. Tombol “RESET” berfungsi untuk mengulang program dari awal apabila user melakukan kesalahan atau terjadi error pada saat proses pengenalan. Program yang digunakan untuk tombol “RESET” dapat dilihat pada gambar 4.21.
Gambar 4.21. Program Tombol Reset
c. Tombol “SELESAI”
Tombol “SELESAI” berfungsi untuk mengakhiri dan keluar dari program atau tampilan GUI pengenalan kode morse. Program pada tombol “SELESAI” dapat
dilihat pada gambar 4.22.
Gambar 4.22. Program Tombol Selesai
Berdasarkan hasil pengujian tombol pada GUI pengenalan kode morse dapat ditarik kesimpulan bahwa program sudah berjalan dengan baik dan dapat berkerja sesuai dengan perancangan pada bab III.