【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

【图像去噪】【TGV 正则化器的快速计算方法】通过FFT的总(广义)变换进行图像去噪,可提供更自然的恢复图像。为了进一步提升算法的执行效率,我们通过在FFTed(快速傅里叶变换后的)域中求解多变量方程的方式进行优化。

图像去噪是数字图像处理领域中一个重要的任务,通过消除图像中的噪声,可以提高图像的质量和清晰度。TGV(总变差正则化)是一种常用的图像去噪方法,它结合了总变差和梯度正则化,能够有效地去除图像中的噪声,并保持图像细节的准确性。

为了加速TGV正则化器的计算过程,我们利用了FFT(快速傅里叶变换)的性质。FFT是一种高效的算法,可将信号从时域转换到频域,对于处理图像数据非常有效。通过将图像和正则化器在傅里叶域中进行计算,我们可以将复杂的多变量方程转化为一系列更简单的单变量方程,从而大大简化了计算过程。

具体而言,我们首先对输入图像和TGV正则化器进行FFT变换,将它们转换到频域。然后,在频域中,我们将TGV正则化器应用于傅里叶变换后的图像数据,通过解决一系列独立的单变量方程来恢复图像。最后,我们将得到的结果再次通过逆FFT变换转换回时域,得到最终的去噪图像。

这种基于FFT的快速计算方法不仅提高了TGV正则化器的执行速度,还能够更准确地恢复图像的细节和结构。通过在频域中进行运算,我们可以更充分地利用FFT的高效性能,从而在保证图像质量的同时,减少计算时间和资源消耗。

这种快速计算方法在图像去噪领域具有广泛的应用前景,可以在实际的图像处理任务中提供更高效和准确的结果。通过进一步研究和改进,我们可以不断优化这种方法,为图像去噪技术的发展做出更大贡献。

📚2 运行结果

主函数代码:

clear all;
close all;
clc;help imtgvsmooth% ADMM parameters
nite = 20; % number of iterations% balancing weights for Total Variation
alpha = 0.06;  % 1st order
beta = 0.05; % 2nd order%
% load an image
%
fname = 'sanada.jpg';
I = im2double( imread( fname ) );I0 = I; % original as the reference% Additional noise
I = imnoise( I, 'gaussian', 0, 0.1^2 );%
% TGV with R,G,B independent processing
%
J = zeros( size(I) );if ( size(I,3)==3 )I_ycc = rgb2ycocg( I );
endfor c = 1:size(I,3)J(:,:,c) = imtgvsmooth( I_ycc(:,:,c), alpha, beta, nite );
endif ( size(I,3)==3 )J = ycocg2rgb( J );
end%
% PSNR
%
psnr_noisy = 10*log10( 1/mean( ( I0(:) - I(:) ).^2 ) );
psnr_tgv = 10*log10( 1/mean( ( I0(:) - J(:) ).^2 ) );%
% Dsiplaying results
%
figure(1), imshow( [I0, I, J] );
title( sprintf('From the left,  original,  noisy %.2fdB,  TGV %.2fdB', psnr_noisy, psnr_tgv ) );

clear all;
close all;
clc;

help imtgvsmooth

% ADMM parameters
nite = 20; % number of iterations

% balancing weights for Total Variation
alpha = 0.06;  % 1st order
beta = 0.05; % 2nd order


%
% load an image
%
fname = 'sanada.jpg';
I = im2double( imread( fname ) );

I0 = I; % original as the reference

% Additional noise
I = imnoise( I, 'gaussian', 0, 0.1^2 );


%
% TGV with R,G,B independent processing
%
J = zeros( size(I) );

if ( size(I,3)==3 )
    I_ycc = rgb2ycocg( I );
end

for c = 1:size(I,3)
    J(:,:,c) = imtgvsmooth( I_ycc(:,:,c), alpha, beta, nite );
end

if ( size(I,3)==3 )
    J = ycocg2rgb( J );
end

%
% PSNR
%
psnr_noisy = 10*log10( 1/mean( ( I0(:) - I(:) ).^2 ) );
psnr_tgv = 10*log10( 1/mean( ( I0(:) - J(:) ).^2 ) );

%
% Dsiplaying results
%
figure(1), imshow( [I0, I, J] );
title( sprintf('From the left,  original,  noisy %.2fdB,  TGV %.2fdB', psnr_noisy, psnr_tgv ) );

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]张文娟,王艳红,ZHANGWen-juan,WANGYan-hong.运用TGV正则化分解模型实现天文图像去噪[J].西安工业大学学报, 2012(9).DOI:10.3969/j.issn.1673-9965.2012.09.003.

[2]陈育群,陈颖频,林凡,等.一种快速交叠组合稀疏全变分图像去噪方法[J].闽南师范大学学报:自然科学版, 2019, 32(3):6.DOI:CNKI:SUN:ZSXZ.0.2019-03-008.

[3]张文静.TGV正则化与小波变换结合的图像去噪算法研究[D].武汉理工大学,2014.DOI:10.7666/d.D639381.

🌈4 Matlab代码实现

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

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

相关文章

uniapp:不同权限设置不同的tabBar

1、在pages.json里,将所有tabBar涉及的页面都加进来。 我这里使用username来动态显示tabBar。 jeecg用户显示:首页,订单,消息,发现,我的,一共5个tabBar。 admin用户显示:首页&…

青大数据结构【2022】

关键字: next数组、下三角矩阵、完全二叉树结点、静态分布动态分布、迪杰斯特拉最短路径、二叉排序树失败ASL、排序比较、二叉排序树中序遍历、链表删除最大值 一、单选 二、简答 三、应用 四、算法分析 五、算法设计

YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进

💡本篇内容:YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv5专属 论文理论部…

「Go框架」gin框架是如何处理panic的?

本文我们介绍下recover在gin框架中的应用。 首先,在golang中,如果在子协程中遇到了panic,那么主协程也会被终止。如下: package mainimport ("github.com/gin-gonic/gin" )func main() {r : gin.Default()// 在子协程中…

轻松使用androidstudio交叉编译libredwg库

对于安卓或嵌入式开发者而言,交叉编译是再熟悉不过的操作了,可是对于一些刚入门或初级开发者经常会遇到这样的问题:如何交叉编译C++库来生成安卓下的so库呢? 最近有一些粉丝找到我求救,那么我最近刚好有空大致研究了下,帮他们成功编译了其中一个libredwg的C++库,这篇文章…

算法 全排列问题-(递归回溯)

牛客网: BM56 有重复项数字全排列,解题思路: 数字全排列,从0位置开始遍历数字作为排列项的第一位,记录此位置已经遍历,递归进入下一层,再从0位置开始遍历作为排列项第二位,如果是已记录的位置…

LeetCode01

LeetCode01 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和 为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你…

【二分法查找】

使用二分法查找需要注意的点: 使用二分法的前提: 数组为有序数组,同时题目还强调数组中无重复元素。 二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持…

Lua多脚本执行

--全局变量 a 1 b "123"for i 1,2 doc "Holens" endprint(c) print("*************************************1")--本地变量(局部变量) for i 1,2 dolocal d "Holens2"print(d) end print(d)function F1( ..…

Java中的IO流的缓冲流

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 文章目录 🌴IO流体系结构🌴缓冲流1.提高效率的原理2.缓冲流的类型3.字符缓冲流两个特有方法 🌴总结 🌴IO流体系…

springcloudgateway Actuator API

官方文档&#xff1a;11. Actuator API 开启actuator 加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> 加配置 management:endpoints:web:expos…

git学习使用

git使用 1、cmd #查看版本 git version2、初识 Git GUI: Git提供的图形界面工具 Git Bash: Git提供的命令行工具 1.打开Git Bash2.设置自己的用户名和邮箱地址git config --global user.name "xxx"git config --global user.email "123456789163.com"查…

基于jenkins+k8s实现devops

1、背景 由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程&#xff0c;亲测无坑 2、部署 1、创建ns kubectl create namespace devops 2、kubectl apply -f jenkins.yml apiVersion: v1 kind: ServiceAccount metadata:name: jenkinsnamespace…

OpenHarmony应用程序包整体说明

用户应用程序泛指运行在设备的操作系统之上&#xff0c;为用户提供特定服务的程序&#xff0c;简称“应用”。一个应用所对应的软件包文件&#xff0c;称为“应用程序包”。 OpenHarmony提供了应用程序包开发、安装、查询、更新、卸载的管理机制&#xff0c;方便开发者开发和管…

Vue安装插件时候中遇到冲突依赖解决方案

错误如下&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/eslint-plugin-vue npm ERR! dev eslint-pl…

word中给公式加序号的方法

①首先&#xff0c;用word插入一个公式 然后呢&#xff0c;在公式后面敲上这个公式在整篇文章中的序号。我的这个公式在整篇文章中是第三号&#xff0c;所以就敲上(3),如下图所示&#xff1a; 然后&#xff0c;在公式和序号之间&#xff0c;按住shift3(#) 切忌&#xff0c;…

UNITY—2D游戏制作入门!

Unity作为当今最流行的游戏引擎之一&#xff0c;受到各大厂商的喜爱。 像是炉石传说&#xff0c;以及逃离塔克夫&#xff0c;都是由unity引擎开发制作。 作为初学者的我们&#xff0c;虽然无法直接做出完成度那么高的作品&#xff0c;但每一个伟大的目标&#xff0c;都有一个…

MySQL数据库的索引和事务

目录 一、索引 1.1Mysql索引 1.2索引的作用 1.3 创建索引的依据 1.4 普通索引 修改表方式创建索引 删除索引 1.5 唯一索引 修改表方式创建 删除索引 1.6 主键索引 修改表方式创建 1.7 组合索引 1.8 全文索引 1.9查看索引 二、事务 2.1事务概念 2.2事务的ACID特…

软件测试一些常见的误区

摘要 随着市场对软件质量的不断提高&#xff0c;软件测试不断受到重视&#xff0c;但是由于总体上&#xff0c;国内软件项目过程不规范&#xff0c;导致重视编码和轻视测试的现象&#xff0c;对于软件测试的重要性、测试方法和流程等还存在很多错误的认识。根据作者的软件工作…

绘制lidar点云pose

输入点云序列&#xff0c;得到点云的运动轨迹&#xff0c;并生成周围点云拼接得到的点云地图 #include <rclcpp/rclcpp.hpp> #include <sensor_msgs/msg/point_cloud2.hpp> #include <geometry_msgs/msg/transform_stamped.hpp> #include <pcl/point_clo…