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

相关文章

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio