Edge Sobel

By | January 15, 2021
Print Friendly, PDF & Email
3,978 Views

Sinopsis

Operasi morfologi yang banyak digunakan untuk binary yaitu edge detection. Ada banyak jenis-jenis edge detection yaitu sobel, prewit, robert, dan canny yang dibedakan atas jenis kernelnya. Pada postingan yang akan dibahas ini yaitu sobel. Kenapa Dibahas? walaupun sudah banyak membahas dokumentasinya juga! dikarenakan untuk memperjelas penggunaan deteksi sobel yang di dokumentasi opencv terdiri dari arah sumbu X dan sumb Y serta ada penggunaan library skimage (scikit image)

Edge Detection menggunakan operator Sobel bisa dilakukan dengan teknik menggabungkan  gradient, lebih lanjut kamu bisa ulasan berikut ini agar kamu lebih mengerti edge detection Sobel. Sebagai bahan percobaan bahwa gambar input yang digunakan berformat grayscale bukan hitam putih seperti diatas postingan ini, maka agar dibaca grayscale oleh OpenCV, cukup berikan flag=0
test_image = cv2.imread('bunga.jpg',0)

maka test_image akan berformat uint8 yang berarti unsigned integer alias bilangan bulat positif (tidak mengandung koma) dengan nilai rentang2^2 atau dari 0 sampai dengan 255.

OpenCV – Operator Sobel

Edge detection / Deteksi tepi operator sobel pada OpenCV  menggunakan function berikut
cv2.Sobel(original_image,ddepth,xorder,yorder,kernelsize)

Sehingga ada 2 arah yaitu sobel_x dan sobel_y

import cv2
import numpy as np
from matplotlib import pyplot as plt


test_image = cv2.imread('bunga.jpg',0) #gambar dibaca grayscale

#cv2.Sobel(original_image,ddepth,xorder,yorder,kernelsize)
#tanda cv2.CV_64F adalah format grayscale 64 bit (true color)
#sedangkan cv2.CV_8U adalah format binary atau 8 bit (hitam putih)
sobelx = cv2.Sobel(test_image,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(test_image,cv2.CV_64F,0,1,ksize=3)

plt.figure()
plt.subplot(1,2,1),plt.imshow(sobelx,cmap='gray'),plt.title('Penerapan Sobel X')
plt.subplot(1,2,2),plt.imshow(sobely,cmap='gray'),plt.title('Penerapan Sobel Y')

Agar didapatkan egde, maka perlu kita terapkan rumus berikut

    \[|G|=\sqrt{I_{x}^2+I_{y}^2}\]

    \[\theta(x,y)=arctan \begin{pmatrix} \frac{I_y}{I_x} \end{pmatrix}\]

Dengan G disebut gradient dan theta disebut dengan orientation. Sehingga kode lengkap untuk rumus diatas bila diterapkan menjadi berikut

import cv2
import numpy as np
from matplotlib import pyplot as plt


test_image = cv2.imread('bunga.jpg',0) #gambar dibaca grayscale

#cv2.Sobel(original_image,ddepth,xorder,yorder,kernelsize)
#tanda cv2.CV_64F adalah format grayscale 64 bit (true color)
#sedangkan cv2.CV_8U adalah format binary atau 8 bit (hitam putih)
sobelx = cv2.Sobel(test_image,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(test_image,cv2.CV_64F,0,1,ksize=3)

plt.figure()
plt.subplot(1,2,1),plt.imshow(sobelx,cmap='gray'),plt.title('Penerapan Sobel X')
plt.subplot(1,2,2),plt.imshow(sobely,cmap='gray'),plt.title('Penerapan Sobel Y')



G = np.sqrt(sobely**2+sobelx**2)
theta = np.arctan2(sobely, sobelx)

plt.figure()
plt.imshow(np.uint8(G),cmap='gray')
plt.title('Penerapan Sobel ')

Scikit Image Operator Sobel

Kalau kamu tidak ingin ribet, bisa menggunakan scikit-image atau disingkat dengan skimage, kodenya sangat simple sekali hanya meggunakan function sobel
import cv2
import numpy as np
from matplotlib import pyplot as plt
from skimage.filters import  sobel

test_image = cv2.imread('bunga.jpg',0) #gambar dibaca grayscale


edge_sobel = sobel(test_image)

plt.figure()
plt.imshow(edge_sobel,cmap='gray')
plt.title('Penerapan Sobel skimage ')

Perbedaan hasil dikarenakan perbedaan jenis kernel yang digunakan, bila ingin menggunakan jenis kernel yang lain, bisa menggunakan teknik convolution

Ref:

Leave a Reply