基于TransU-Net的遥感图像语义分割与分类,遥感建筑物数据集,基于Pytorch框架,针对不同城市建筑物精准提取,
基于TransU-Net的遥感图像语义分割与分类,遥感建筑物数据集,基于Pytorch框架,针对不同城市建筑物精准提取,包含一万多字报告,如图所示,有代码+数据集+模型

方案一:生成类似图片中的网页缩略图列表 (HTML + CSS)
如果你想做一个网页来展示这些图片,让它们像图中那样整齐排列,可以使用以下代码。
使用方法:
创建一个文件夹。
将你的图片(0.PNG, 1.PNG…)放入该文件夹。
创建一个 index.html 文件,粘贴以下代码。
图片切片预览
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
.gallery {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
}
.image-card {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 10px;
width: 150px;
text-align: center;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
transition: transform 0.2s;
}
.image-card:hover {
transform: scale(1.05);
border-color: #007bff;
}
.image-card img {
max-width: 100%;
height: auto;
border-radius: 4px;
}
.filename {
margin-top: 8px;
font-size: 14px;
color: #333;
word-break: break-all;
}
// 假设你有 0.PNG 到 19.PNG
const totalImages = 20;
const container = document.getElementById('gallery');
for (let i = 0; i
方案二:Python 批量重命名/整理代码
运行脚本。
import os
def rename_images_in_folder(folder_path):
# 支持的图片格式
valid_extensions = (‘.png’, ‘.jpg’, ‘.jpeg’, ‘.bmp’, ‘.gif’)
# 获取所有图片文件
files = [f for f in os.listdir(folder_path) if f.lower().endswith(valid_extensions)]
# 排序,确保顺序一致
files.sort()
print(f"找到 {len(files)} 个图片文件,开始重命名...")
for index, filename in enumerate(files):
# 构造新的文件名,例如 0.PNG, 1.PNG
# 注意:原图是大写扩展名,这里统一转为大写 .PNG
new_name = f"{index}.PNG"
# 获取完整路径
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(folder_path, new_name)
# 如果新旧名字不一样才重命名
if old_path != new_path:
try:
os.rename(old_path, new_path)
print(f"重命名: {filename} -> {new_name}")
except FileExistsError:
print(f"跳过: {new_name} 已经存在")
print("处理完成!")
if name == “main”:
# 当前目录
current_dir = os.getcwd()
rename_images_in_folder(current_dir)
方案三:Python 图片拼接代码 (进阶)
from PIL import Image
import os
def stitch_images(folder_path, images_per_row):
images = []
# 读取所有PNG文件
files = [f for f in os.listdir(folder_path) if f.lower().endswith(‘.png’)]
files.sort(key=lambda x: int(os.path.splitext(x)[0])) # 按数字排序
for f in files:
images.append(Image.open(os.path.join(folder_path, f)))
if not images:
print("未找到图片")
return
# 获取单张图片的尺寸
w, h = images[0].size
# 计算总行数和总尺寸
rows = (len(images) + images_per_row - 1) // images_per_row
total_width = images_per_row * w
total_height = rows * h
# 创建空白大图
new_img = Image.new('RGB', (total_width, total_height))
for idx, img in enumerate(images):
x = (idx % images_per_row) * w
y = (idx // images_per_row) * h
new_img.paste(img, (x, y))
new_img.save('stitched_result.jpg')
print("拼接完成,保存为 stitched_result.jpg")

代码示例
import os
import numpy as np
from PIL import Image
配置参数
IMAGE_SIZE = (256, 256) # 图片尺寸
OUTPUT_DIR = “masks” # 输出文件夹
NUM_IMAGES = 20 # 生成图片的数量 (0-19)
创建输出目录
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
def generate_mask(index):
“”"
模拟生成一个语义分割掩膜。
在实际应用中,这里应该是你的模型预测结果或者标注数据。
“”"
# 创建一个空的灰度图像数组 (0 = 黑色/背景)
mask_array = np.zeros(IMAGE_SIZE, dtype=np.uint8)
# --- 模拟不同的类别区域 ---
# 类别 1: 灰色 (例如: 道路) - 值设为 128
# 这里用简单的几何图形模拟,实际中通常是复杂的轮廓
cv2_rectangle = lambda img, val: cv2.rectangle(img, (50, 50), (200, 200), val, -1)
# 根据索引改变图案位置,模拟不同的图片
offset = (index * 10) % 100
# 背景 (黑色, 0) 已经在初始化时完成
# 绘制类别 1 (灰色, 128) - 模拟“道路”或“中间区域”
mask_array[50+offset:200-offset, 50:200] = 128
# 绘制类别 2 (白色, 255) - 模拟“建筑物”或“前景”
mask_array[80:180, 80+offset:180] = 255
# 添加一些随机噪声或细节,使其看起来更像真实的分割图
noise = np.random.randint(0, 20, IMAGE_SIZE, dtype=np.uint8)
mask_array = np.clip(mask_array + noise, 0, 255)
return mask_array
# 转换为PIL图像 (模式 'L' 代表 8位灰度)
img = Image.fromarray(mask_data, mode='L')
# 保存文件
filename = f"{i}.PNG"
img.save(os.path.join(OUTPUT_DIR, filename))
print(“生成完成!”)
代码解析
灰度模式 (‘L’):代码中使用了 mode=‘L’,这对应了 8-bit 像素,黑白模式。这是语义分割 Mask 的标准格式。
像素值含义:
0 (黑色):通常代表“背景”或“无数据”。
128 (灰色):代表“类别 1”(例如道路)。
255 (白色):代表“类别 2”(例如建筑物)。
import os
from PIL import Image
def merge_images(image_folder, output_path, grid_size=(4, 5)):
“”"
将切分的小图拼接成一张大图。
grid_size: (列数, 行数),根据你的图看大概是 6列 x 3行 (虽然缺了6和18)
“”"
images = []
# 获取文件列表并排序
file_names = sorted([f for f in os.listdir(image_folder) if f.endswith(‘.PNG’)], key=lambda x: int(os.path.splitext(x)[0]))
for file_name in file_names:
images.append(Image.open(os.path.join(image_folder, file_name)))
if not images:
print("未找到图片")
return
# 假设所有图片大小一致
w, h = images[0].size
# 创建空白大图
# 注意:这里简单估算,实际需要根据你的具体排列逻辑调整
cols, rows = grid_size
result_width = cols * w
result_height = rows * h
new_img = Image.new('RGB', (result_width, result_height), color=(128, 128, 128))
for idx, img in enumerate(images):
# 计算位置
col = idx % cols
row = idx // cols
box = (col * w, row * h)
new_img.paste(img, box)
new_img.save(output_path)
print(f"拼接完成,保存为: {output_path}")
在这里插入图片描述
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)