import numpy as np from PIL import Image import torchvision.transforms as transforms def layout_transforms(): """Define data augmentation and preprocessing.""" return transforms.Compose([ transforms.Resize((256, 256)), # 调整尺寸到固定大小 transforms.RandomRotation(30), # 随机旋转(增强方向不变性) transforms.ColorJitter(brightness=0.2, contrast=0.2), # 彩色抖动(如果使用图像数据) transforms.ToTensor(), # 转换为张量 transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 标准化(如ImageNet均值和方差) ]) def layout_to_tensor(layout_path, target_size=(256, 256)): """Convert layout to normalized tensor.""" img = Image.open(layout_path).convert('L') # Convert to grayscale img = img.resize(target_size, resample=Image.BILINEAR) return np.array(img) / 255.0 # Normalize to [0,1] def tile_layout(large_layout, block_size=64): """将大版图分割为小块(滑动窗口方式)""" height, width = large_layout.shape stride = block_size // 2 # 步长设置重叠区域 tiles = [] for y in range(0, height - block_size +1, stride): for x in range(0, width - block_size +1, stride): tile = large_layout[y:y+block_size, x:x+block_size] tiles.append((x, y, tile)) return tiles """将大版图分割为小块(滑动窗口方式)""" def tile_layout(large_layout, block_size=64, overlap_ratio=0.5): """Split large layout into tiles with specified overlap.""" height, width = large_layout.shape stride = block_size // 2 # 步长设置重叠区域 stride = int(block_size * (1 - overlap_ratio)) # Calculate step size based on overlap ratio tiles = [] for y in range(0, height - block_size + 1, stride): for x in range(0, width - block_size + 1, stride): tile = large_layout[y:y+block_size, x:x+block_size] tiles.append((x, y, tile)) return tiles