Professional Documents
Culture Documents
COMPUTER VISION
Edisi ke 1
Maret 2013
Disusun oleh :
Murinto, S.Si., M. Kom.
Puji Syukur kehadirat Allah SWT atas segala rahmat dan hidayahnya yang
tiada terkira kepada kita semua sebagai umat-Nya, sholawat dan salam tak lupa
selalu terucap pada junjungan kita Nabi Muhammad SAW, karena keteladanan
dan akhlaknya dan setiap gerak langkahnya kita dapat menjadi umat terbaik di sisi
Allah SWT.
Pembuatan Modul Praktikum Computer Vision ini tentunya tidak luput
dari banyak hambatan, namun demikian Atas kuasa Allah SWT lewat orang-orang
disekitar kita, modul ini dapat terwujud. Maka lewat kesempatan ini penulis
mengucapkan banyak terima kasih pada temen-temen dosen di Teknik
Informatika atas saran, serta diskusi-diskusinya. Dalam Modul Praktikum
Computer Vision ini dibahas mengenai : Pengenalan Menu Editor Matlab GUI,
Model Warna RGB, Threshold, Transformasi Matriks Affine, Canny Edge
Detection, Filtering, Fingerprint Enhancement dan Kalibrasi Camera
(OpenCV).
Dalam Penulisan petunjuk praktikum ini tentunya banyak kekurangan-
kekurangannya. Maka dari itu banyak harapan dari kami kritik dan saran yang
membangun, untuk lebih menyempurnakannya.
Penulis
Halaman
Kata Pengantar..ii
Daftar Isiiii
Pertemuan ke : I
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
A. PETUNJUK PRAKTIKUM
1. Buka Matlab dengan cara double clik didekstop icon MatlabMATLAB R12.lnk
Pada praktikum mata kuliah Computer Vision ini akan dikenalkan tentang
GUI dalam Matlab dengan membuat user interface memakai Menu Editor.
Misalkan ingin membuat suatu user interfacec dengan menu-menu
adalah: Menu utama berupa File dan Proses. Di sini File terdiri dari sub
menu : Open, Save, dan Exit, sedang menu utama Proses tidak terdapat
sub menu apapun didalamnya. Diinginkan pada saat melakukan proses
Open , ditampilkan dalam suatu Axes, kemudian hasilnya disimpan dalam
folder/tempat manapun yang diinginkan. Adapun langkah-langkahnya
adalah sebagai berikut :
1. Dari Menu layout awal klik Menu editor, sehingga muncul gambar
seperti dibawah ini :
2. Dari Menu Editor kemudian klik Menu Bar (Create a new Menu), sehingga
muncul gambar seperti ini :
dengan cara yang sama untuk Menu Proses (isikan label : Proses dan tag :
label_proses).
3. Sorot File lalu klik New Menu Item (sebanyak sub menu yang akan
dibuat : dalam hal ini Open , Save dan Exit), lalu isikan masing-masing
label dan tag-nya. (Open label :open dan tag :file_open, Savelabel
:save dan tag: file_save, Exitlabel : exit dan tag : file_exit)
4. Kemudian pada layout area GUI , tambahkan satu Axes untuk tempat
menampilkan citra yang akan di-open,serta static text (string: Tampilan
Citra Awal dan tag : Showaxes)
5. Langkah terakhir adalah Save hasil GUI tersebut dan lakukan Run (F5).
Adapun hasilnya adalah sebagai berikut :
Open Citra
function file_open_Callback(hObject, eventdata, handles)
global gg gc;
h=guidata(gcbo);
gg=gg+2;
h.image_filename=1;
h.image_pathname=1;
[filename, pathname] = uigetfile( ...
{'*.bmp;*.tif;*.jpg;*.pcx;*.png;*.hdf;*.xwd;*.ras;*.pbm;*.pg
m;*.ppm;*.pnm', 'All MATLAB SUPPORTED IMAGE Files
(*.bmp,*.tif,*.jpg,*.pcx,*.png,*.hdf,*.xwd,*.ras,*.pbm,.pgm,
*.ppm,*.pnm)'} ... ,'Pick a file');% load image file
if filename~=0
gg=1;
h.gg=1;
h.image_filename=filename; % Image file name
h.image_pathname=pathname; % Image path name
set(h.Showaxes,'visible','on');
axes(h.axes1);
image_1=imread([pathname filename]); % Panggil image
imshow(image_1);% Tampilkan Image
h.image_1=image_1;
end
Save Citra
(Berikut ini adalah function untuk menyimpan hasil suatu proses)
karena dalam Praktikum 1 ini, belum melakukan proses maka anggap saja
ini adalah perintah-perintah yang akan kita pakai pada Praktikum-
praktikum berikutnya.
function file_save_Callback(hObject, eventdata, handles)
global gg gc;
h=guidata(gcbo);
h.message_text='';
h.image_filename=1;
h.image_pathname=1;
set(h.message_text,'String','');
if gc~=0
dot='.'; pathname=h.image_pathname;
[filename, pathname] = uiputfile('*.*', 'Tampilan citra awal');
if filename~=0
try_again=find(filename==dot);
if ~isempty(try_again)
image_ex=filename(try_again+1:end);
valid_ex=['BMP'; 'TIF'; 'JPG'; 'PCX'; 'PNG'; 'HDF';
'XWD'; 'RAS'; 'PBM'; 'PGM'; 'PPM'; 'PNM';];
p=['\<' image_ex '\>'];
g=regexpi(valid_ex,p);
b=cell2mat(g); % Convert sel ke matriks
if b~=0 & length(image_ex)==3
CMap=colormap(h.axes1);
Exit
function tutup_citra_Callback(hObject, eventdata, handles)
close;
B. TUGAS PRAKTIKUM
Kerjakan langkah-langkah yang sudah diberikan diatas untuk
mendapatkan hasil seperti pada Gambar. 8. Anda dapat menggunakan Praktikum
1 ini sebagai dasar untuk Praktikum-praktikum berikutnya.
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : II
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
A. PETUNJUK PRAKTIKUM
Pada Praktikum 2 ini hanya akan dibuat Suatu User Interface untuk
menampilkan suatu Load Image, serta Menampilkan Image tersebut dalam Model
Skala Warna Full Color, Red, Green dan Blue. Adapun function code nya
adalah sebagai berikut :
set(handles.listbox_DisplayScale,'HandleVisibility','off','Visible','on')
;
set(handles.text3,'Visible','on');
selected_scale = 1;
case 'grayscale'
errormessage = 'Ini adalah GRAYSCALE image. Program hanya menerima
TRUECOLOR ';
set(handles.axes1,'HandleVisibility','on','Visible','on','Units','pixels'
);
warning off;
imshow(loaded_image);
warning on;
set(handles.axes1,'HandleVisibility','off');
axes1_image = loaded_image;
image_filename = filename;
catch
errormessage = 'Error Pembacaan dan tampilan image file';
end
end
if ~isempty(errormessage)
set(handles.text_messages,'string',errormessage);
end
end
end
set(handles.text_messages,'string','');
val = get(handles.listbox_DisplayScale,'Value');
axes(handles.axes1);
set(handles.axes1,'HandleVisibility','on','Visible','on','Units','pixels'
);
errormessage = '';
try
switch val
case 1 %Full colour
axes1_image = loaded_image;
selected_scale = 1;
set(handles.text4,'string','Full colour');
case 2 %Red scale
axes1_image = loaded_image(:,:,1);
3. Exit
function file_exit_Callback(hObject, eventdata, handles)
close;
D. TUGAS PRAKTIKUM
Kerjakan langkah-langkah yang ada dalam Petunjuk Praktikum diatas.
Ubahlah Layout-nya memakai Menu Editor(Seperti pada PRAKTIKUM 1).
Selanjutnya Hasil Praktikum 2 akan dipakai untuk melengkapi Praktikum 3.
Nilai Yogyakarta, .
Paraf asisten
<>
A. PETUNJUK PRAKTIKUM
Praktikum 5 merupakan kelanjutan dari Praktikum 4, yakni setelah kita
bisa me-load suatu image dan mengubah tampilannya ke dalam 4 macam skala
warna : Full Color, Red, Green dan Blue, maka langkah berikutnya adalah
melakukan operasi threshold. Layout awal dan Hasil Tampilan akhirnya seperti
pada Praktikum 4. Code yan gperlu ditambahkan adalah :
1. Code Inisialisasi
Code ini ditambahkan pada akhir dari function berikut :
function varargout = threshold(varargin)
...................
...............
if nargout > 0
varargout{1} = fig;
end
slider_step(1) = 1/255;
slider_step(2) = 10/255;
set(handles.slider_Max,'sliderstep',slider_step,'max',255,'min',0,'V
alue',global_max_value);
set(handles.slider_Min,'sliderstep',slider_step,'max',255,'min',0,'V
alue',global_min_value);
set(handles.edit_Max,'string',global_max_value);
set(handles.edit_Min,'string',global_min_value);
set(handles.listbox_DisplayScale,'HandleVisibility','off','Visible',
'off');
set(handles.text3,'Visible','off');
set(handles.axes1,'Visible','off');
set(handles.axes2,'Visible','off');
global loaded_image;
2. Function Slider
function varargout = slider_Max_Callback(h, eventdata, handles, varargin)
global global_max_value;
global global_min_value;
set(handles.text_messages,'string','');
max_value = round(get(handles.slider_Max,'Value'));
if (max_value >= global_min_value)
global_max_value = max_value;
set(handles.edit_Max,'string',global_max_value);
end
set(handles.slider_Max,'Value',global_max_value);
display_threshold(h, eventdata, handles, varargin);
set(handles.text_messages,'string','');
axes(handles.axes2);
set(handles.axes2,'HandleVisibility','on','Visible','on','Units','pixels'
);
if (selected_scale ~= 1)
set(handles.text_messages,'string','Finding thresholding regions');
axes2_image =
threshold_grayscale_image(axes1_image,global_min_value,global_max_value);
message = strcat('Thresholded image between
',num2str(global_min_value),' and ',...
num2str(global_max_value));
set(handles.text5,'string',message);
try
set(handles.text_messages,'string','Displaying Axes2 image');
warning off;
imshow(axes2_image);
warning on;
set(handles.text_messages,'string','');
catch
set(handles.text_messages,'string','Error displaying Axes2');
end
end
set(handles.axes2,'HandleVisibility','off');
% --------------------------------------------------------------------
function varargout = pushbutton_Overlap_Callback(h, eventdata, handles,
varargin)
global axes1_image;
global axes2_image;
global selected_scale;
set(handles.text_messages,'string','');
%if (~isempty(axes1_image) & ~isempty(axes2_image) & (selected_scale ~=
1))
if (~isempty(axes1_image) & ~isempty(axes2_image))
figure;
clf;
set(handles.text_messages,'string','Displaying images');
if (selected_scale == 1)
overlap_image(:,:,1) = uint8(double(axes1_image(:,:,1)) .*
double(axes2_image));
overlap_image(:,:,2) = uint8(double(axes1_image(:,:,2)) .*
double(axes2_image));
overlap_image(:,:,3) = uint8(double(axes1_image(:,:,3)) .*
double(axes2_image));
else
overlap_image = uint8(double(axes2_image) .*
double(axes1_image));
end
try
warning off;
imshow(overlap_image);
warning on;
set(handles.text_messages,'string','');
% --------------------------------------------------------------------
function varargout = pushbutton_save_Callback(h, eventdata, handles,
varargin)
global axes2_image;
if ~isempty(axes2_image)
% save_as_file = strcat(get(handles.edit_Save_As,'string'),'.tif');
save_as_file = get(handles.edit_Save_As,'string');
message = strcat('Are You Sure That You Want To Save As :
',save_as_file);
reply = questdlg(message,'Saving File...','Yes','No','No');
if (strcmp(reply,'Yes') == 1)
set(handles.text_messages,'string','Starting to save thresholded
image');
try
imwrite(axes2_image,save_as_file);
set(handles.text_messages,'string','');
msgbox('Save Completed','','none');
catch
set(handles.text_messages,'string',strcat('Error saving into
',save_as_file));
end
end
end
D. TUGAS PRAKTIKUM
Kerjakan langkah-langkah yang ada dalam Petunjuk Praktikum diatas.
Ubahlah Layout-nya memakai Menu Editor(Seperti pada PRAKTIKUM 1).
Manfaatkan Hasil Praktikum 2 dan kemudian lengkapi dengan Code yang ada
pada Petunjuk Praktikum 3.
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : IV
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
Setelah melakukan praktikum diharapkan mahasiswa dapat :
1. Mengetahui tentang transformasi matriks affine dan menerapkannya untuk
melakukan transformasi geometrik affine untuk gambar 2-Dimensi.
2. Membuat suatu User Interface dengan MATLAB GUI untuk pemrosesan
transformasi suatu citra dengan transformasi matriks Affine.
A. PETUNJUK PRAKTIKUM
1. Memasukkan citra
function Load_image_Callback(hObject, eventdata, handles)
end
end
B. TUGAS PRAKTIKUM
Sekarang Anda kerjakan langkah-langkah dalam petunjuk praktikum
diatas untuk menghasilkan suatu transformasi citra dengan menggunakan
transformasi Affine. Adapun lay out awalnya dan Menu Editornya adalah sebagai
berikut (Dikerjakan untuk Praktikum 4 dan Praktikum 5):
<>
Pertemuan ke : V
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
C. PETUNJUK PRAKTIKUM
1. Rotasi
function deg_Callback(hObject, eventdata, handles)
h=guidata(gcbo);
%set(h.rad,'Value',0);
ch=get(hObject,'Value');
switch ch
case 0
set(h.rad,'Value',1)
case 1
set(h.rad,'Value',0)
end
guidata(gcbo,h);
function rad_Callback(hObject, eventdata, handles)
h=guidata(gcbo);
%set(h.rad,'Value',0);
ch=get(hObject,'Value');
switch ch
case 0
set(h.deg,'Value',1)
case 1
set(h.deg,'Value',0)
end
D. TUGAS PRAKTIKUM
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : VI
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
Setelah melakukan praktikum mahasiwa diharapkan dapat :
1. Menampilkan suatu image file pada GUI dengan Menu Editor
2. Mampu menampilkan suatu hasil operasi filtering citra dengan GUI
Matlab.
A. PETUNJUK PRAKTIKUM
Untuk mengimplementasikan proses filtering dengan lowpass filter dan
highpass filter pada suatu citra adalah sebagai berikut :
Meload citra asli yang akan dilihat histogram citranya (format BMP)
Menampilkannya dalam suatu axes
Melakukan operasi lowpass atau highpass filtering
Menampilkan hasil citra tersebut pada axes tertentu
Adapun contoh tampilan Filtering dengan menggunakan Matlab GUI
adalah sebagi berikut :
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundCol
or'));
end
im_original = double(im_original);
t=size(im_original,3);
if t==3
imt=floor((im(:,:,1)+im(:,:,2)+im(:,:,3))/3);
%Ideal filter
function H = ideal_filter(co,ro,fc)
cx = round(co/2); % find the center of the image
cy = round (ro/2);
H=zeros(co,ro);
if fc > cx & fc > cy
H = ones(co,ro);
return;
end;
for i = 1 : co
for j = 1 : ro
if (i-cx).^2 + (j-cy).^2 <= fc .^2
H(i,j)=1;
end;
end;
end;
B.TUGAS PRAKTIKUM
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : VII
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
Setelah melakukan praktikum mahasiwa diharapkan dapat :
3. Menampilkan suatu image file pada GUI dengan Menu Editor
4. Mampu menampilkan suatu hasil operasi edge detection citra dengan
menggunakan Operator Canny menggunakan GUI Matlab.
A. PETUNJUK PRAKTIKUM
B. TUGAS PRAKTIKUM
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : VIII
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
Setelah melakukan praktikum mahasiwa diharapkan dapat :
1. Menampilkan suatu image file pada GUI dengan Menu Editor
2. Mampu menampilkan suatu hasil fingerprint enhancement.
A. PETUNJUK PRAKTIKUM
reliability = reliability.*(denom>.001);
B. TUGAS PRAKTIKUM
<>
A. PETUNJUK PRAKTIKUM
% Generate tabel
freqindex = ones(100,1);
for k = 1:length(unfreq)
freqindex(round(unfreq(k)*100)) = k;
end
filter = cell(length(unfreq),180/angleInc);
sze = zeros(length(unfreq),1);
for k = 1:length(unfreq)
sigmax = 1/unfreq(k)*kx;
sigmay = 1/unfreq(k)*ky;
sze(k) = round(3*max(sigmax,sigmay));
[x,y] = meshgrid(-sze(k):sze(k));
reffilter = exp(-(x.^2/sigmax^2 + y.^2/sigmay^2)/2)...
.*cos(2*pi*unfreq(k)*x);
for o = 1:180/angleInc
filter{k,o} = imrotate(reffilter,-(o*angleInc+90),'bilinear','crop');
end
end
if showfilter
figure(7), imshow(filter{1,end},[]); title('filter');
end
maxsze = sze(1);
finalind = find(validr>maxsze & validr<rows-maxsze & ...
validc>maxsze & validc<cols-maxsze);
maxorientindex = round(180/angleInc);
orientindex = round(orient/pi*180/angleInc);
i=find(orientindex < 1);
orientindex(i) = orientindex(i)+maxorientindex;
i = find(orientindex > maxorientindex);
orientindex(i) = orientindex(i)-maxorientindex;
% filtering
for k = 1:length(finalind)
r = validr(finalind(k));
c = validc(finalind(k));
% cari filter yan gberkorespondensi dengan freq(r,c)
s = sze(filterindex);
newim(r,c)=sum(sum(im(r-s:r+s,
c-s:c+s).*filter{filterindex,orientindex(r,c)}));
end
B. TUGAS PRAKTIKUM
Nilai Yogyakarta, .
Paraf asisten
<>
Pertemuan ke : X
Alokasi Waktu : 1.5 Jam
Kompetensi Dasar :
Setelah melakukan praktikum mahasiwa diharapkan dapat :
1. Menerapkan Sofware OpenCV Kalibrasi Kamera untuk memproyeksikan
posisi suatu image
2. Mengenal tentang OpenCV yang ada pada bidang Computer Vision.
A. PETUNJUK PRAKTIKUM
Chapter Contents
Source OpenCV ini bisa Anda dapatkan pada saat Praktikum 10.
B. TUGAS PRAKTIKUM
Nilai Yogyakarta, .
Paraf asisten
<>
Hong, L., Wan, Y., and Jain, 1998, A. K. Fingerprint image enhancement:
Algorithm and performance evaluation, IEEE Transactions on Pattern
Analysis and Machine Intelligence 20, 8, pp 777-789.
www.intel.com/OpenCV
www.mathworks.com