Diffusion扩散模型学习:图片高斯加噪

2023-12-23 23:12

本文主要是介绍Diffusion扩散模型学习:图片高斯加噪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高斯分布即正态分布;图片高斯加噪即把图片矩阵每个值和一个高斯分布的矩阵上的对应值相加

1、高斯分布 np.random.normal

一维:

import numpy as np
import matplotlib.pyplot as pltdef generate_gaussian_noise(mean, std_dev, size):noise = np.random.normal(mean, std_dev, size) ## 设置均值mean和标准差std_dev
mean = 0.5
std = 0.1return noise# 生成高斯噪声
mean = 0
std_dev = 1
size = 10000
noise = generate_gaussian_noise(mean, std_dev, size)# 打印部分噪声数据
print(noise[:10])# 绘制噪声分布直方图
plt.hist(noise, bins=50, density=True)
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.title('Gaussian Noise Distribution')
plt.show()

在这里插入图片描述
二维矩阵(10*10的案例):

import numpy as np
import matplotlib.pyplot as pltdef generate_gaussian_noise(mean, std_dev, size):noise = np.random.normal(mean, std_dev, size)return noise# 生成高斯噪声矩阵
mean = 0
std_dev = 1
size = (10, 10)
noise_matrix = generate_gaussian_noise(mean, std_dev, size)# 绘制矩阵图像
plt.imshow(noise_matrix, cmap='gray')
plt.colorbar()  # 添加颜色条
plt.title('Gaussian Noise Matrix')
plt.show()

在这里插入图片描述

2、矩阵相加 cv2.add(matrix1, matrix2)、matrix1+matrix2

每个值对应相加

import numpy as np
import cv2# 创建两个矩阵
matrix1 = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]], dtype=np.uint8)matrix2 = np.array([[10, 20, 30],[40, 50, 60],[70, 80, 90]], dtype=np.uint8)# 使用 cv2.add 函数相加两个矩阵;也可以直接matrix1+matrix2,两种结果可能不一样,cv2.add加噪会更多
result = cv2.add(matrix1, matrix2)# 打印相加结果
print(result)

在这里插入图片描述
在这里插入图片描述

3、图片高斯加噪

1)一维图片加噪:

import numpy as np
import cv2def add_gaussian_noise(image, mean, std_dev):# 生成与图像大小相同的高斯分布随机噪声noise = np.random.normal(mean, std_dev, image.shape).astype(np.uint8)print(type(noise),noise.shape,noise)# 将噪声添加到原始图像noisy_image = cv2.add(image, noise)return noisy_image# 读取原始图像
image = cv2.imread(r"C:\Users\loong\Downloads\ma.jpg", 0)  # 灰度图像
print("image:",image.shape)# 添加高斯噪声
noisy_image = add_gaussian_noise(image, mean=0, std_dev=30)# 显示原始图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
如果是直接矩阵相加:

import numpy as np
import cv2def add_gaussian_noise(image, mean, std_dev):# 生成与图像大小相同的高斯分布随机噪声noise = np.random.normal(mean, std_dev, image.shape).astype(np.uint8)print(type(noise),noise.shape,noise)# 将噪声添加到原始图像noisy_image = image + noisereturn noisy_image# 读取原始图像
image = cv2.imread(r"C:\Users\loong\Downloads\ma.jpg", 0)  # 灰度图像
print("image:",image.shape)# 添加高斯噪声
noisy_image = add_gaussian_noise(image, mean=0, std_dev=30)# 显示原始图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

2)三维图片加噪:

import numpy as np
from PIL import Imagedef add_gaussian_noise(image, mean, std_dev):noise = np.random.normal(mean, std_dev, image.shape).astype(np.uint8)print(type(noise),noise.shape,noise)noisy_image = image + noisereturn noisy_image# 读取 JPG 图片
image_path = r"C:\Users\loong\Downloads\ma.jpg"
image = Image.open(image_path)# 将 PIL 图片转换为 NumPy 数组
image_array = np.array(image)
print("image:",image_array.shape)
# 设置高斯噪声参数
mean = 0
std_dev = 30# 添加高斯噪声
noisy_image = add_gaussian_noise(image_array, mean, std_dev)# 显示原图和带噪声图像
original_image = Image.fromarray(image_array)
noisy_image = Image.fromarray(noisy_image.astype(np.uint8))original_image.show(title='Original Image')
noisy_image.show(title='Noisy Image')

在这里插入图片描述
或者

import cv2
import numpy as np# 读取图像
image = cv2.imread(r"C:\Users\loong\Downloads\ma.jpg")# 生成噪声图像
noise = np.random.normal(0, 25, image.shape).astype(np.uint8)# 使用 cv2.add 函数添加噪声
noisy_image_cv2 = cv2.add(image, noise)# 显示原图和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image (cv2.add)', noisy_image_cv2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

3)模拟Diffusion正向扩散多次加噪效果
加噪10次

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread(r"C:\Users\loong\Downloads\ma.jpg")# 创建一个用于展示所有图片的画布
fig, axs = plt.subplots(2, 5, figsize=(15, 6))# 在第一个位置显示原图像
axs[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
axs[0, 0].axis('off')
axs[0, 0].set_title('Original Image')# 在每一步添加噪声并展示图像
for i in range(1, 10):# 生成噪声图像noise = np.random.normal(0, 1.5, image.shape).astype(np.uint8)  # 降低噪声幅度# 使用 cv2.add 函数添加噪声noisy_image_cv2 = cv2.add(image, noise)# 在画布上显示图像axs[i//5, i%5].imshow(cv2.cvtColor(noisy_image_cv2, cv2.COLOR_BGR2RGB))axs[i//5, i%5].axis('off')axs[i//5, i%5].set_title(f'Noisy Image {i}')# 更新原图像为添加噪声后的图像,用于下一步的噪声添加image = noisy_image_cv2# 显示最终的画布
plt.tight_layout()
plt.show()

在这里插入图片描述

这篇关于Diffusion扩散模型学习:图片高斯加噪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529793

相关文章

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.