
4,524 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 rentang 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 dan
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
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