import numpy as np from typing import Optional def circle_edge_kernel(k_size: int = 5, radius: Optional[int] = None) -> np.ndarray: """ Create a k_size x k_size array whose values increase linearly from 0 at the center to 1 at the circle boundary (radius). Args: k_size: The size (width and height) of the kernel array. radius: The circle's radius. By default, set to (k_size-1)/2. Returns: kernel: The circle-edge-weighted kernel. """ if radius is None: # By default, let the radius be half the kernel size radius = (k_size - 1) / 2 # Create an empty kernel kernel = np.zeros((k_size, k_size), dtype=float) # Coordinates of the center center = radius # same as (k_size-1)/2 if radius is default # Fill the kernel for y in range(k_size): for x in range(k_size): dist = np.sqrt((x - center)**2 + (y - center)**2) if dist <= radius: # Weight = distance / radius => 0 at center, 1 at boundary kernel[y, x] = dist / radius return kernel