Loading...
Implement efficient separable convolution using the separability property.
A 2D filter K is separable if K=hvT (outer product of two 1D filters).
Computational advantage:
Algorithm:
Gaussian, box, and Sobel filters are all separable!
image = 5×5 array kernel = [[1,2,1],[2,4,2],[1,2,1]] # Separable (Gaussian-like)
{'result': convolved_image, 'is_separable': True}Check separability via SVD: kernel = [[1,2,1],[2,4,2],[1,2,1]] SVD: Only one non-zero singular value → rank 1 → separable!
Extract: h = [1,2,1], v = [1,2,1]
Apply h horizontally, then v vertically. Result same as direct 2D convolution but faster.