Spaces:
Build error
Build error
| import os | |
| from PIL import Image | |
| import numpy as np | |
| import cv2 | |
| # Cropping | |
| def crop_black_background(image): | |
| gray = np.array(image.convert('L')) # grayscale | |
| _, thresh = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) # Threshold to identify dark pixels | |
| coords = np.column_stack(np.where(thresh > 0)) # Find coordinates of non-black pixels | |
| if coords.size == 0: # if image is all black report error | |
| return "error" | |
| # Determine the bounding box of the non-black area and crop the image | |
| x0, y0, x1, y1 = coords[:, 1].min(), coords[:, 0].min(), coords[:, 1].max(), coords[:, 0].max() | |
| cropped_image = image.crop((x0, y0, x1, y1)) | |
| return cropped_image | |
| # Apply CLAHE | |
| def apply_clahe(image): | |
| img_np = np.array(image) # Convert to numpy array | |
| lab = cv2.cvtColor(img_np, cv2.COLOR_RGB2LAB) # Convert RGB to LAB color space | |
| l, a, b = cv2.split(lab) # Split LAB image into channels | |
| clahe = cv2.createCLAHE(clipLimit=1.0, tileGridSize=(4, 4)) # Create CLAHE object | |
| cl = clahe.apply(l) # Apply CLAHE to the L-channel | |
| limg = cv2.merge((cl, a, b)) # Merge enhanced L-channel with a and b channels | |
| final = cv2.cvtColor(limg, cv2.COLOR_LAB2RGB) # Convert LAB image back to RGB | |
| final_image = Image.fromarray(final) # Convert numpy array back to PIL image | |
| return final_image |