File size: 1,092 Bytes
8dadb2a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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)
|