""" Visualize sample images and masks from the CMP Facade dataset. """ import os import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from PIL import Image import random def visualize_samples(data_dir="data/cmp_facade", split="train", num_samples=5, save_path="outputs/dataset_visualization.png"): os.makedirs(os.path.dirname(save_path), exist_ok=True) split_dir = f"{data_dir}/{split}" img_dir = f"{split_dir}/images" mask_dir = f"{split_dir}/masks_binary" img_files = sorted([f for f in os.listdir(img_dir) if f.endswith('.jpg')])[:20] selected = random.sample(img_files, min(num_samples, len(img_files))) fig, axes = plt.subplots(num_samples, 3, figsize=(12, 4 * num_samples)) if num_samples == 1: axes = axes.reshape(1, -1) for i, img_file in enumerate(selected): img = Image.open(f"{img_dir}/{img_file}").convert('RGB') mask = Image.open(f"{mask_dir}/{img_file.replace('.jpg', '.png')}").convert('L') mask_arr = np.array(mask) img_arr = np.array(img) overlay = img_arr.copy() overlay[mask_arr > 0] = [255, 0, 0] blended = (img_arr * 0.6 + overlay * 0.4).astype(np.uint8) axes[i, 0].imshow(img) axes[i, 0].set_title(f"Image {img_file}") axes[i, 0].axis('off') axes[i, 1].imshow(mask, cmap='gray') axes[i, 1].set_title("Facade Mask (class 1)") axes[i, 1].axis('off') axes[i, 2].imshow(blended) axes[i, 2].set_title("Overlay") axes[i, 2].axis('off') plt.tight_layout() plt.savefig(save_path, dpi=150) plt.close() print(f"Visualization saved to {save_path}") if __name__ == "__main__": visualize_samples("data/cmp_facade", "train", num_samples=5, save_path="outputs/dataset_visualization.png")