Edge Detection

By | January 15, 2021
1,931 Views

Sinopsis

Deteksi tepi/edge detection banyak digunakan untuk analisis citra dalam tingkat dasar. Operasi ini diterapkan dalam grayscale; binary/logical/bw pada gambar. Secara umum deteksi tepi gambar dibagi  menjadi 2 yaitu

  1. Deteksi tepi berdasarkan turunan pertama
  2. Deteksi tepi berdasarkan turunan kedua

Kalian akan belajar bahwa deteksi tepi/Edge Detection merupakan penerapan teknik convolution dengan beberapa jenis filter. Jenis filter tertentu digunakan untuk menghasilkan sensitifitas terhadap tepian objek

Deteksi tepi Turunan pertama

Menggunakan operator convolution dengan beberapa jenis kernel/filter yaitu robert, canny, prewit dengan menggunakan 2 arah yaitu arah x dan y untuk mendapatkan tepian vertikal dan horisontal. Untuk mendapatkan hasil yang maksimal, juga bisa menggunakan penerapan gradient, dengan rumus umum berikut Jika G_x dan G_y adalah filter/kernel, maka G gradient dapat dirumuskan

    \[|G|=\sqrt{G_x^2+G_y^2}\]

Operator Robert

    \[G_x \begin{pmatrix} 1 & 0\\ 0 & -1\\ \end{pmatrix}\]

    \[G_y \begin{pmatrix} 0 & 1\\ -1 & 0\\ \end{pmatrix}\]

Operator Sobel

    \[G_x \begin{pmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1 \end{pmatrix}\]

    \[G_y \begin{pmatrix} -1 & 0 & 1\\ 2 & 0 & 2\\ -1 & 0 & 1\\ \end{pmatrix}\]

Operator Prewitt

    \[G_x \begin{pmatrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1\\ \end{pmatrix}\]

    \[G_y \begin{pmatrix} -1 & 0 & 1\\ 1 & 0 & 1\\ -1 & 0 & 1\\ \end{pmatrix}\]

Operator Canny

    \[G_{xy}=\frac{1}{115} \begin{pmatrix} 2 & 4 & 5 & 4 & 2\\ 4 & 9 & 12 & 9 & 4\\ 5 & 12 & 15 & 12 & 5\\ 4 & 9 & 12 & 9 & 4\\ 2 & 4 & 5 & 4 & 2\\ \end{pmatrix}\]

Penerapan Edge Detection dengan Convolution

Untuk penerapan edge detection turunan pertama, kalian bisa menggunakan convolution seperti dalam bahasa python yaitu disini  https://www.softscients.web.id/2019/11/edge-detection-dengan-sobel.html. Dalam versi Matlab, kalian bisa menggunakan kode berikut untuk operator robert untuk format binary yang harus kalian ubah kedalam skala 0 s.d 255

clc;clear all;close all;
I = imread('orientasi.png');
bw = im2bw(I); %ubah kedalam binary 0 dan 1
bw = double(bw)*255; %buat skala menjadi 0 s.d 255
Gx = [1,0; 0,-1];
Gy = [0,1; -1,0];
 
Hx = conv2(double(bw),Gx);
Hy = conv2(double(bw),Gy);
gradient = sqrt(Hx.^2+Hy.^2);
 
figure,imshow(uint8(bw)),title('grayscale');
figure,imshow(uint8(Hx)),title('arah X');
figure,imshow(uint8(Hy)),title('arah y');
figure,imshow(uint8(gradient)),title('Gradient');

Kalian bisa melihat, gambar tersebut sudah muncul tepinya saja, kalian juga menggunakan objek lain seperti berikut untuk mode gambar grayscale.

clc;clear all;close all;
I = imread('bunga.jpg');
gray = rgb2gray(I);
Gx = [1,0; 0,-1];
Gy = [0,1; -1,0];
 
Hx = conv2(double(gray),Gx);
Hy = conv2(double(gray),Gy);
gradient = sqrt(Hx.^2+Hy.^2);
gradient = gradient*2; %agar lebih terlihat tepinya kali 2
 
 
figure,imshow(gray),title('grayscale');
figure,imshow(uint8(Hx)),title('arah X');
figure,imshow(uint8(Hy)),title('arah y');
figure,imshow(uint8(gradient)),title('Gradient');

Penerapan Edge Detection dengan Function Edge

Kode sebelumnya terasa agak panjang sekali, sebenarnya kalian bisa menggunakan function edge di matlab yaitu gambar tersebut dalam mode binary/bw. Contohnya seperti berikut

clc;clear all;close all;
I = imread('orientasi.png');
bw = im2bw(I); %ubah kedalam binary 0 dan 1
canny = edge(bw,'canny'); %harus format binary, bukan grayscale
 
figure,imshow(bw),title('asli');
figure,imshow(canny),title('canny');