cxr-report-generation / src /preprocessing.py
adhisetiawan's picture
Deploy CXR report generation demo
16d6749
Raw
History Blame Contribute Delete
895 Bytes
from __future__ import annotations
import numpy as np
from PIL import Image
def pad_image_to_square(image: Image.Image) -> Image.Image:
"""Pad an image with black pixels to create a square image.
This keeps the localization coordinate space consistent with the MedGemma
localization notebook while avoiding a second uint8 rescaling step.
"""
rgb_image = image.convert("RGB")
image_array = np.asarray(rgb_image, dtype=np.uint8)
height, width = image_array.shape[:2]
max_dim = max(height, width)
pad_top = (max_dim - height) // 2
pad_bottom = max_dim - height - pad_top
pad_left = (max_dim - width) // 2
pad_right = max_dim - width - pad_left
padded = np.pad(
image_array,
((pad_top, pad_bottom), (pad_left, pad_right), (0, 0)),
mode="constant",
constant_values=0,
)
return Image.fromarray(padded)