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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss