数字图像处理:图像去噪

图像去噪–总变差去噪(TV)

引用资料:
1.全变分图像去噪算法(TV)
2.TV去噪的理解

总变差去噪 (Total Variation Denoising) 是一种经典的图像去噪方法,能够有效减少噪声,同时保留图像的边缘细节。该方法的核心思想是通过最小化图像的“总变差”来实现图像平滑,避免过度平滑损失边缘。

下图来自:1.全变分图像去噪算法(TV)

下图来自:1.全变分图像去噪算法(TV)

1.1 定义全变分

1.1.1 数学定义

全变分(TV)度量图像中梯度变化的总量,它是衡量图像平滑程度的一个关键指标。在图像去噪中,全变分的定义帮助我们描述图像的整体变化,尤其是边缘区域的变化。

1.1.2 疑问一:为什么要对图像梯度求绝对值?

1.1.3 疑问二:为什么要对图像梯度的绝对值进行积分?

1.2 能量泛函建模

1.2.1 数学定义

1.2.2 疑问一:什么是泛函?





1.2.3 疑问二:泛函在图像去噪方面的作用?

1.3 求解欧拉-拉格朗日方程

1.4 梯度下降法

1.5 有限差分求近似解

1.6 代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 定义 PSNR 计算函数
def calculate_psnr(original, denoised):mse = np.mean((original - denoised) ** 2)if mse == 0:  # 避免除零return float('inf')max_pixel = 255.0psnr = 20 * np.log10(max_pixel / np.sqrt(mse))return psnr# 定义 TV 去噪(梯度下降法)
def tv_denoise(image, lambda_tv=0.1, iterations=100, tau=0.125):u = image.astype(np.float64)m, n = u.shapefor i in range(iterations):# 计算梯度u_x = np.roll(u, -1, axis=1) - u  # x方向梯度u_y = np.roll(u, -1, axis=0) - u  # y方向梯度# 计算梯度的模长grad_u = np.sqrt(u_x**2 + u_y**2 + 1e-8)  # 避免除零# 更新u,使用离散梯度下降u = u + tau * (np.roll(u_x / grad_u, 1, axis=1) - u_x / grad_u + np.roll(u_y / grad_u, 1, axis=0) - u_y / grad_u) - tau * lambda_tv * (u - image)return np.clip(u, 0, 255).astype(np.uint8)# 打开图片并转换为灰度图像
img_dir = r'D:\Document\Experiment\data\image1.jpg'
gray = cv.imread(img_dir, 0)  # 读取图像并转换为灰度
image_array = np.array(gray)# 定义高斯噪声的参数
mean = 0  # 均值
sigma = 20  # 调低噪声强度(标准差)# 生成高斯噪声
gaussian_noise = np.random.normal(mean, sigma, image_array.shape)# 将噪声加入图像
noisy_image = image_array + gaussian_noise# 将噪声后的图像剪裁到0-255范围内,并转换为uint8
noisy_image_clipped = np.clip(noisy_image, 0, 255).astype(np.uint8)# 调用 TV 去噪
denoised_image = tv_denoise(noisy_image_clipped, lambda_tv=0.1, iterations=100, tau=0.125)# 计算原始图像和去噪图像的 PSNR
psnr_noisy = calculate_psnr(image_array, noisy_image_clipped)
psnr_denoised = calculate_psnr(image_array, denoised_image)# 显示原图、噪声图像和去噪后的图像
plt.figure(figsize=(15, 5))
plt.subplot(1, 3, 1)
plt.title('Original Image')
plt.imshow(image_array, cmap='gray')plt.subplot(1, 3, 2)
plt.title(f'Noisy Image (PSNR: {psnr_noisy:.2f})')
plt.imshow(noisy_image_clipped, cmap='gray')plt.subplot(1, 3, 3)
plt.title(f'Denoised Image (PSNR: {psnr_denoised:.2f})')
plt.imshow(denoised_image, cmap='gray')plt.show()

目前没有分析去噪后PSNR值下降的原因

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451094.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10.15.2024刷华为OD C题型(二)

10.15.2024刷华为OD C题型(二) 密码输入检测智能成绩表 如果是目标院校150分能过,而且这道题是两百分的话我就阿弥陀佛了。 这类简单类型的字符串处理题目一看就有思路,起码能做,遇到那种稍微加点数学的,感…

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导,来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料:Github_mpu6050 MPU6050寄存器…

C语言中的文件操作:从基础到深入底层原理

文件操作是几乎所有应用程序的重要组成部分,特别是在系统级编程中。C语言因其高效、灵活以及接近硬件的特点,成为了文件操作的理想选择。本文将全面深入地探讨C语言中的文件操作,从文件系统的概念到具体的文件操作函数,再到底层的…

外包干了2年,技术原地踏步。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

020 elasticsearch7.10.2 elasticsearch-head kibana安装

文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万,数据库无法使用索引 如何使用全文检索: 使用lucene,在java中唯一…

Nginx(Linux):启动停止Nginx

目录 1、理解Nginx后台进程2、停止Nginx(方式一:使用信号源)2.1 获取master进程号2.1 设置信号源 3、停止Nginx(方式二:使用命令行) 1、理解Nginx后台进程 Nginx后台进程包含master和worker两类进程。 master进程:主要用来管理worker进程&am…

鸿蒙学习笔记--搭建开发环境及Hello World

文章目录 一、概述二、开发工具下载安装2.1 下载开发工具DevEco Studio NEXT2.2 安装DevEco Studio 三、启动软件四、第一个应用Hello World4.1 创建应用4.2 创建模拟器4.3 开启Hyper-v功能4.4 启动虚拟机 剑子仙迹 诗号:何须剑道争锋?千人指&#xff0c…

【Linux】:线程概念

朋友们、伙计们,我们又见面了,本期来给大家带来线程概念相关代码和知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…

智能汽车制造:海康NVR管理平台/工具EasyNVR多品牌NVR管理工具/设备实现无插件视频监控直播方案

一、背景介绍 近年来,随着网络在我国的普及和深化发展,企业的信息化建设不断深入,各行各业都加快了信息网络平台的建设,大多数单位已经或者正在铺设企业内部的计算机局域网。与此同时,网络也成为先进的新兴应用提供了…

【Git】基本操作+分支管理

Git基本操作 Git仓库创建 Git仓库的基本认知 Git仓库就是一个用来跟踪和管理项目文件变化的地方,其记录了所有的修改历史,可以回退到之前的任何一个历史版本 工作区:正在进行实际操作的文件夹暂存区:临时保存想要提交修改的区域…

【LeetCode:349. 两个数组的交集 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

鸿蒙原生应用扬帆起航

就在2024年6月21日华为在开发者大会上发布了全新操作的系统HarmonyOS Next开发测试版,网友们把它称之为“称之为纯血鸿蒙”。因为在此之前鸿蒙系统底层式有两套基础架构的,一套是是Android的AOSP,一套是鸿蒙的Open Harmony,因为早…

计算机毕业设计 基于Python的毕业生去向反馈调查平台的设计与实现 Python毕业设计选题 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

物联网IoT平台 | 物联网IoT平台的定义

物联网IoT平台:定义、发展与应用在当今信息化时代,物联网(Internet of Things,简称IoT)已经成为推动社会进步和产业升级的重要力量。物联网IoT平台,作为连接物理世界与数字世界的桥梁,正逐步改变…

Docker安装Nginx

前提:Docker已安装好,本人使用的为自带docker的云服务器,docker常用命令已掌握,yjj为在根目录创建的一个文件夹,可自行修改对应的目录。 1、安装镜像,可去dockerhub上面找,一般都是组件名称。do…

双十一值得购买超声波清洗机吗?双十一超声波清洗机好物品牌推荐

随着双十一购物狂欢节即将拉开序幕,越来越多的消费者开始关注这个一年一度的购物盛宴。超声波清洗机作为近年来备受关注的家用电器,以其高效、便捷的清洁能力赢得了众多家庭的喜爱。在双十一期间,各大品牌纷纷推出优惠活动,让不少…

红黑树的底层讲解

一、红黑树的介绍 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是红(red)或黑(black)。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红…

通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层

cplusplus.com/reference/list/list/?kwlist 当我们大致阅读完list的cplusplus网站的文档时,我们会发现它提供的接口大致上与我们的vector相同。当然的,在常用接口的简单实现上它们也大体相同,但是它们的构造函数与迭代器的实现却大有不同。…

计算机网络:数据链路层 —— 共享式以太网

文章目录 共享式以太网CSMA/CD 协议CSMA/CD 协议 的基本原理 共享式以太网的争用期共享式以太网的最小帧长共享式以太网的最大帧长共享式以太网的退避算法截断二进制指数退避算法 共享二进制以太网的信道利用率使用集线器的共享式以太网10BASE-T 共享式以太网 共享式以太网是当…