5 2 3
6 4 1
dan a2 =
4 3 6
5 1 2
Bagaimana outputnya?
b. a1 =
5 2 3
6 4 1
dan a2 =
9 8 7
6 5 4
3 2 1
Bagaimana outputnya ?
Agar kasus tersebut bisa kita handle maka ubah program diatas menjadi seperti berikut:
% Contoh 3
% menjumlahkan dua matrik
clc;clear;
a1=input('Masukkan matrik pertama: ');
a2=input('Masukkan matrik kedua : ');
[b1,k1]=size(a1);
[b2,k2]=size(a2);
if (b1==b2)&(k1==k2)
a3=a1+a2;
disp('Hasilnya');
disp(a3);
else
disp('Matrik tidak dapat dijumlahkan');
end
IV. FILE CITRA PADA MATLAB
1. Image Digital
Kakas pada pengolahan citra pada Matla menyediakan berbagai macam teknik untuk menampilkan citra.
Pada Pertemuan ke 4 ini akan dijelakan mengenalkan teknik standar dalam menampilkan citra,
menjelaskan teknik khususu menampilkan citra dan menjelaskan pencetakan citra.
Sebuah citra digital adalah kumpulan piksel-piksel yang disusun dalam larik dua dimensi. Indeks baris
dan kolom (x,y) dari sebuah piksel yang dinyatakan dalam bilangan bulat dan nilai-nilai tersebut
mendefinisikan suatu ukuran intensitas cahaya pada titik tersebut. Satuan atau bagian terkecil dari suatu
citra disebut piksel (picture element).
Umumnya citra dibentuk dari persegi empat yang teratur sehingga jarak horizontal dan vertikal antara
piksel satu dengan yang lain adalah sama pada seluruh bagian citra. Piksel (0,0) terletak pada sudut kiri
atas pada citra, dimana indeks x bergerak ke kanan dan indeks y bergerak ke bawah. Untuk
menunjukkan koordinat (m-1,n-1) digunakan posisi kanan bawah dalam citra berukuran m x n pixel. Hal
ini berlawanan untuk arah vertikal dan horizontal yang berlaku pada sistem grafik dalam matematika.
Video sebenarnya juga merupakan salah satu bentuk dari citra digital. Video merupakan kumpulan dari
beberapa frame dari citra digital. Satu frame merupakan satu citra digital. Oleh karena itu, apabila di
video ada satuan yang menyatakan 12 fps(frame persecond) artinya bahwa video tersebut memainkan
12 frame/citra digital dalam tiap detiknya1. Membaca file citra Untuk membaca file citra, kita dapat
menggunakan perintah imread yang berarti image read. Output dari imread ini berupa matrix citra 3
dimensi untuk citra berwarna, ataupun matrix 2 dimensi untuk citra monokrom.
2. Membaca dan menampilkan file Citra
Dalam Matlab, citra digital direpresentasikan dalam matriks berukuran m x n sesuai dengan ukuran m x
n ukuran citra digital dalam pixel. Jadi setiap pixel dari citra digital diwaklili oleh sebuah matriks
berukuran 1x1 apabila citra tersebut berupa citra Grayscale atau citra Biner, dan 3 matriks apabila citra
digital berupa citra RGB. Misalkan kita punya citra digital berukuran 640x480 pixel, maka sebenarnya
citra tersebut diwakili oleh matriks berukuran 640x480.
Untuk membaca sebuah file citra di Matlab, maka digunakan perintah :
A=imread(nama_File)
dengan syarat file yang dibaca berada pada direktori yang aktif. File yang dibaca kemudian disimpan
dalam variabel "A" dalam bentuk matriks penyusun citra.
Perintah ini digunakan untuk membaca beberapa format file citra diantaranya :
Sedangkan untuk menampilkan file citra yang telah dibaca digunakan perintah :
Untuk contoh kedua, kita masih akan membaca file yang sama, akan tetapi kali ini akan diambil masing -
masing matriks penyusun citra (matriks R, matriks G, danMatriks B) karena memang file yang dibaca
adalah gambar RGB (berwarna). Semua matriks ini kemudian akan ditampilkan ke dalam 1 figure (plot).
Berikut ini adalah listing :
clc;
clear;
A=imread('logopancabudi.jpg');%Membaca file citra
red=A(:,:,1);%Mengambil matriks penyusun citra merah
green=A(:,:,2);%Mengambil matriks penyusun citra hijau
blue=A(:,:,3);%Mengambil matriks penyusun citra biru
subplot(2,2,1)
imshow(A)
subplot(2,2,2)
imshow(red)
subplot(2,2,3)
imshow(green)
subplot(2,2,4)
imshow(blue)
hasil setelah di running
Terlihat bahwa untuk mengambil nilai piksel merah memiliki indeks 1, warna hijau memiliki indeks 2
dan warna biru memiliki indeks 3.
Untuk membaca file citra yang berbeda direktori dengan direktori yang aktif adalah dengan menuliskan
direktori tempat file berada + nama_file. Misalkan filenya berada pada direktori "D:/Picture", maka
tinggal ditulis saja :
A=imread('D:/Picture/logopancabudi.jpg')
gambar=imread('logopancabudi.jpg'); %--------membaca file gambar
red=gambar(:,:,1); %memanggil matriks gambar yang hanya berisi piksel warna
merah
green=gambar(:,:,2);% memanggil matriks gambar yang hanya berisi piksel warna
hijau
blue=gambar(:,:,3); %memanggil matriks gambar yang hanya berisi piksel warna
biru
imshow(red)
imshow(green)
imshow(blue)
3. Membaca informasi file gambar
imfinfo(pout.tif);
4. Reading an Image File
IPT berisi fungsi yang khusus untuk membaca file DICOM (Digital Imaging and Communications in
Medicine) files (dicomread), file NITF (National Imagery Transmission Format) files (nitfread), and HDR
(high dynamic range) (hdrread).
5. Data Classes and Data Conversions
Ketersediaan IPT dalam membaca berbagai type gambar, menyimpannya dalam array dan membuat nya
tersedia untuk dilakukan prosesing dan ditampilkan dan itu buth pengetahuan bagaimana menampilkan
kontent image yang dibutuhkan yang akan direpresentasikan didalam memory.
Bagian class image dapat ditunjukkan seperti dibawah ini :
uint8: 1 byte per pixel, in the [0, 255] range
double: 8 bytes per pixel, usually in the [0.0, 1.0] range
logical: 1 byte per pixel, representing its value astrue(1 or white) orfalse (0 or black)
a. Sample 1:
I = imread(pout.tif);
imshow(I)
figure, imshow(I,[])
figure, imshow(I,[100 160])
The first call toimshowdisplays the image in its original state. The following line opens a new figure and
displays a scaled (for display purposes) version of thesame image. The last line specifies a range of gray
levels, such that all values lower than 100 will be displayed as black and all values greater than 160 will
be displayed as white
b. Sample 2 :
In this example, we will read an image from a PNG file and save it to a JPG file using three different
quality parameters: 75 (default), 5 (poor quality, small size), and 95 (better quality, larger size).
I = imread(peppers.png);
imwrite(I, pep75.jpg);
imwrite(I, pep05.jpg, quality, 5);
imwrite(I, pep95.jpg, quality, 95);
6. GUI Membaca file citra
1. Desian figure
Desain figure seperti dalam Gambar 1. Dalam meletakkan komponen pallete boleh tidak
sesuai dengan gambar (sesuai selera)
2. Mengatur Layout Komponen
Setelah kita selesai mendesain figure, aturlah masing masing komponen menggunakan property
inspector.
3. Menyimpan figure
Setelah selesai mendesain figure, langkah selanjutnya adalah menyimpan figure, beri nama
aplikasi_citra.fig, secara otomatis kita akan dibuatkan kerangka m-file dengan nama yang sama.
4. Memprogram M-File
Tambahkan bebrapa program kode pada rutin callback yang diperlukan, antra lain:
btn_buka
Di bawah function btn_buka_callbck, tambahkan program menjadi berikut:
[nama_file1, nama_path1]=uigetfile(...
{'*.bmp; *.jpg', 'File citra (*.bmp, *.jpg)';
'*.bmp', 'File Bitmap(*.bmp)';...
'*.jpg', 'File Jpeg(*.jpg)';
'*.*', 'Semua File (*.*)'},...
'Buka file citra asli');
if ~isequal(nama_file1, 0)
handles.data1=imread(fullfile(nama_path1, nama_file1));
guidata(hObject, handles);
handles.current_data1=handles.data1;
axes(handles.axes1);
imshow(handles.current_data1);
else
return
end
set(handles.edit1, 'String', nama_file1);
set(handles.edit2, 'String', size(handles.data1,1));
set(handles.edit3, 'String', size(handles.data1,2));
btn_tutup
%untuk keluar dari apalikasi
delete(handles.figure1)
V . IMAGE CROPPING, RESIZING, FLIPPING, dan ROTATION
Tujuan :
- Mahasiswa dapat mengetahui bagaimana mengcrop, resize dan merotasi citra digital
Objektif :
- Belajar bagaimana melakukan crop citra menggunakan fungsi imcrop
- Belajar bagaimana melakukan resize citra menggunakan fungsi imresize
- Belajar bagaimana melakukan flip citra menggunakan fungsi flipup dan fliplr
- Belajar bagaimana melakukan putaran citra menggunakan fungsi imrotate
Prosedure :
1. Pemotongan Citra (Crop)
Dalam sesi ini, kamu akan belajar bagaimana melakukan pemotongan gambar (crop). Crop dalam matlab
dapat dilakukan dengan interaktif menggunakan Image Tool (imtool) atau menggunakan progam
menggunakan fungsi imcrop.
1. Buka gambar cameraman dan gunakan crop image dengan tool (imtool) Selanjutnya dapat
disimpan dengan menu File Save as Simpan dengan nama cropped_building.png
I = imread(cameraman.tif);
imtool(I)
2. Bagaimana membuka gambar hasil crop tersebut dalam matlap?
3. Fungsi imcrop, terdapat empat vector, [xmin ymin width height]
4. Lakukan hal dibawah ini untuk menggantikan nilai untuk x1, y1, x2, and y2 dengan nilai yang
diinginkan
x1 = 186; x2 = 211; y1 = 105; y2 = 159;
xmin = x1; ymin = y1; width = x2-x1; height = y2-y1;
I3 = imcrop(I, [xmin ymin width height]);
imshow(I3)
5. Merubah Ukuran kembali dapat dilakukan dengan fungsi imresize
I_big1 = imresize(I,3);
figure, imshow(I), title(Original Image);
figure, imshow(I_big1), ...
title(Enlarged Image w/ bicubic interpolation);
6. Dengan menggunakan imtool melihat detail pixel dari gambar. Penambahan fasilitas zoom
merupakan pembesaran dalam bentuk visual.
imtool(I_big1)
7. Lakukan kembali pembesaran gambar dengan nearest-neighbor dan bilinear interpolations.
I_big2 = imresize(I,3,nearest);
I_big3 = imresize(I,3,bilinear);
figure, imshow(I_big2), ...
title(Resized w/ nearest-neighbor interpolation);
figure, imshow(I_big3), ...
title(Resized w/ bilinear interpolation);
Perhatikan perbedaan dari gambar tersebut. Bagaimana mereka berbeda? One way to shrink an
image is by simply deleting rows and columns of the image.
8. Tutup semua gambar yang terbuka,
9. Kurangkan ukuran dari gambar cameraman dari 0,5 dimensi sebenarnya.
I_rows = size(I,1);
I_cols = size(I,2);
I_sm1 = I(1:2:I_rows, 1:2:I_cols);
figure, imshow(I_sm1);
Pertanyaan, Bagaimana gambar tersebut mengalamai perubahan ukuran?
10. Shrink image menggunakan fungsi imresize
I_sm2 = imresize(I,0.5,'nearest');
I_sm3 = imresize(I,0.5,'bilinear');
I_sm4 = imresize(I,0.5,'bicubic');
figure, subplot(1,3,1), imshow(I_sm2), ...
title('Nearest-neighbor Interpolation');
subplot(1,3,2), imshow(I_sm3), title('Bilinear Interpolation');
subplot(1,3,3), imshow(I_sm4), title('Bicubic Interpolation');
Note that in the case of shrinking using either bilinear or bicubic interpolation,
theimresizefunction automatically applies a low-pass filter to the image (whose default size is 1111),
slightly blurring it before the image is interpolated. This helps to reduce the effects of aliasing during
resampling
2. Fungsi flipud dan fliplr
1. Tutup semua gambar dan bersihkan semua variable yang telah digunakan.
I = imread('cameraman.tif');
J = flipud(I);
K = fliplr(I);
subplot(1,3,1), imshow(I), title('Original image')
subplot(1,3,2), imshow(J), title('Flipped upside-down')
subplot(1,3,3), imshow(K), title('Flipped left-right')
3. Fungsi imrotate
1. Tutup semua gambar yang telah terbuka, bersihkan kembali variabelnya.
2. Rotasikan gambar eight.tif dengan sudut 35
0
I = imread('eight.tif');
I_rot = imrotate(I,35);
imshow(I_rot);
amati ukuran gambar, (bilangan baris dan kolom)dari I_rot bandingkan dengan ukuran I .
Mengapa mereka berbeda?
Dapat juga menggunakan interplasi metode yang berbeda ketika melakukan perputaran image.
3. Rotasikan gambar yang sama menggunakan biliner interpolation
I_rot2 = imrotate(I,35,'bilinear');
figure, imshow(I_rot2)
Bagaimana biliner interpolation dapat memberikan effek pada rotasi gambar tersebut?
4. Lakukan rotasi pada gambar yang sama, namun outputnya dilakukan crop
I_rot3 = imrotate(I,35,bilinear,crop);
figure, imshow(I_rot3)
Bagaimana crop tersebut mempengaruhi ukuran dari keluaran nya?
4. Image Resize GUI
Untuk dapat mengubah ukuran dari citra, dapat dilakukan dengan cara sebagai berikut :
1. Ketikkan pada command window untuk merubah current directory matlab dan metode wizard
>> cd 'E:\image'
>> guide
2. Selanjutnya piih blank gui dan pilih ok
3. Buat panel pada lembaran kerja dan pada property dan atur property inspector pada gambar
dibawah ini.
4. Selanjutnya tambahkan static text untuk nama citra dan lokasi.
5. Tambahkan edit text untuk penamaan citra
6. Lakukan hal yang sama untuk lokasi.
7. Selanjutnya, tambahkan tombol push button untuk browser image. Kemudian atur properti
inpectornya.
8. Tambahkan Pup up menu, atur properti inspectornya.
9. Hasil Akhiar GUI
10. Simpan menjadi Image_resize.
11. Tambahkan script dibawah ini :
a. Fungsi image resize
function image_resize_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 image_resize (see VARARGIN)
% Choose default command line output for image_resize
handles.output = hObject;
set(handles.axes1,'Visible','off');
b. Executes on button press in loadimage.
% --- Executes on button press in loadimage.
function loadimage_Callback(hObject, eventdata, handles)
global x
[filename, pathname] = uigetfile('*.jpg','load image');
if filename==0
msgbox ('Silahkan pilih citra','Error','Error')
return
end
x=imread(filename);
axes(handles.axes1);
imshow(x);title('Loaded Image');
set(handles.edit1,'string',filename);
set(handles.edit2,'string',pathname);
c. 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 = get(hObject,'String') returns popupmenu1
contents as cell array
% contents{get(hObject,'Value')} returns selected item from
popupmenu1
global x
contents = get(hObject,'Value')
switch contents
case 1
y1=imshow(x); title('Ukuran gambar [1024*1024]')
case 2
y2=imresize(x,[512 512]);
imshow(y2); title ('Ukuran gambar [512*512]')
case 3
y3=imresize(x,[256 256]);
imshow(y3); title ('Ukuran gambar [256*256]')
case 4
y4=imresize(x,[100 100]);
imshow(y4); title ('Ukuran gambar [100*100]')
case 5
y5=imresize(x,[50 50]);
imshow(y5); title ('Ukuran gambar [50*50]')
case 6
y6=imresize(x,[10 10]);
imshow(y6); title ('Ukuran gambar [10*10]')
otherwise
end
VI. GRAY-LEVEL TRANSFORMATIONS
1. Jalankan Program MATLAB 7.10 pada desktop
2. Kemudian setelah masuk ke program MATLAB, pilih File New GUI atau pada command
windows ketikan guide
3. Setelah tampil GUIDE quick start, seperti gambar dibawah ini, pilih Blank GUI dan simpan dengan
nama aplikasi_citra.
2. Selanjutnya akan muncul tampilan jendela GUIDE layout editor untuk mempermudah kita dalam
membuat antar muka grafis dan m editor.
3. Rancanglah form seperti dibawah ini
4. Pada axes1 di menu property inpector, hapus nilai Xtick dan Ytick
5. Untuk dapat membuka file gambar, tambahkan scrip berikut pada m editor.
a. Pada buttom load tambahkan scriptnya :
b. Untuk reset
c. Untuk Black and white
d. Untuk Tombol Grayscale
e. Untuk slider
VII. HISTOGRAM PROCESSING
Tujuan :
- Mahasiswa dapat menampilkan histogram dari citra
Objektif :
- Belajar bagaimana menggunakan fungsi IPT imhist
- Belajar bagaimana ploting dalam MATLAB sehingga dapat digunakan untuk melihat dan
menganalisa data histogram
-
Prosedure :
1. Tampilkan gambar dan histogram
I = imread('circuit.tif');
figure, subplot(2,2,1), imshow(I), title('Image')
subplot(2,2,2), imhist(I,256), axis tight, title('Histogram')
2. Pada langakh sebelumnya menampilkan citra histogram default dengan 256 bin. Bagaimana jika
dirubah nilainya menjadi 64 dan 32
subplot(2,2,3), imhist(I,64), axis tight, ...
title(Histogram with 64 bins)
subplot(2,2,4), imhist(I,32), axis tight, ...
title(Histogram with 32 bins)
3. Dapatkan nilai pada setiap bin dalam histogram untuk digunakan selanjutnya.
c = imhist(I,32);
We can now use the values incto display histogram using other plotting techniques. Naturally, the
plot of a histogram displays the count of each bin, but it may be more relevant to plot each bins
percentage. This can be done by normalizing the data, as shown in the next step.
4. Normalisasi nilai c
c_norm=c/numel(I);
apa fungsi numel?
5. Tutup semua gambar,
6. Tampilkan semua data menggunakan char bar
figure, subplot(1,2,1), bar_1 = bar(c);
set(gca, 'XLim', [0 32], YLim, [0 max(c)]);
In the previous step, we saw how the bar chart can be customized. In MATLAB, almost every object
you create can be customized. When we create the bar chart, there is anaxesobject and a bar chart
object displayed on theaxesobject. Here, the variablebar_1is set to the bar chartobject so that we
can reference it later for further customization. Thesetfunction allows us to change settings of a
particular object. The first parameter of thesetfunction is the object you wish to customize. In this
case, the first object we customize isgca, which stands forget current axes. Here, we set the limits
of theXandYaxes. Even though the limits have been set, the graph is still ambiguous because the
tick marks on theXandYaxes do not reflect the limits.
7. Limit kan nilainya
set(gca, XTick, [0:8:32], YTick, ...
[linspace(0,7000,8) max(c)]);
Now the tick marks reflect the limits of the data. We used the set function to change settings of
thecurrent axes, but we can just as easily use it to customize the bar chart
8. Gunakan fungsi set untuk merubah bar histogram tersebut. Dan berikan judul pada graft tersebut.
set(bar_1, FaceColor, r), title(Bar Chart
9. Menampilkan normalisasi char bar dan megkostume tampilannya.
subplot(1,2,2), bar_2 = bar(c_norm);
set(gca, XTick, [0:8:32], YTick, ...
[linspace(0,0.09,10) max(c_norm)])
xlim([0 32]), ylim([0 max(c_norm)])
title(Normalized Bar Chart)
set(bar_2, FaceColor, g)
10. Tutup semua gambar yang terbuka
11. Tampilkan stem chart untuk histogram data normal dan standart
figure,
subplot(1,2,1), stem(c,'fill','MarkerFaceColor','red'), ...
axis tight, title('Stem Chart')
subplot(1,2,2), stem(c_norm,'fill','MarkerFaceColor','red'), ...
axis tight, title('Normalized Stem Chart')
12. Menampilkan plot graph histogram data normali dan standart
figure, subplot(1,2,1), plot(c), axis auto, title('Plot Graph')
subplot(1,2,2), plot(c_norm), axis auto, ...
title('Normalized Plot Graph')
VII. NEIGHBORHOOD PROCESSING
1. SMOOTHING FILTERS IN THE SPATIAL DOMAIN
Tujuan
Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan smoothing filter dalam tata
ruang domain.
Tujuan :
Pelajari cara menggunakan fungsi fspecial untuk menghasilkan kernel yang umum digunakan.
Df
Df
Prosedure :
Pada materi ini, akan dibahas fungsi imfilter dan mengimlementasikan kedalam filter 3 x 3 (average).
Kita bisa dengan mudah menghasilkan mask array (nilai sembilan, masing-masing sama dengan 1/9),
tetapi IPT menawarkan fungsi yang akan membuat secara otomatis ini dan beberapa mask lain yang
umum digunakan.
1. Load gambar cameraman.jpg dan letakkan dalam subplot.
I = imread(cameraman.tif);
figure, subplot(1,2,1), imshow(I), title(Original Image);
2. Buat filter secara outomatis menggunakan fungsi fspecial.
fn = fspecial(average)
Pertanyaan 1, Jelaskan nilai variable fn yang direpresentasikan?
Question 2 What other commonly used masks is thefspecialfunction capable
of generating?
3. Berikan filter cameraman dengan generated mask
I_new = imfilter(I,fn);
subplot(1,2,2), imshow(I_new), title(Filtered Image);
Question 3 What was the effect of the averaging filter? The mean filter we just implemented
was a uniform filterall coefficients were equivalent. The nonuniform version of the mean filter
gives the center of the mask (the pixel in question) a higher weighted value, while all other
coefficients are weighted by their distance from the center. This particular mask cannot be
generated by the fspecialfunction, so we must create it ourselves.
4. Create a nonuniform version of the mean filter.
fn2=[121;242;121]
fn2 = fn2 * (1/16)
Recall that the uniform mean filter could be created by generating a 33 matrix of 1s, and then
multiplying each coefficient by a factor of 1/9. In the nonuniform mean filter implantation
above, note that the sum of all the original values in the filter equals 16this is why we divide
each coefficient by 16 in the second step. Figure 10.14 illustrates the previous two masks we
created
5. Filter the original image with the new, nonuniform averaging mask
I_new2 = imfilter(I,fn2);
figure, subplot(1,2,1), imshow(I_new), title(Uniform Average);
subplot(1,2,2), imshow(I_new2), title(Non-uniform Average);
6. Create a Gaussian filter and display the kernel as a 3D plot
fn_gau = fspecial(gaussian,9,1.5);
figure, bar3(fn_gau,b), ...
title(Gaussian filter as a 3D graph);
7. Filter the cameraman image using the Gaussian mask
I_new3 = imfilter(I,fn_gau);
figure
subplot(1,3,1), imshow(I), title(Original Image);
subplot(1,3,2), imshow(I_new), title(Average Filter);
subplot(1,3,3), imshow(I_new3), title(Gaussian Filter);
VIII. DETEKSI TEPI
Tujuan
Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan deteksi tepi dan
terkait teknik di MATLAB.
Objektif
Mempelajarin bagaimana penggunaan IPT edge function.
Mengekplore edge deteki yang paling popoler : Roberts, Sobel, dan Prewitt.
Jelajahi Marr-Hildreth Laplacian dari Gaussian detektor tepi.
Jelajahi detektor tepi Canny.
Mempelajari bagaimana menerapkan deteksi tepi dengan masker kompas (Kirsch dan
Robinson).
1. Edge Detection Using the Prewitt Operator
1. Load dan tampilkan test image.
I = imread(lenna.tif);
figure, subplot(2,2,1), imshow(I), title(Original Image);
2. Extract t edges pada gambar mengguankan Prewitt operator
[I_prw1,t1] = edge(I,prewitt);
subplot(2,2,2), imshow(I_prw1), title(Prewitt, default thresh);
Question 1 What does thet1variable represent? Edge detection methods are often compared by
their ability to detect edges in noisy images. Let us perform the Prewitt operator on the Lenna
image with additive Gaussian noise.
3. Tambahkan noise pada test image dan extract its edges.
I_noise = imnoise(I,gaussian);
[I_prw2,t2] = edge(I_noise,prewitt);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_prw2), title(Prewitt on noise);`
Question 2 How did the Prewitt edge detector perform in the presence of noise (compared to
no noise)?
Question 3 Did MATLAB use a different threshold value for the noisy image?
Question 4 Try using different threshold values. Do these different values affect the operators
response to noise? How does the threshold value affect the edges of the object?
2. Edge Detection Using the Sobel Operator
4. Extract the edges dari test image menggunakan Sobel edge detector.
[I_sob1,t1] = edge(I,'sobel');
figure, subplot(2,2,1), imshow(I), title('Original Image');
subplot(2,2,2), imshow(I_sob1), title('Sobel, default thresh');
5. Extract the edges dari test image dengan Gaussian noise using the Sobel edge
[I_sob2,t2] = edge(I_noise,sobel);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_sob2), title(Sobel on noise);
Question 5 How does the Sobel operator compare with the Prewitt operator with and without noise?
Another feature of the edge function isthinning, which reduces the thickness of the detected edges.
Although this feature is turned on by default, it can be turned off, which results in faster edge detection.
6. Extract the edges dari test image dengan the Sobel operator with no thinning.
I_sob3 = edge(I,sobel,nothinning);
figure, subplot(1,2,1), imshow(I_sob1), title(Thinning);
subplot(1,2,2), imshow(I_sob3), title(No Thinning);
Seperti yang Anda sudah tahu, operator Sobel benar-benar melakukan dua convolutions
(horizontal dan vertikal). Gambar-gambar individu dapat diperoleh dengan menggunakan
tambahan parameter output
7. Tampilkan hasil convoultion horizontal dan vertical dari Sobel operator.
[I_sob4,t,I_sobv,I_sobh] = edge(I,sobel);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_sob4), title(Complete Sobel);
subplot(2,2,3), imshow(abs(I_sobv),[]), title(Sobel Vertical);
subplot(2,2,4), imshow(abs(I_sobh),[]), title(Sobel
Horizontal);
Question 6 Why do we display the absolute value of the vertical and horizontal images?Hint:
Inspect the minimum and maximum values of these images.
Question 7 Change the code in step 7 to display thresholded (binarized), not thinned, versions
of all images.
As you may have noticed, theedgefunction returns the vertical and horizontal
images before any thresholding takes place
3. Edge Detection with the Roberts Operator
8. Extract the edges dari image asli menggunakan Roberts operator.
I_rob1 = edge(I,roberts);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_rob1), title(Roberts, default thresh);
9. Apply the Roberts operator to a noisy image
[I_rob2,t] = edge(I_noise,roberts);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_rob2), title(Roberts on noise);
Question 8 Compare the Roberts operator with the Sobel and Prewitt operators. How does it
hold up to noise?
Question 9 If we were to adjust the threshold, would we get better results whenfiltering the
noisy image?
Question 10 Suggest a method to reduce the noise in the image before performing edge
detection
4. Edge Detection with the Laplacian of a Gaussian Operato
10. Extract edges dari original image menggunakan LoG edge detector
I_log1 = edge(I,log);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_log1), title(LoG, default parameters);
11. Apply the LoG edge detector to the noisy image
[I_log2,t] = edge(I_noise,log);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_log2), title(LoG on noise);
5. Edge Detection with the Canny Operator
12. Extract edges dari original image menggunakan Canny edge detector.
I_can1 = edge(I,canny);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_log1), title(Canny, default
parameters);
13. Apply the filter to the noisy image.
[I_can2,t] = edge(I_noise,canny, [], 2.5);
subplot(2,2,3), imshow(I_noise), title(Image w/ noise);
subplot(2,2,4), imshow(I_can2), title(Canny on noise);
Seperti yang Anda tahu, detektor Canny pertama berlaku fungsi smoothing Gaussian
untuk gambar, diikuti oleh peningkatan tepi. Untuk mencapai hasil yang lebih baik pada
berisik gambar, kita dapat meningkatkan ukuran smoothing filter Gaussian melalui
thesigma parameter.
14. Apply the Canny detector on the noisy image wheresigma=2.
[I_can3,t] = edge(I_noise,canny, [], 2);
figure
subplot(1,2,1), imshow(I_can2), title(Canny, default
parameters);
subplot(1,2,2), imshow(I_can3), title(Canny, sigma = 2);
15. Close semua gambar yang telah terbuka dan clear all variabel di workspace
16. Load gambar mandrill dan perform Canny edge detector denga n parameter default
I = imread(mandrill.tif);
[I_can1,thresh] = edge(I,canny);
figure
subplot(2,2,1), imshow(I), title(Original Image);
subplot(2,2,2), imshow(I_can1), title(Canny, default
parameters);
17. Periksa isi variable thresh
18. Gunakan nilai batas yang lebih tinggi dari nilai variable theresh
[I_can2,thresh] = edge(I, canny, 0.4);
subplot(2,2,3), imshow(I_can2), title(Canny, thresh = 0.4);
19. Gunakan nilai threashold lebih rendah dari nilai variable threst
[I_can2,thresh] = edge(I, canny, 0.08);
subplot(2,2,4), imshow(I_can2), title(Canny, thresh = 0.08);
6. Edge Detection with the Kirsch Operator
20. Keluarkan semua gambar yang terbuka dan bersihkan variable di workspace
21. Load gambar mandrill dan convert menjadi format double
I = imread(mandrill.tif);
I = im2double(I);
Sebelumnya, ketika menggunakan fungsi edge, kita tidak perlu mengkonversi gambar untuk
kelas double karena fungsi tersebut menangani hal tersebut secara otomatis.
Karena sekarang kita menerapkan tepi detektor, kita harus melakukan konversi kelas untuk
menangani nilai negatif (mencegah pemotongan yang tidak diinginkan).
Selanjutnya menentukan delapan masker Kirsch. Untuk memudahkan pelaksanaan, Simpan
kedelapan dalam matrik 3 3 8. Gambar 14.18 mengilustrasikan format penyimpanan ini
22. Buat Kirsch masks dan simpan sebelum pengalokasian matrix
k = zeros(3,3,8);
k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5];
k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3];
k(:,:,3) = [5 5 5; -3 0 -3; -3 -3 -3];
k(:,:,4) = [5 5 -3; 5 0 -3; -3 -3 -3];
k(:,:,5) = [5 -3 -3; 5 0 -3; 5 -3 -3];
k(:,:,6) = [-3 -3 -3; 5 0 -3; 5 5 -3];
k(:,:,7) = [-3 -3 -3; -3 0 -3;5 5 5];
k(:,:,8) = [-3 -3 -3; -3 0 5; -3 5 5];
Selanjutnya kita harus membelit setiap mask pada gambar, menghasilkan delapan gambar. Kami
akan menyimpan gambar tersebut dalam matriks tiga dimensi seperti yang kita lakukan untuk
masker. karena semua masker disimpan dalam satu matriks, kita dapat menggunakan
perulangan melakukan semua delapan convolutions dengan garis kurang kode.
23. Convolve each mask with the image using aforloop.
I_k = zeros(size(I,1), size(I,2), 8);
for i = 1:8
I_k(:,:,i) = imfilter(I,k(:,:,i));
End
24. Tampilkan hasil gambar
figure
for j = 1:8
subplot(2,4,j), imshow(abs(I_k(:,:,j)),[]), ...
title([Kirsch mask , num2str(j)]);
end
25. Temukan nilai minimum
I_kir = max(I_k,[],3);
figure, imshow(I_kir,[]);
26. Buat fungsi transformasi pada map imate kedalam rentangan dan transformasi
m = 255 / (max(I_kir(:)) - min(I_kir(:)));
I_kir_adj = uint8(m * I_kir);
figure, imshow(I_kir_adj);
Question 18 Why is it not necessary to scale this image (I_kir_adj) when displaying it?
Question 19 Make a copy of themandrillimage and add Gaussian noise to it. Then perform the
Kirsch edge detector on it. Comment on its performance when noise is present
7. Edge Detection with the Robinson Operator
27. Generate the Robinson masks
r = zeros(3,3,8);
r(:,:,1) = [-1 0 1; -2 0 2; -1 0 1];
r(:,:,2) = [0 1 2; -1 0 1; -2 -1 0];
r(:,:,3) = [1 2 1;0 0 0;-1 -2 -1];
r(:,:,4) = [2 1 0; 1 0 -1; 0 -1 -2];
r(:,:,5) = [1 0 -1; 2 0 -2; 1 0 -1];
r(:,:,6) = [0 -1 -2;1 0 -1;2 1 0];
r(:,:,7) = [-1 -2 -1;0 0 0;1 2 1];
r(:,:,8) = [-2 -1 0; -1 0 1;0 1 2];
28. Filter gambar dengan outpu ttampila delapan Robinson masks
I_r = zeros(size(I,1), size(I,2), 8);
for i = 1:8
I_r(:,:,i) = imfilter(I,r(:,:,i));
end
figure
for j = 1:8
subplot(2,4,j), imshow(abs(I_r(:,:,j)),[]), ...
title([Robinson mask , num2str(j)]);
end
29. Kalkulasikan nilai maksimum dari kedelapan gambar dan tampilkan hasilnya
I_rob = max(I_r,[],3);
figure, imshow(I_kir,[]);
IX. PERBAIKAN KUALITAS CITRA
Citra direpresentasikan dalam bentuk matrik. Berbagai macam citra disimpan menggunakan
format berbeda seperti bmp, png, gif, jpg atau format lainnya. Tidak semua citra yang diperoleh
menggunakan kamera atau device lain menghasilkan citra berkuatlitas yang disebabkan oleh
factor pencahayaan, kondisi objek maupun kamera yang digunakan, sehingga perlu perbaikan
kualitas citra menggunakan beberapa metode, diantaranya adalah :
1. Operasi titik, perbaikan dilakukan menggunakan operasi piksel
a. Penambahan dan pengurangan intensitas citra
b. Histogram
2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik
a. Low Pass Filter
b. High Pass Filter
c. Median Filter
1.Operasi titik penambahan dan pengurangan intensitas
Operasi ini dilakukan dengan melakukan manipulasi nilai gray citra pada setiap titik, misalkan suatu
citra cameraman.tif akan ditambah kecarahannya atau dikurangi kecerahannya (misalkan untuk setiap
piksel akan ditambah 100 untuk menambah kecerahan dan mengurangi 50 untuk mengurangi
kecerahan citra), maka code dalam matlab dapat dilihat pada berikut ini
a=imread('cameraman.tif');
b=a+100;
c=a-50;
imshow([a b c]);
a.Operasi titik melalui ekualisasi histogram
Perbaikan citra menggunakan histogram merupakan cara yang paling banyak digunakan oleh pada
peneliti. Pada prinsipnya ekualisasi histogram melakukan pemerataan dist ribusi gray yang ada pada
citra sebagaimana terlihat pada code berikut ini
a=imread('cameraman.tif');
b=histeq(a);
imshow([a b]);
2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik LPF
Model perbaikan citra tersebut dengan memanfaatkan mask matrik yang didefinisikan terlebih
dahulu sebelum operasi konvolusi dilakukan.
Mask LPF berfungsi untuk meratakan/menghilangkan noise. Model operasi ruang tersebut
adalah menggunakan model konvolusi. Berikut merupakan code nya
a=imread('cameraman.tif');
LPF=ones(3)/9;
J=conv2(double(a),LPF,'same');
imshow(uint8(J))
Perbedaan yang sangat signifikan dapat dilihat dengan mengubah ukuran matrik mask yang
digunakan, misalkan menggunakan matrik mask ukuran 9x9 sebagaimana pada code program
berikut
a=imread('cameraman.tif');
LPF=ones(9)/81;
J=conv2(double(a),LPF,'same');
imshow(uint8(J))
Citra yang diproses dari code program tersebut akan terlihat lebih blur, sehingga model mask
LPF akan lebih tepat jika digunakan untuk menghilangkan noise citra.
a. Operasi ruang, perbaikan dilakukan menggunakan mask matrik HPF
Mask High Pass Filter mempunyai fungsi yang berbeda dengan Low Pass Filter LPF. Untuk mask HPF
berfungsi menajamkan tepi objek, adapun mask matrik yang digunakan mempunyai nilai negative pada
tepi-tepinya
a=imread('cameraman.tif');
HPF=ones(3)*-1;
HPF(2,2)=9;
J=conv2(double(a),HPF,'same');
imshow([a uint8(J)]);
Mask matrik lain untuk HPF dapat dicoba menggunakan mask berikut ini
b.Operasi ruang, perbaikan dilakukan menggunakan median filter
Median filter adalah dengan meletakkan nilai tengah setelah nilai piksel diurutkan secara
increasing. Metode ini biasanya digunakan untuk menghilangkan noise pada citra. Contoh program
dapat dilihat pada code berikut ini
a=imread('cameraman.tif');
MED = medfilt2(a,[3 3]);
imshow([a MED]);
Untuk melihat efek dari median filter, coba gunakan citra yang ada noisenya atau membuat citra sendiri
dan diberi noise. Kemudian operasikan menggunakan median filter