import cv2 import numpy as np def crop_circle(img): h, w = img.shape[:2] center = (w // 2, h // 2) radius = min(center[0], center[1]) Y, X = np.ogrid[:h, :w] dist = np.sqrt((X - center[0]) ** 2 + (Y - center[1]) ** 2) mask = dist <= radius if img.ndim == 3: mask = np.stack([mask] * 3, axis=-1) img[~mask] = 0 return img def apply_clahe(img): lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB) l, a, b = cv2.split(lab) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) cl = clahe.apply(l) merged = cv2.merge((cl, a, b)) return cv2.cvtColor(merged, cv2.COLOR_LAB2RGB) def sharpen_image(img, sigma=10): blur = cv2.GaussianBlur(img, (0, 0), sigma) return cv2.addWeighted(img, 4, blur, -4, 128) def resize_normalize(img, size=(224, 224)): img = cv2.resize(img, size) img = img / 255.0 return img def preprocess_image(image): img = np.array(image) img = crop_circle(img) img = apply_clahe(img) img = sharpen_image(img) img = resize_normalize(img) return img.astype(np.float32)