Oleh:
SUHENDI
1311600959
PROGRAM PASCASARJANA
JAKARTA
2015
BAB. I PENDAHULUAN
Penentuan tepian suatu objek dalam citra merupakan salah satu wilayah pengolahan
citra digital yang paling awal dan paling banyak diteliti. Proses ini seringkali ditempatkan
sebagai langkah pertama dalam aplikasi segmentasi citra, yang bertujuan untuk
mengenali objek-objek yang terdapat dalam citra ataupun konteks citra secara
keseluruhan.
Deteksi tepi berfungsi untuk mengidentifikasi garis batas (boundary) dari suatu objek
yang terdapat pada citra. Tepian dapat dipandang sebagai lokasi piksel dimana terdapat
nilai perbedaan intensitas citra secara ekstrem. Sebuah edge detector bekerja dengan
cara mengidentifikasi dan menonjolkan lokasi-lokasi piksel yang memiliki karakteristik
tersebut.
1. Operator Gradien
Pada citra digital f(x,y), turunan berarah sepanjang tepian objek akan bernilai maksimum
pada arah normal dari kontur tepian yang bersesuaian. Sifat ini dipergunakan sebagai
dasar pemanfaatan operator gradien sebagai edge detector.
Operator gradien citra konvensional melakukan diferensiasi intensitas piksel pada arah
baris dan kolom, mengikuti persamaan local intensity variation berikut :
Nilai magnitudo gradien |∇(x,y)| dari persamaan di atas dapat dinyatakan sebagai
berikut:
Operator gradien dapat direpresentasikan oleh dua buah kernel konvolusi Gx dan Gy, yang
masing-masing mendefinisikan operasi penghitungan gradien dalam arah sumbu x dan
sumbu y yang saling tegak lurus.
Dalam kasus penghitungan gradien dengan persamaan local intensity variation, maka
kernel Gx dan Gy dapat dirumuskan seperti berikut:
Berikut adalah contoh fungsi Matlab untuk operasi penghitungan gradien orde satu:
I = double(imread('cameraman.tif'));
gx = [-1 1];
Ix = conv2(I,gx,'same');
gy = [-1;1];
Iy = conv2(I,gy,'same');
% Magnitudo gradien
J = sqrt((Ix.^2)+(Iy.^2));
% Gambar hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');
Dari operator gradien konvensional di atas, dapat diturunkan berbagai operator gradien
berikut:
d1y = [-1;0;1];
Ix = conv2(I,d1x,'same');
Iy = conv2(I,d1y,'same');
J = sqrt((Ix.^2)+(Iy.^2));
% Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');
I = double(imread('cameraman.tif'));
% Konvolusi dengan operator Roberts
robertshor = [0 1; -1 0];
robertsver = [1 0; 0 -1];
Ix = conv2(I,robertshor,'same');
Iy = conv2(I,robertsver,'same');
J = sqrt((Ix.^2)+(Iy.^2));
% Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');
I = imread('cameraman.tif');
J = edge(I,'roberts');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');
I = double(imread('cameraman.tif'));
%Konvolusi dengan operator Prewitt
Ix = conv2(I,prewitthor,'same');
Iy = conv2(I,prewittver,'same');
J = sqrt((Ix.^2)+(Iy.^2));
%Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');
I = imread('cameraman.tif');
J = edge(I,'prewitt');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');
1
Perintah edge (pada toolbox Matlab) untuk mensimulasikan operator Prewitt, Roberts, Sobel, dan lainnya
memiliki konsep dasar yang sama dengan operasi konvolusi kernel setiap operator secara manual. Bedanya,
perintah edge menambahkan suatu skema thresholding secara otomatis, sehingga dihasilkan citra keluaran
yang bersifat biner (bernilai 0 atau 1).
I = double(imread('cameraman.tif'));
Ix = conv2(I,sobelhor,'same');
Iy = conv2(I,sobelver,'same');
J = sqrt((Ix.^2)+(Iy.^2));
%Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');
I = imread('cameraman.tif');
J = edge(I,'sobel');
figure,imagesc(I),colormap('gray'),colorbar('vert');
A. original
G 1 = 2G = [(c - g - a + i) + 2(/ - d), (c - g + a - i) + 2(b - h)]
+1 +2 +1 -1 0 +1
-2 0 +2 -2 0 +2
-1 0 +1 -1 0 +1
Vertical
-5 -4 0 4 5
-8 -10 0 10 8
-10 -20 0 20 10
-8 -10 0 10 8
-5 -4 0 4 5
Horizontal
5 8 10 8 5
4 10 20 10 4
0 0 0 0 0
-5 -8 -10 -8 -5
Untuk memperjelas dalam melakukan pergantian operator diatas maka akan dibuat
simulasi dibawah ini.
B. operator change
perintah untuk melakukan konvolusi terhadap matriks I yang berukuran 5×5 dan
kernel yang berukuran 3×3 adalah sebagai berikut :
function B = convolve(A, k); [r c] = size(A);
[m n] = size(k);
h = rot90(k, 2);
center = floor((size(h)+1)/2);
left = center(2) -
1; right = n -
center(2); top =
center(1) - 1;
bottom = m -
center(1);
Rep = zeros(r + top + bottom, c + left + right);
for x = 1 + top : r
+ top for y = 1
+ left : c + left
Rep(x,y) = A(x - top, y - left);
end
end
B=
zeros(r ,
c); for x =
1:r
for y = 1
: c for i
=1:m
for j = 1 : n
q = x - 1;
w = y -1;
B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
end
end
end
end
Selanjutnya untuk menguji keberhasilan source code di atas, buatlah suatu m-file
lagi dan tuliskan source code di bawah ini :
clear; clc;
clear; clc;
I = [4 4 3 5 4;
6 6 5 5 2;
5 6 6 6 2;
6 7 5 5 3;
3 5 2 4 4];
k = [0 -1 0;
-1 4 -1;
0 -1 0];
Hsl = convolve(I, k)
Hsl =
6 3 -2 8 9
9 3 0 2 -3
2 0 2 6 -3
9 6 0 2 1
1 8 -6 5 9
Hasil konvulsi
perintah untuk melakukan neighborhood averaging dengan kernel berukuran
3×3:
clear; clc;
A = imread('hendi.png);
A = imnoise(A, 'salt & pepper', 0.01);
k = ones(3)/ 9;
[r c] = size(A);
[m n] = size(k);
h = rot90(k, 2);
center = floor((size(h)
+1)/2); left =
center(2) - 1;
right = n - center(2);
top = center(1) -
1; bottom = m -
center(1);
Rep = zeros(r + top + bottom, c + left + right);
Median Filtering
for i= 1:size(modifyA,1)-2
for j=1:size(modifyA,2)-2
window=zeros(9,1);
inc=1;
for x=1:3
for y=1:3
window(inc)=modifyA(i+x-1,j+y-1);
inc=inc+1;
end
end
med=sort(window);
%PLACE THE MEDIAN ELEMENT IN THE OUTPUT MATRIX
B(i,j)=med(5);
end
end
%CONVERT THE OUTPUT MATRIX TO 0-255 RANGE IMAGE TYPE
B=uint8(B);
title('IMAGE AFTER MEDIAN FILTERING');
figure,imshow(B);
1. Operator Sobel
function B = convolve(A, k)
[r, c] = size(A);
[m, n] = size(k);
h = rot90(k, 2);
center = floor((size(h)+1)/2);
left = center(2) - 1;
right = n - center(2);
top = center(1) - 1; bottom = m - center(1);
Rep = zeros(r + top + bottom, c + left + right);
for x = 1 + top : r + top
for y = 1 + left : c + left
Rep(x,y) = A(x - top, y - left);
end
end
B = zeros(r , c);
for x = 1 : r
for y = 1 : c
for i = 1 : m
for j = 1 : n
q = x - 1;
w = y -1;
B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
end
end
end
end
if Array(x, y) >= T
Hasil(x, y) = 1;
else
Hasil(x, y) = 0;
end
end
end
Program sobel
clear; clc;
I = imread('hendi.png');
Hsl = edge_detection(im2double(I), 0.04);
figure, imshow(im2uint8(Hsl));
function B = convolve(A, k)
[r, c] = size(A);
[m, n] = size(k);
h = rot90(k, 2);
center = floor((size(h)+1)/2);
left = center(2) - 1;
right = n - center(2); top = center(1) - 1; bottom = m -
center(1);
Rep = zeros(r + top + bottom, c + left + right);
for x = 1 + top : r + top
for y = 1 + left : c + left
Rep(x,y) = A(x - top, y - left);
end
end
B = zeros(r , c);
for x = 1 : r
for y = 1 : c
for i = 1 : m
for j = 1 : n
q = x - 1;
w = y -1;
B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
end
end
end
end
I = imread('hendi.png');
Hsl = laplacian(im2double(I), 0.04);
imshow(I);
figure, imshow(im2uint8(Hsl));
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = sobel_suhendi_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
Hasil Sobel :
Hasil canny :
KESIMPULAN :
1. Dilihat dari hasil pembahasan diatas maka hasil operator LOG cukup
baik namun tetap masih lebih akurat atau detail adalah operator Sobel.
2. Dalam kasus ini, ternyata operator cain tidak cock untuk algpritma ini.
3. Pembahasan analisa operator ini bisa sebagai data untuk memperkuat
dari jurnal sebelumnya yaitu tentang “Sobel Edge Detection
Algorithm”
Referensi :
[1] Modul Praktikum Pengolahan Citra Digital 2014 – 2015, labpcmud_itn.com ©2015 Laboratorium
Multimedia & Pengolahan Citra
[2] Sobel Edge Detection Algorithm, Samta Gupta Susmita Ghosh Mazumdar, International Journal of
Computer Science and Management Research, Volume (3) Issue.