首页 > 其他分享 >SRCNN数据预处理

SRCNN数据预处理

时间:2025-01-08 10:22:25浏览次数:1  
标签:__ self SRCNN transforms image 图像 input 数据 预处理

# 判断某个文件是否是图像
# enswith判断是否以指定的.png,.jpg,.jpeg结尾的字符串
# 可以根据情况扩充图像类型,加入.bmp、.tif等
def is_image_file(filename):
    return any(filename.endswith(extension) for extension in [".png", ".jpg", ".jpeg"])

# 读取图像转为YCbCr模式,得到Y通道
def load_img(filepath):
    img = Image.open(filepath).convert('YCbCr')
    y, _, _ = img.split()
    return y

# 裁剪大小,宽高一致为300
# 如果想训练自己的数据集,请根据情况修改裁剪大小
CROP_SIZE = 300

# 封装数据集,适配后面的torch.utils.data.DataLoader中的dataset,定义成类似形式
# 类参数为图像文件夹路径和放大倍数
# __len__(self) 定义当被len()函数调用时的行为(返回容器中元素的个数)
#__getitem__(self) 定义获取容器中指定元素的行为,相当于self[key],即允许类对象可以有索引操作。
#__iter__(self) 定义当迭代容器中的元素的行为
# 返回输入图像和标签,传入DataLoader的dataset参数
class DatasetFromFolder(Dataset):
    def __init__(self, image_dir, zoom_factor):
        super(DatasetFromFolder, self).__init__()
        self.image_filenames = [join(image_dir, x) for x in listdir(image_dir) if is_image_file(x)] # 图像路径列表
        crop_size = CROP_SIZE - (CROP_SIZE % zoom_factor) # 处理放大倍数,防止用户瞎设置,本例只能设置为2,3,4,大小不变
        # 数据集变换
        # 还有一些其他的变换操作,如归一化等,遇到一个积累一个
        self.input_transform = transforms.Compose([transforms.CenterCrop(crop_size), # 从图片中心裁剪成300*300
                                                   transforms.Resize(
                                                       crop_size // zoom_factor),    # Resize, 输入应该是缩放倍数后的图像,因为先缩小后放大
                                                   transforms.Resize(
                                                       crop_size, interpolation=Image.BICUBIC), # 双三次插值
                                                   transforms.ToTensor()]) # 图像转成tensor
        # label标签,超分不是分类问题,定义成一样的就行
        self.target_transform = transforms.Compose(
            [transforms.CenterCrop(crop_size), transforms.ToTensor()])

    def __getitem__(self, index):
        input = load_img(self.image_filenames[index]) # 输入是图像的Y通道,即亮度通道
        target = input.copy()
        input = self.input_transform(input)
        target = self.target_transform(target)
        return input, target

    def __len__(self):
        return len(self.image_filenames) # 图像个数

 

标签:__,self,SRCNN,transforms,image,图像,input,数据,预处理
From: https://www.cnblogs.com/anyview/p/18659155

相关文章

  • 网站管理助手无法创建数据库及连接问题的解决方案
    问题描述:用户在使用网站管理助手创建数据库时遇到困难,不仅无法创建新的数据库,而且已创建的数据库也无法正常连接。这种情况严重影响了用户的数据库管理效率和网站的正常运行。解决方案:确认工具与环境兼容性:首先,确保使用的网站管理助手版本与当前的操作系统和数据库管理系统(......
  • 解决mariadb数据库连接不上问题,错误描述1130 - Host
    Navicat连接出错:1130-hostxxxx.isnotallowedtoconnecttothisMySqlserver的解决方案报错信息如图:报错原因:是mysql未开启mysql远程访问权限导致。解决办法:改为任何主机root使用mypassword可远程连接到mysql服务器复制如下命令:(将下面命令中的’mypassword......
  • 启航数据结构算法之绮旅,漫步C++智慧之道——LeetCode题海探幽:轮转数组之多元策略演绎
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录复杂度练习之轮转数组方法1方法2方法3总结复杂度练习之轮转数组题目链接:轮转数组为什么我们把这道题作为复杂度的练习题呢?是因为我们以后做题都会涉及到复杂度的计算,我们要保证我们写的程序不会超出题目的时间......
  • 如何修改网站数据库
    网站数据库存储了网站的所有数据,包括用户信息、文章内容、产品信息等。如何安全、高效地修改网站数据库?解决方案:备份数据库:在进行任何修改之前,务必备份数据库,以防出现意外情况。使用数据库管理工具:如phpMyAdmin、Navicat等,导出数据库文件。使用命令行工具:如MySQL的mysqldump......
  • 如何将高版本MySQL数据库备份导入到低版本MySQL数据库?
    在处理MySQL数据库时,有时会遇到需要将高版本的数据库备份导入到低版本MySQL的情况。例如,从MySQL5.7导入到MySQL5.5。直接导入可能会导致兼容性问题和错误。为了解决这个问题,可以采用以下几种方法来确保顺利迁移数据。方法一:使用第三方工具进行迁移步骤操作说明1选择......
  • 造成MySQL数据库访问很慢的原因及解决方法
    MySQL数据库访问速度变慢可能会影响网站和应用程序的性能,给用户体验带来负面影响。以下是导致MySQL数据库访问缓慢的常见原因及其相应的解决方法,帮助您快速诊断并优化数据库性能。造成MySQL数据库访问缓慢的常见原因1.硬件性能瓶颈原因解决方案磁盘和CPU性能不足:硬件......
  • 2025毕设springbo《Python数据分析》的教学系统论文+源码
    系统程序文件列表开题报告内容研究背景随着大数据时代的到来,Python作为一种高效、易学的编程语言,在数据分析领域扮演着越来越重要的角色。各行各业对具备Python数据分析技能的人才需求日益增加,这促使教育领域必须紧跟时代步伐,将Python数据分析纳入课程体系。然而,当前的教育......
  • 【数据挖掘】深度高斯过程
    深度高斯过程(DeepGaussianProcess,DGP)是一种结合高斯过程(GaussianProcess,GP)和深度学习的模型,旨在将高斯过程的非参数灵活性与深度模型的分层特征学习能力相结合。它可以看作是高斯过程的深度扩展,通过多个隐藏层的高斯过程构建非线性映射。核心特点分层结构深度高......
  • 安卓笔记4——Result API 在两个Activity之间传递数据 kotlin版本
    第一个Activity//接收第二个Activity返回的回调privatevalrequestDataLauncher=registerForActivityResult(ActivityResultContracts.StartActivityForResult()){result->if(result.resultCode==RESULT_OK){valdata=result.data?.getS......
  • flinkcdc 实现数据监听
    1.概述FlinkCDC是一个用于实时数据和批处理数据的分布式数据集成工具。他可以监听数据库表的变化。实现将数据变化写到其他的数据源中。我们可以使用java实现自定义的数据写出。下面是实现细节。2.实现代码2.1项目依赖<dependencies><dependency><......