• Tidak ada hasil yang ditemukan

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.

Dokumen terkait