-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreprocessing.py
More file actions
42 lines (38 loc) · 1.83 KB
/
Copy pathpreprocessing.py
File metadata and controls
42 lines (38 loc) · 1.83 KB
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
42
# preprocessing.py
import cv2
import numpy as np
from PIL import Image
from torchvision import transforms
class ImagePreprocessor:
def __init__(self, clip_limit_l=5.0, clip_limit_ab=1.5, tile_grid_size=(8, 8), gamma_scale=1.2):
self.clip_limit_l = clip_limit_l
self.clip_limit_ab = clip_limit_ab
self.tile_grid_size = tile_grid_size
self.gamma_scale = gamma_scale
self.transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
])
def apply_clahe(self, image):
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe_l = cv2.createCLAHE(clipLimit=self.clip_limit_l, tileGridSize=self.tile_grid_size)
clahe_ab = cv2.createCLAHE(clipLimit=self.clip_limit_ab, tileGridSize=self.tile_grid_size)
l_clahe = clahe_l.apply(l)
a_clahe = clahe_ab.apply(a)
b_clahe = clahe_ab.apply(b)
lab_clahe = cv2.merge((l_clahe, a_clahe, b_clahe))
return cv2.cvtColor(lab_clahe, cv2.COLOR_LAB2BGR)
def adaptive_gamma_correction(self, image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
mean_intensity = np.mean(gray) / 255.0
gamma = np.clip(1.0 + (self.gamma_scale - 1.0) * (0.5 - mean_intensity), 0.5, 2.0) if mean_intensity > 0 else 1.0
lookup_table = np.array([np.clip(((i / 255.0) ** gamma) * 255, 0, 255) for i in range(256)]).astype(np.uint8)
return cv2.LUT(image, lookup_table)
def preprocess(self, image):
img_gamma = self.adaptive_gamma_correction(image)
img_clahe = self.apply_clahe(img_gamma)
img_rgb = cv2.cvtColor(img_clahe, cv2.COLOR_BGR2RGB)
img_pil = Image.fromarray(img_rgb)
return self.transform(img_pil)