Materi
Kernel penajam [[0, −1, 0], [−1, 5, −1], [0, −1, 0]] mengambil lima kali piksel tengah dikurangi empat tetangganya. Jumlah bobotnya 1, sehingga daerah rata tidak berubah; di tepi, selisih dengan tetangga diperbesar sehingga batas tampak lebih tegas. Hasilnya bisa di bawah 0 atau di atas 255, jadi konvolusi dikerjakan di float lalu dipotong dengan np.clip sebelum kembali ke uint8.
Tepi adalah tempat kecerahan berubah tajam, yaitu gradien yang besar. Galeri scikit-image menjelaskan bahwa operator tepi seperti Sobel, Prewitt, dan Scharr menghitung hampiran beda hingga dari gradien. scipy.ndimage.sobel(input, axis) menghitung gradien Sobel di satu sumbu. Dokumentasinya menyebut tepi horizontal ditonjolkan oleh axis=0 dan tepi vertikal oleh axis=1, dan keduanya bisa digabung menjadi besar gradien. Besar gradien adalah √(gx² + gy²), yang dihitung np.hypot(gx, gy) per elemen.
Setelah besar gradien diketahui, tepi dipilih dengan ambang: piksel yang gradiennya melewati ambang dianggap tepi.
import numpy as np
from scipy import ndimage
cakrawala = np.array([[50] * 4, [50] * 4, [150] * 4], dtype=float) # tepi mendatar
gy = ndimage.sobel(cakrawala, axis=0)
gx = ndimage.sobel(cakrawala, axis=1)
print(gy[1], gx[1]) # gy besar, gx nol: tepinya horizontal