fast-sobel-tfjs
Version:
GPU-accelerated Sobel edge detection for TensorFlow.js - 5-10x faster than CPU implementations
73 lines (72 loc) • 1.98 kB
JavaScript
/**
* Pre-defined Sobel kernels for different sizes
*/
export const KERNELS = {
x: {
// 3×3 horizontal gradient kernel
3: [
[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]
],
// 5×5 horizontal gradient kernel
5: [
[-1, -2, 0, 2, 1],
[-4, -8, 0, 8, 4],
[-6, -12, 0, 12, 6],
[-4, -8, 0, 8, 4],
[-1, -2, 0, 2, 1]
],
// 7×7 horizontal gradient kernel
7: [
[-1, -4, -5, 0, 5, 4, 1],
[-6, -20, -30, 0, 30, 20, 6],
[-15, -50, -75, 0, 75, 50, 15],
[-20, -60, -90, 0, 90, 60, 20],
[-15, -50, -75, 0, 75, 50, 15],
[-6, -20, -30, 0, 30, 20, 6],
[-1, -4, -5, 0, 5, 4, 1]
]
},
y: {
// 3×3 vertical gradient kernel
3: [
[-1, -2, -1],
[],
[]
],
// 5×5 vertical gradient kernel
5: [
[-1, -4, -6, -4, -1],
[-2, -8, -12, -8, -2],
[],
[],
[]
],
// 7×7 vertical gradient kernel
7: [
[-1, -6, -15, -20, -15, -6, -1],
[-4, -20, -50, -60, -50, -20, -4],
[-5, -30, -75, -90, -75, -30, -5],
[],
[],
[],
[]
]
}
};
/**
* Validates whether a kernel size is supported
* @param size The kernel size to validate
* @returns True if the kernel size is supported, false otherwise
*/
export function isValidKernelSize(size) {
return size in KERNELS.x;
}
/**
* Gets the available kernel sizes as an array
* @returns Array of supported kernel sizes
*/
export function getAvailableKernelSizes() {
return Object.keys(KERNELS.x).map(Number);
}