语义分割裂缝数据集 裂缝检测语义分割数据集,SCI亲测好用(混凝土,道路等)1万多 高精度

语义分割裂缝数据集,SCI亲测好用


(混凝土,道路等)
Crack500 DeepCrack
concrete crack dataset CFD


cracktree200 crackforest等等数据集
总计1w+ 包括含有和不含裂缝图像标签
包括高精度原始图像,灰度图像标签
包括224像素值大小图像及标签


包括数据集数据增强操作(翻转,旋转,像素变换等)
此外,提供对原始图像数据预处理操作代码(等比例缩放,裁剪,数据增强,随机抽取等)

裂缝检测语义分割数据集介绍

数据集概览

这是一个针对裂缝检测的语义分割数据集,包含了混凝土、道路等多种场景下的裂缝图像,总计1万张以上,包括含有和不含裂缝的图像,提供了高精度的原始图像和灰度图像标签。数据集支持224像素值大小的图像及标签,并且提供了数据增强功能,如翻转、旋转和像素变换等。此外,还提供了对原始图像数据的预处理操作代码,包括等比例缩放、裁剪、数据增强和随机抽取等功能。

数据集特点
  • 大规模: 总计1万张以上的图像,适合用于训练和评估语义分割模型。
  • 多场景: 包括混凝土、道路等多种场景下的裂缝图像,提高了模型的泛化能力。
  • 高精度: 提供了高精度的原始图像和灰度图像标签,有利于准确的裂缝检测。
  • 数据增强: 提供了多种数据增强方法,帮助提升模型性能。
数据集结构

假设数据集文件夹结构如下:

crack_detection_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── masks/
│   ├── train/
│   ├── val/
│   └── test/
├── data.yaml
└── preprocess.py
  • images/ 目录下存放原始图像文件。
  • masks/ 目录下存放对应的语义分割标签文件。
  • data.yaml 文件定义了数据集的配置信息。
  • preprocess.py 文件是预处理操作的脚本。
data.yaml 文件示例
# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test
nclasses: 2
names: ['background', 'crack']

请注意,这里的nclasses参数设置为2,表示有两个类别:背景和裂缝;names参数设置为['background', 'crack'],表示类别名称为背景和裂缝。

preprocess.py 文件示例

以下是一个简单的Python代码示例,展示了如何对原始图像数据进行预处理操作,包括等比例缩放、裁剪、数据增强和随机抽取等。

import os
import random
import cv2
import numpy as np
from PIL import Image

def resize_and_crop(image, target_size, crop_size):
    """
    对图片进行等比例缩放和中心裁剪。
    
    Parameters:
        image (numpy.ndarray): 输入的图片。
        target_size (tuple): 目标尺寸。
        crop_size (tuple): 裁剪尺寸。
        
    Returns:
        resized_cropped_img (numpy.ndarray): 缩放并裁剪后的图片。
    """
    img_height, img_width, _ = image.shape
    aspect_ratio = img_width / img_height
    
    if aspect_ratio > target_size[0] / target_size[1]:
        new_width = crop_size[0]
        new_height = int(new_width / aspect_ratio)
    else:
        new_height = crop_size[1]
        new_width = int(new_height * aspect_ratio)
        
    resized_img = cv2.resize(image, (new_width, new_height))
    offset_x = (new_width - crop_size[0]) // 2
    offset_y = (new_height - crop_size[1]) // 2
    cropped_img = resized_img[offset_y:offset_y + crop_size[1], offset_x:offset_x + crop_size[0]]
    
    return cropped_img

def data_augmentation(image):
    """
    对图片进行数据增强。
    
    Parameters:
        image (numpy.ndarray): 输入的图片。
        
    Returns:
        augmented_img (numpy.ndarray): 增强后的图片。
    """
    flip = random.choice([True, False])
    rotate_angle = random.uniform(-10, 10)
    
    if flip:
        augmented_img = cv2.flip(image, 1)
    else:
        augmented_img = image.copy()
        
    augmented_img = cv2.rotate(augmented_img, cv2.ROTATE_90_CLOCKWISE)
    
    return augmented_img

def preprocess_data(dataset_dir, output_dir, n_samples_per_class=100):
    """
    对整个数据集进行预处理。
    
    Parameters:
        dataset_dir (str): 原始数据集目录。
        output_dir (str): 输出预处理后数据集的目录。
        n_samples_per_class (int): 每个类别要抽取的样本数。
    """
    for folder in ["train", "val", "test"]:
        input_folder = os.path.join(dataset_dir, folder)
        output_folder = os.path.join(output_dir, folder)
        os.makedirs(output_folder, exist_ok=True)
        
        for label in ["background", "crack"]:
            input_label_folder = os.path.join(input_folder, label)
            output_label_folder = os.path.join(output_folder, label)
            os.makedirs(output_label_folder, exist_ok=True)
            
            files = os.listdir(input_label_folder)
            random.shuffle(files)
            
            for i, filename in enumerate(files[:n_samples_per_class]):
                img_path = os.path.join(input_label_folder, filename)
                img = cv2.imread(img_path)
                
                resized_cropped_img = resize_and_crop(img, (224, 224), (200, 200))
                augmented_img = data_augmentation(resized_cropped_img)
                
                output_path = os.path.join(output_label_folder, f"{filename.split('.')[0]}_{i}.jpg")
                cv2.imwrite(output_path, augmented_img)

if __name__ == "__main__":
    original_data_dir = "/path/to/original/dataset/images"
    preprocessed_data_dir = "/path/to/preprocessed/dataset/images"

    preprocess_data(original_data_dir, preprocessed_data_dir, n_samples_per_class=100)

这段代码会读取原始数据集中的图片,然后对其进行等比例缩放、中心裁剪、数据增强等操作,并保存到新的目录中。你可以根据实际需求修改resize_and_crop()函数和data_augmentation()函数中的参数来控制预处理的程度。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值