目录

前言

项目背景

设计思路

数据集

模型训练

更多帮助


前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

       大家好,这里是海浪学长计算机毕设专题,本次分享的课题是

       🎯基于深度学习的图像去噪算法

项目背景

       图像去噪是计算机视觉领域中的一个重要问题,它对于提高图像质量、增强图像细节以及改善图像分析和处理的效果具有重要意义。传统的图像去噪算法通常基于数学模型或滤波器设计,但在处理复杂图像时存在一定的局限性。随着深度学习技术的快速发展,基于深度学习的图像去噪算法逐渐成为研究热点。通过深度学习模型的训练和优化,可以更准确地还原图像的真实信息,有效去除图像中的噪声。因此,基于深度学习的图像去噪算法具有重要的研究价值和应用前景。

设计思路

       稀疏编码作为一种用尽量少的非零系数来表示信号的编码方式在信号处理和机器学习中的重要应用。通过稀疏编码,我们可以将信号表示为一组基向量的线性组合,从而实现信号的高效存储和处理。

毕业设计:基于深度学习的图像去噪算法 人工智能

       CNN作为深度学习的一个重要分支,通过卷积层、激活函数、BN层、池化层和全连接层的组合,可以实现对图像特征的强大提取能力。卷积层利用局部像素点间的空间依赖性,通过卷积操作提取邻域内的特征。池化层则通过平均池化或最大池化等操作,实现特征不变性、特征降维和防止过拟合等功能。这些操作使得CNN具备对平移和缩放等变形形式具有高度不变性的能力,通过逐层抽象和特征学习,最终可以从原始输入数据中提取出高层语义信息,并通过反向传播机制进行参数更新以实现模型的训练和优化。

毕业设计:基于深度学习的图像去噪算法 人工智能

       基于边缘提取的深度卷积稀疏编码网络(EDCSC-Net)在LWCSC模型中用于增强结果图像的边缘纹理特征。该网络通过通道注意力模块实现可学习的权重参数w和w~,并与LWCSC模型的迭代展开步骤一一对应。注意力模块结合了下采样过程中的MaxPool层和AvgPool层,以获取丰富的多尺度特征。激活函数Relu和Sigmoid保证了权重参数的正值性。最终,注意力模块输出的结果是权重参数和输入数据的乘积。

毕业设计:基于深度学习的图像去噪算法 人工智能

       可学习LOG卷积层是通过在5×5尺寸的LOG边缘检测模板上应用可学习因子β构建的。选用该模板的原因有三个方面的考虑:首先,它具有良好的抗噪声特性,可以减轻噪声对纹理信息提取的干扰;其次,它是无方向性的,可以减少边缘提取时的参数数量;第三,它具有较高的定位精度,可以很好地捕捉低对比度的细节特征。为了充分获取纹理细节,提出了一种多尺度边缘提取模块,其中包括了3×3的可学习Sobel卷积层和5×5的可学习LOG卷积层并联。与CNN卷积核的参数更新方式类似,LOG卷积层和Sobel卷积层上的可学习因子也会随着训练中的反向传播过程进行调整和更新。

毕业设计:基于深度学习的图像去噪算法 人工智能

       基于边缘提取的深度卷积稀疏编码网络,用于图像降噪。该网络通过多次迭代的方式对输入图像进行处理,共享参数。每次迭代中,将低剂量CT与卷积层G相卷积,将上一次迭代得到的卷积稀疏图与卷积层S相卷积并相加,经过注意力模块处理后得到卷积稀疏特征图。最后一轮迭代将卷积稀疏特征图与滤波器D进行卷积,拟合低剂量CT上的噪声。同时,通过多尺度边缘提取模块获取含有边缘细节的多通道特征图。将初步降噪结果与边缘特征相加,得到最终降噪后的图像。

毕业设计:基于深度学习的图像去噪算法 人工智能

import torch
import torch.nn as nn

class DCSENetwork(nn.Module):
    def __init__(self, num_channels, num_iterations):
        super(DCSENetwork, self).__init__()


        self.conv_G = nn.Conv2d(num_channels, num_channels, kernel_size=3, padding=1)


        self.conv_S = nn.Conv2d(num_channels, num_channels, kernel_size=3, padding=1)


        self.conv_D = nn.Conv2d(num_channels, num_channels, kernel_size=3, padding=1)

        self.attention = nn.Module()

        self.multi_scale_edge_extractor = nn.Module()

    def forward(self, low_dose_ct):
        for _ in range(num_iterations):
            G = self.conv_G(low_dose_ct)
            S = self.conv_S(low_dose_ct) + G

            S = self.attention(S)
        D = self.conv_D(S)

        edge_features = self.multi_scale_edge_extractor(low_dose_ct)
        final_denoised_image = D + edge_features

        return final_denoised_image

数据集

       由于网络上没有现有的合适的数据集,我决定自己去采集图片并制作了一个全新的数据集。我在不同的场景中拍摄了多张噪声图像,并使用了各种噪声模型进行添加。通过在现场拍摄,我能够捕捉到真实的场景和多样的噪声类型,这将为我的研究提供更准确、可靠的数据。我相信这个自制的数据集将为基于深度学习的图像去噪算法研究提供有力的支持,并为该领域的发展做出积极贡献。
       为了增加数据的多样性和提高模型的泛化能力,我使用了数据扩充技术对采集到的图像进行增强。通过应用随机裁剪、旋转、缩放和颜色变换等方法,我生成了更多的训练样本。这样做不仅增加了数据集的规模,还使模型能够更好地适应各种场景和噪声类型。数据扩充的过程在保持数据真实性的同时,提升了模型的性能和鲁棒性。通过数据扩充,我为基于深度学习的图像去噪算法的研究提供了更丰富的数据资源,为该领域的进一步发展做出了贡献。

相关代码示例:

def data_augmentation(image):
    # 定义数据扩充变换
    transform = Compose([
        ToTensor(),
        RandomHorizontalFlip(p=0.5),
        RandomVerticalFlip(p=0.5),
        RandomRotation(30),
    ])

    # 应用数据扩充变换
    augmented_image = transform(image)

    return augmented_image

模型训练

       去噪方法在 AAPM 测试集上的箱型图展示了不同方法的性能分布情况,包括中位数、四分位数、最大值和最小值以及箱型图宽度。这些信息有助于比较和评估不同方法的优劣,以及选择适合特定应用场景的方法。

       各方法的去噪性能和参数量分析的目的是为了评估和比较不同去噪方法的效果和效率。通过分析去噪性能,可以看出不同方法在去除图像噪声方面的优劣,包括图像的清晰度、细节保留程度等。而参数量则反映了模型的复杂度和计算资源的需求。通过对这些指标的分析,可以帮助我们选择最适合特定应用场景的去噪方法,平衡去噪效果和计算成本。同时,也可以为进一步的研究和改进提供指导,促进图像去噪技术的发展。

       消融实验的主要目的是通过系统地移除或修改模型中的特定组件,来研究这些变化对模型性能的影响。这种方法有助于我们更深入地理解模型的工作原理,以及确定哪些因素对其性能起到关键作用。通过消融实验,我们可以评估不同模型组件的重要性,发现模型的优势和局限性,从而为进一步的改进和优化提供指导。

相关代码示例:

import numpy as np
import cv2

def image_denoise(image, kernel_size):
    # 对图像进行高斯滤波
    gaussian = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0)
    return gaussian

# 读取图像
image = cv2.imread('image.jpg')

# 设置高斯滤波的核大小
kernel_size = 5

# 应用图像去噪算法
denoised_image = image_denoise(image, kernel_size)

# 显示原始图像和去噪后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

更多帮助

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐