数据集——高分辨率图像分割成大小均匀图像(附Python代码)

news2024/12/27 1:06:39

将高分辨率图像分割成大小均匀的图像用于训练,可以提高训练效率,提高模型性能,并提供更大的灵活性。

目录

  • 一、大小均匀图像用于训练优势
  • 二、代码
    • 2.1 代码参数修改
    • 2.2 代码
    • 2.3 输出
    • 2.4 分割结果
  • 三、总结

一、大小均匀图像用于训练优势

内存管理:高分辨率图像通常占用大量内存。通过将它们分割成较小的图像,可以更有效地利用内存,使训练过程更加高效。

并行化:小图像可以在多个处理器或GPU上并行处理,这可以大大提高训练速度。

避免过拟合:通过从大图像中提取出许多小图像,可以增加训练样本的数量,这有助于提高模型的泛化能力,避免过拟合。

学习局部特征:在许多情况下,图像的局部特征(如纹理、形状等)对于任务来说可能是非常重要的。使用小图像可以使模型更专注于这些局部特征。

灵活性:分割后的小图像可以适应各种网络结构,特别是那些设计用于处理固定大小输入的网络。

二、代码

2.1 代码参数修改

下面是使用代码,根据自己情况修改参数,其中output_dir是裁剪后小图像的保存路径,此路径在代码中设置就行,不用在本地文件夹中提前创建好。

在这里插入图片描述

2.2 代码

import multiprocessing
import os
import sys

import cv2
import numpy as np
from tqdm import tqdm


def main():
    args = {
        "inputs_dir": "F:\Code\Python\SRGAN\SRGAN-PyTorch\data\SRGAN_ImageNet",  # Path to input image directory.
        "output_dir": "data/SRGAN_ImageNet_train_GT_sub2",  # Path to generator image directory.
        "crop_size": 128,  # Crop image size from raw image.
        "step": 64,  # Step size of sliding window.
        "thresh_size": 0,  # Threshold size. If the remaining image is less than the threshold, it will not be cropped.
        "num_workers": 10  # How many threads to open at the same time.
    }
    split_images(args)

def split_images(args: dict):
    """Split the image into multiple small images.

    Args:
        args (dict): Custom parameter dictionary.

    """

    inputs_dir = args["inputs_dir"]
    output_dir = args["output_dir"]
    num_workers = args["num_workers"]

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"Create {output_dir} successful.")
    else:
        print(f"{output_dir} already exists.")
        sys.exit(1)

    # Get all image paths
    image_file_paths = os.listdir(inputs_dir)

    # Splitting images with multiple threads
    progress_bar = tqdm(total=len(image_file_paths), unit="image", desc="Split image")
    workers_pool = multiprocessing.Pool(num_workers)
    for image_file_path in image_file_paths:
        workers_pool.apply_async(worker, args=(image_file_path, args), callback=lambda arg: progress_bar.update(1))
    workers_pool.close()
    workers_pool.join()
    progress_bar.close()
    print("Split image successful.")


def worker(image_file_path: str, args: dict):
    """Split the image into multiple small images.

    Args:
        image_file_path (str): Image file path.
        args (dict): Custom parameter dictionary.

    """

    inputs_dir = args["inputs_dir"]
    output_dir = args["output_dir"]
    crop_size = args["crop_size"]
    step = args["step"]
    thresh_size = args["thresh_size"]

    image_name, extension = os.path.splitext(os.path.basename(image_file_path))
    image = cv2.imread(os.path.join(inputs_dir, image_file_path), cv2.IMREAD_UNCHANGED)

    image_height, image_width = image.shape[0:2]
    image_height_space = np.arange(0, image_height - crop_size + 1, step)
    if image_height - (image_height_space[-1] + crop_size) > thresh_size:
        image_height_space = np.append(image_height_space, image_height - crop_size)
    image_width_space = np.arange(0, image_width - crop_size + 1, step)
    if image_width - (image_width_space[-1] + crop_size) > thresh_size:
        image_width_space = np.append(image_width_space, image_width - crop_size)

    index = 0
    for h in image_height_space:
        for w in image_width_space:
            index += 1
            # Crop
            crop_image = image[h: h + crop_size, w:w + crop_size, ...]
            crop_image = np.ascontiguousarray(crop_image)
            # Save image
            cv2.imwrite(os.path.join(output_dir, f"{image_name}_{index:04d}{extension}"), crop_image)


if __name__ == "__main__":
    main()

2.3 输出

分割过程如下,高分辨率图像较多时,会等待很久…

在这里插入图片描述

2.4 分割结果

在这里插入图片描述

三、总结

以上就是数据集制作,将高分辨率图像分割成大小均匀图像的详细方法,后续还可以再均匀大小图像基础上进一步做数据增强,数据增强方法参考博文:数据增强

感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3步操作助您轻松实现苹果手机照片一键传输至电脑

对于很多使用苹果手机的用户来说,随着手机中照片和视频数量的不断积累,如何将这些珍贵的回忆从手机转移到电脑,以便更好地保存、整理和分享,成为了一个值得关注的问题。那么,苹果手机怎么把照片导入电脑呢?…

职校老师的工资待遇怎么样

工资水平一直是教师们关注的焦点,毕竟,工资不仅关系到个人的生活品质,还影响着教师的职业满意度和工作动力。职校教师的工资待遇究竟是怎样的呢? 职校教师的工资水平受多种因素影响,包括地区、学校类型、个人资历和教学…

Qt 配置Eigen矩阵库 - 并简单测试

Qt 配置Eigen矩阵库 - 并简单测试 引言一、在Qt中配置Eigen二、低通Demo源码三、参考链接以及其他 引言 Eigen是一个开源的C模板库,提供了线性代数和矩阵运算的功能。它被设计为一个高性能、可扩展和易用的库,可以用于科学计算、机器学习和计算机图形学等…

Django 里如何使用 sqlite (操作步骤)

在 settings.py 里,已经设定好 sqlite 了 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }必须得设置好app # 在 settings.py 里INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contentt…

安卓开发板_开发评估套件_4G/5G联发科MTK安卓主板定制开发

安卓开发板采用了联发科八核A53 CPU,主频2.0GHz,采用12nm制程工艺,拥有强大的通用计算性能。配备GE8300 GPU,支持1080P视频编码和H.264硬解码,能够解析目前流行的视频和图片格式,非常适合各种功能APP的测试…

16:00面试,16:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

封装--5.29

封装主要是封装属性,将改显示的显示,将改掩藏的掩藏(例如:一个女孩20岁了,但是她想告诉你她18岁怎么办,通过封装来解决) 编写规则: 定义时,在需要封装的属性前面加上pr…

《Navi韩语社》App:您的韩语学习与翻译的智能伴侣,支持韩文OCR文字识别提取,高精度韩语翻译!

《Navi韩语社》App,一款专为学习韩语和有韩语翻译需求的用户设计的多功能应用,它以翻译准确、功能丰富和操作简单的特点,成为了众多学习韩语的学生、计划去韩国旅游的背包客必备的韩语翻译工具。 🌟 精准翻译,一触即达…

linux的磁盘分区与管理

磁盘分区与管理 识别磁盘 一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤) •识别硬盘 > 分区规划 > 格式化 > 挂载使用 Unix/Linux的基本哲学理念:一切皆文件 /dev:存放设备(键盘、鼠标、光驱、硬盘……

springboot学生就业信息管理系统-计算机毕业设计源码95340

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学生就业信息管理系统等问题,对…

Java 实现二叉搜索树 代码

新建文件 创建TreeNode类,实例化 直接在BinarySearchTree类里面写就可以 static class TreeNode {public int key;public TreeNode left;public TreeNode right;TreeNode(int key) {this.key key;}}public TreeNode root; 插入节点 insert public boolean inser…

LabVIEW机器设备的振动监测

振动监测是工业和机械维护中重要的一部分,通过检测和分析机械振动,提前发现潜在故障,确保设备的可靠运行。LabVIEW是一种强大的图形化编程环境,非常适合用于振动监测系统的开发和实施。以下从多个角度详细介绍LabVIEW在振动监测中…

leetCode.87. 扰乱字符串

leetCode.87. 扰乱字符串 题目思路(该方法以前可以过,现在对时间复杂度的要求严格了许多,不能过去): 这里显示,能够让我自己后期复习的时候,可以掌握最基本的做法(尽管不能通过全部样…

端口扫描利器--nmap

目录 普通扫描 几种指定目标的方法 TCP/UDP扫描 端口服务扫描 综合扫描 普通扫描 基于端口连接并响应(真实) ​ nmap -sn 网段(0/24)-sn 几种指定目标的方法 单个IP扫描 IP范围扫描 扫描文件里的IP 扫描网段,(排除某IP) 扫描网段(排除某清单IP) TCP/UDP扫描 -sS …

echarts性能优化

echarts数据量多的时候优化方案&#xff1a; 渲染的数据太多时&#xff0c;渲染的速度会变慢。 let data [];for (let i 0; i < 100000; i) {let style {};if (i % 2 0) {style.color "red";}data.push({value: i,itemStyle: style,}); } myEcharts init(c…

数字孪生3D智慧园区可视化能耗管控平台

智慧园区是园区与互联网的完美融合。通过整合信息技术和各类资源&#xff0c;我们实现了园区内各个服务的数字化运营&#xff0c;不仅降低了企业的运营成本&#xff0c;更提高了管理效率 智慧园区3D互动大屏系统利用web3d开发、三维可视化、模拟仿真和数字孪生技术&#xff0c;…

AlexNet,LeNet-5,ResNet,VGG-19,VGG-16模型

模型 AlexNet导入必要的库&#xff1a;加载类别名称&#xff1a;创建标签映射字典&#xff1a;加载图像数据和对应的标签&#xff1a;构建AlexNet模型&#xff1a;编译模型&#xff1a;训练模型&#xff1a; LeNet-5导入必要的库&#xff1a;加载类别名称&#xff1a;创建标签映…

Centos7网络故障,开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000

说明 这是Linux系统网络接口的信息&#xff0c;其中"mtu 1500"表示最大传输单元大小为1500字节&#xff0c;“qdisc noop”表示没有设置特殊的队列算法&#xff0c;“state down”表示该接口当前处于关闭状态&#xff0c;“group default”表示该接口属于“default”…

GPT-4O神器来袭!自动生成Figma设计稿,移动端开发瞬间加速!

2024年5月29日- 近日&#xff0c;一款基于GPT-4O技术的创新工具成功实现根据产品需求文档&#xff08;PRD&#xff09;自动生成Figma设计稿的功能&#xff0c;为移动端应用开发者带来革命性的便捷。据悉&#xff0c;该功能主要针对移动端应用进行优化&#xff0c;并支持使用高质…

《平渊》· 伍 —— 做副业,如何看待被骗?

《平渊》 伍 "真正的象棋高手&#xff0c;不会因为一子的得失去计较。" 今天聊聊做副业过程中&#xff0c;如何看待被骗。 首先我想聊聊全盘战略的思想&#xff0c;孔明在《隆中对》中就提出了「全盘战略」思想&#xff0c;建议刘备首先稳固荆州和益州&#xff0c;然…