Skip to content
Snippets Groups Projects
compute_cost_image.py 1.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • from skimage.feature import canny
    from scipy.signal import convolve2d
    from compute_disk_size import compute_disk_size
    from load_image import load_image
    from preprocess_image import preprocess_image
    from circle_edge_kernel import circle_edge_kernel
    
    Christian's avatar
    Christian committed
    import numpy as np
    
    def compute_cost_image(path: str, user_radius: int, sigma: int = 3, clip_limit: float = 0.01) -> np.ndarray:
        """
        Compute the cost image for a given image path, user radius, and optional parameters.
        
        Args:
            path: The path to the image file.
            user_radius: The radius of the disk.
            sigma: The standard deviation for Gaussian smoothing.
            clip_limit: The limit for contrasting the image.
    
        Returns:
            The cost image as a NumPy array.
        """
    
        disk_size = compute_disk_size(user_radius)
    
    
    Christian's avatar
    Christian committed
        # Load image
    
        image = load_image(path)
    
        # Apply smoothing
        smoothed_img = preprocess_image(image, sigma=sigma, clip_limit=clip_limit)
    
        # Apply Canny edge detection
        canny_img = canny(smoothed_img)
    
    
    Christian's avatar
    Christian committed
        # Perform disk convolution
    
        binary_img = canny_img
        kernel = circle_edge_kernel(k_size=disk_size)
        convolved = convolve2d(binary_img, kernel, mode='same', boundary='fill')
    
        # Create cost image
        cost_img = (convolved.max() - convolved)**4  # Invert edges: higher cost where edges are stronger
    
        return cost_img