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- Deteksi tepi berdasarkan turunan pertama
- Deteksi tepi berdasarkan turunan kedua
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 berikutclc;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');
No comments:
Post a Comment