import cv2 import numpy as np from tensorflow.keras import backend as K def preprocess_image(image, target_size=(256, 256)): image = np.array(image) image = cv2.resize(image, target_size) image = image / 255.0 return image def postprocess_prediction(prediction, threshold=0.5): mask = (prediction > threshold).astype(np.float32) return mask def dice_coef(y_true, y_pred, smooth=1): y_true_f = K.flatten(y_true) y_pred_f = K.flatten(y_pred) intersection = K.sum(y_true_f * y_pred_f) return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth) def dice_loss(y_true, y_pred): return 1 - dice_coef(y_true, y_pred) def overlay_segmentation(original_image, segmentation_mask): segmentation_mask = cv2.resize(segmentation_mask, (original_image.shape[1], original_image.shape[0])) segmentation_mask_colored = np.zeros_like(original_image) segmentation_mask_colored[:, :, 0] = segmentation_mask.squeeze() * 255 overlay = cv2.addWeighted(original_image, 0.7, segmentation_mask_colored, 0.3, 0) return overlay