【图像去噪】非局部均值(NLM)滤波图像去噪【含Matlab源码 420期】

news2024/10/2 22:24:06

⛄一、图像去噪及滤波简介

1 图像去噪
1.1 图像噪声定义
噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y)表示图像信号,n(x,y)表示噪声。
图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。去噪是图像处理研究中的一个重点内容。在图像的获取、传输、发送、接收、复制、输出等过程中,往往都会产生噪声,其中的椒盐噪声是比较常见的一种噪声,它属于加性噪声。

1.2 图像噪声来源
(1)图像获取过程中
图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。
(2)图像信号传输过程中
传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

1.3 噪声分类
噪声按照不同的分类标准可以有不同的分类形式:
基于产生原因:内部噪声,外部噪声。
基于噪声与信号的关系:
加性噪声:加性噪声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
g = f + n;
乘性嗓声:乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
g = f + f*n
按照基于统计后的概率密度函数:
是比较重要的,主要因为引入数学模型这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

1.4 图像去噪算法的分类
(1)空间域滤波
空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。
(2)变换域滤波
图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。
(3)偏微分方程
偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程,以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。
(4)变分法
另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。
形态学噪声滤除器将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

2 非局部均值(NLM)滤波
Antoni Buades在2005年提出了NLM算法。此算法成功避免了现有降噪算法以噪声图像正则假设为前提, 以及在降噪过程中图像结构信息丢失等不足。因为该算法在保持边缘信息方面和图像结构信息方面的出色性能,所以一经提出就被广泛应用,成为图像处理领域的一个研究热点。
NLM算法的原理如下:如图1所示, 图中包含P, Y 1和Y 2三个像素点及它们各自的邻域, 可以看出, 像素点P和Y 1具有非常相似的邻域结构,而P和Y2的邻域相似性很小,那么在对P点像素进行滤波处理的时候Y2的相似度权值w(P,Y2)则要比Y1对它的相似度权值w(P,Y1)大。可以通过搜索整幅图像里所有跟像素点P具有相似邻域的像素点,然后对它们按所得的相似度加权平均来得到像素点P的最终恢复结果。
在这里插入图片描述
图1 NLM滤波算法原理
NLM滤波算法进行图像去噪是以图像块为单位来计算像素点的相似度。所谓的图像块就是以某个像素点为中心的方形邻域。设受污染的图像在像素点i的灰度值为v(i),滤波后的灰度估计值为NL(V)(i)。对于任何一个像素点i,经过滤波后的NL(v)(i)可通过计算整个噪声图像里具有相似邻域的像素点的加权平均得到
在这里插入图片描述
式中,I为整个图像空间;权重系数 ω(i,j)为像素点 j对像素点 i的影响程度,如下所示
在这里插入图片描述

⛄二、部分源代码

function [output]=NLmeans(input,t,f,h)

% 输入: 待平滑的图像
% t: 搜索窗口半径
% f: 相似性窗口半径
% h: 平滑参数
% NLmeans(ima,5,2,sigma);

% 图像大小
[m n]=size(input);
% 输出
Output=zeros(m,n);
input2 = padarray(input,[f+t f+t],‘symmetric’);%边界作对称处理

% 高斯核
kernel = make_kernel(f);
kernel = kernel / sum(sum(kernel));

h=h*h;

for i=1:m
for j=1:n

     i1 = i+ f+t;%原始图像的像素位置 (中心像素)
     j1 = j+ f+t;
            
     W1= input2(i1-f:i1+f , j1-f:j1+f);%小窗口
     
     wmax=0; 
     average=0;
     sweight=0;
     
     %rmin = max(i1-t,f+1);
     %rmax = min(i1+t,m+f);
     %smin = max(j1-t,f+1);
     %smax = min(j1+t,n+f);
     rmin=i1-t;
     rmax=i1+t;
     smin=j1-t;
     smax=j1+t;
     
     for r=rmin:1:rmax %大窗口
        for s=smin:1:smax
                                           
            if(r==i1 && s==j1) 
                continue; 
            end;
                            
            W2= input2(r-f:r+f , s-f:s+f);    %大搜索窗口中的小相似性窗口     
            d = sum(sum(kernel.*(W1-W2).*(W1-W2)));
            w=exp(-d/h); %权重      
                             
            if w>wmax                
                wmax=w;   %求最大权重            
            end
            
            sweight = sweight + w;  %大窗口中的权重和
            average = average + w*input2(r,s);                                  
        end 
     end
         
    average = average + wmax*input2(i1,j1);
    sweight = sweight + wmax;
               
    if sweight > 0
        output(i,j) = average / sweight;
    else
        output(i,j) = input(i,j);
    end                
end

end
function nX = noise(varargin)
% 图像加入噪声
% 传入参数依次为:
% X - 待处理的图像
% type - 噪声类型
% variance/density - 高斯噪声的方差/椒盐噪声的密度(optional)
% M - 控制噪声区域的模板(optional)

% 参数默认值
variance = 0.01; %高斯噪声的方差 默认值为0.01
density = 0.05; %椒盐噪声的密度 默认值为0.05
M = ones(size(varargin{1})); %控制噪声区域的模板 默认对整个图像加噪声

X = varargin{1}; %待处理的图像
type = varargin{2}; %噪声类型

% 可选参数
if nargin>=3
variance = varargin{3};
density = varargin{3};

if nargin == 4
    M = varargin{4};
end

end

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]易子麟,尹东,胡安洲,张荣.基于非局部均值滤波的SAR图像去噪[J].电子与信息学报. 2012,34(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

Spring Cloud Alibaba Sentinel - - > 容错机制

文章目录Sentinel 的作用分布式微服务系统遇到的问题导致服务不可用的原因:Sentinel - - > 容错机制参考:Sentinel 的作用 Sentinel 主要用来解决微服务架构中出现的一些可用性问题,从而实现系统的高可用。系统在运行过程中不可能不出现问…

单例模式的创建(饿汉模式懒汉模式)

目录 一.什么是单例模式 二.用static来创建单例模式 三.饿汉模式与懒汉模式 四.饿汉模式与懒汉模式的线程安全问题 五.New引发的指令重排序问题 六.小结 一.什么是单例模式 单例模式就是指某个类有且只有一个实例(instance) 这个是由需求决定的,有些需求场景就要求实例不…

关于mysql学习

1.索引 1.1 索引概述 Mysql官方对索引的定义是:索引(index)是帮助mysql高效获取数据的数据结构(有序)。在数据库之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某些方式引用(指向)数据,这样就可以在数据结构…

密码技术扫盲:对称加密

个人博客 🎯 密码技术扫盲:对称加密密码技术扫盲:非对称加密密码技术扫盲:认证 人类最较真、技艺最精湛的事业是军事,密码技术最大放异彩的地方也在军事,战争中需要通过无线电或其他手段来传达指令&#…

LeetCode刷题复盘笔记—一文搞懂动态规划之309. 最佳买卖股票时机含冷冻期问题(动态规划系列第二十四篇)

今日主要总结一下动态规划的一道题目,309. 最佳买卖股票时机含冷冻期 题目:309. 最佳买卖股票时机含冷冻期 Leetcode题目地址 题目描述: 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算…

Python编程 函数的定义与参数

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数例子 不会让代码重复的出现。CVout 2.函数介绍(熟悉) 3.…

如何在AdsPower中设置Oxylabs住宅代理和数据中心代理?

AdsPower是一款适用于Windows和Mac系统的浏览器管理工具,允许多用户登录。AdsPower的主要功能有多账户管理、浏览器指纹处理等。 集成操作流程 在官网(www.adspower.com/download)下载AdsPower并完成安装工作后,单击新建配置文件…

分布式文件系统之NFS

「分布式」是现在蛮流行的一个词,而其盛行,离不开底层网络通信能力的迅速发展。在文件系统这个领域,早期的分布式实现更多的是用来实现「共享」,而不是「容错」。传统的集中式文件系统允许单个系统中的多用户共享本地存储的文件&a…

SVG公众号排版 | GIF动图如何禁止循环播放?PS设置了也没用!

在SVG公众号排版中,我们经常使用到GIF动图,有些排版需求是想让GIF动图一直无限循环播放,也有其他排版需求是只想让GIF动图播放一次就停止了,这种情况我们可以通过Photoshop软件来设置GIF动图的播放次数,详见下图。 但是呢,也有一种情况,即使在Photoshop软件设置了GIF动图…

大话设计模型 Task02:策略、装饰、代理

目录一、简单工厂模式问题描述模式定义问题分析代码实现二、策略模式问题描述问题分析模式定义代码实现三、装饰模式问题描述问题分析模式定义代码实现四、代理模式问题描述问题分析模式定义代码实现五、工厂方法模式问题描述问题分析模式定义简单工厂 vs. 工厂方法代码实现一、…

上传项目代码到Github|Gitee

上传项目代码到Github|Gitee 文章目录上传项目代码到Github|Gitee1、前置准备1.1 Git 安装1.2 在 Git 中设置用户名1.2.1 为计算机上的每个存储库设置 Git 用户名1.2.2 为一个仓库设置 Git 用户名1.3 SSH免密登录1.4 Github创建一个新的仓库2、上传项目2.1 初始化本地库2.2 添加…

蓝桥杯入门即劝退(十六)查找元素范围(双解法)

欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…

什么是制造业数字化转型?制造业数字化转型的核心与意义

对于生产制造企业来讲,当下如果不进行数字化转型的话,很大概率会被时代所抛弃的。为什么这么讲?因为在未来的很长一段时间,你可以充分了解到,数字化转型已然成为了制造业向前的主旋律。既然数字化势在必行,…

可以赚钱的副业项目,简单易上手兼职副业推荐

在当前的经济环境下,对每个人来说,仅仅依靠那点薪水生活是非常紧张的。为了改善你的生活,你需要找到其他赚钱的方法,在互联网上做兼职是一个不错的选择。 今天推荐几个普通人可以做的兼职副业,希望对大家有所帮助。 一…

微信公众号的文章可以修改几次?修改的步骤有哪些

许多小伙伴们在运营微信公众号的时候,可能会遇到过这些难题,在发布微信公众号之前检查没有检查好,导致有错字或者是错句。有的时候可能配图还会配错! 今天伯乐网络传媒就给大家带来一些实用的东西,比如微信公众号可以…

深入理解 Python 的对象拷贝和内存布局

深入理解 Python 的对象拷贝和内存布局 前言 在本篇文章当中主要给大家介绍 python 当中的拷贝问题,话不多说我们直接看代码,你知道下面一些程序片段的输出结果吗? a [1, 2, 3, 4] b a print(f"{a } \t|\t {b }") a[0] 100…

微信小程序的自定义组件(1)

文章目录1. 自定义组件2. 组件样式3. 组件-数据、方法和属性4. 组件数据监听器5. 组件纯数据字段1. 自定义组件 Component(Object object) | 微信开放文档 (qq.com) 创建组件 在项目的根目录中,鼠标右键,创建components->test文件夹在新建的componen…

第十二章 计算学习理论

12.1 基础知识 计算学习理论研究的关于通过计算来进行学习的理论。即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法提供理论保证,并根据分析结果指导算法设计。 12.2 PAC学习 计算学习理论中最基本的是概率近似正确&…

点击化学染料DBCO-PEG-CY7.5|Cyanine7.5-PEG-DBCO|花青素Cyanine7.5

​DBCO-PEG-CY7.5点击化学染料其中Cy7.5 (Cyanine 7.5) 是一种发近红外(NIR)荧光的花青素荧光染料。根据磺化与否,分为普通Cy7.5和磺化Cy7.5,但常常统称为Cy7.5。 Cy7.5的消光系数高,荧光也很亮,并且对pH不…

为什么很多人转行学习Web前端技术?

为什么很多人转行学习Web前端技术?不管你是工人阶层还是服务行业,是否想过转行IT,转行IT后肯定会选择一门编程语言进行深入学习,很多转行的人基础都不是太好,不是科班出身,甚至有的是专科乃至中专,前端的H…