Skip to content

Instantly share code, notes, and snippets.

@wpcarro
Created May 22, 2024 18:18
Show Gist options
  • Save wpcarro/746784685c103209bb956ea3b76f5c3a to your computer and use it in GitHub Desktop.
Save wpcarro/746784685c103209bb956ea3b76f5c3a to your computer and use it in GitHub Desktop.
Using convolution for horizontal edge detection.
// 5x5 image
const image = [
[1, 2, 3, 4, 5],
[5, 4, 3, 2, 1],
[0, 2, 4, 6, 8],
[8, 6, 4, 2, 0],
[3, 4, 5, 2, 1],
];
// seeded for horizontal edge-detection
const kernel_x = [
[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1],
];
type Point = { row: number, col: number };
function convolve_step(image: number[][], center: Point, kernel: number[][]) {
return (
// top
(image[center.row - 1]?.[center.col - 1] ?? 0) * kernel[0][0] +
(image[center.row - 1]?.[center.col] ?? 0) * kernel[0][1] +
(image[center.row - 1]?.[center.col + 1] ?? 0) * kernel[0][2] +
// middle
(image[center.row]?.[center.col - 1] ?? 0) * kernel[1][0] +
(image[center.row]?.[center.col] ?? 0) * kernel[1][1] +
(image[center.row]?.[center.col + 1] ?? 0) * kernel[1][2] +
// bottom
(image[center.row + 1]?.[center.col - 1] ?? 0) * kernel[1][0] +
(image[center.row + 1]?.[center.col] ?? 0) * kernel[1][1] +
(image[center.row + 1]?.[center.col + 1] ?? 0) * kernel[1][2]
);
}
const output = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
]
for (let row = 0; row < 5; row += 1) {
for (let col = 0; col < 5; col += 1) {
output[row][col] = convolve_step(image, {row, col}, kernel_x);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment