import cv2 | |
import numpy as np | |
def unsharp_masking(img, kernel_size=5, threshold=2.0): | |
if kernel_size % 2 == 0: | |
kernel_size += 1 # Ensure the kernel size is odd | |
gaussian = cv2.GaussianBlur(img, (kernel_size, kernel_size), 2.0) | |
unsharp_mask = cv2.addWeighted(img, threshold, gaussian, -1.0, 0) | |
# Clip the pixel values to the valid range [0, 255] | |
unsharp_mask = np.clip(unsharp_mask, 0, 255) | |
# Normalize the image to bring pixel values back to [0, 255] | |
cv2.normalize(unsharp_mask, unsharp_mask, 0, 255, cv2.NORM_MINMAX) | |
return unsharp_mask | |