不同图像的噪声,选用什么滤波器去噪,图像处理的噪声和处理方法

2023-10-28

不同图像的噪声,选用什么滤波器去噪,图像处理的噪声和处理方法

提示:据说是科大讯飞的算法面试题

知道哪些噪声,分别用什么滤波器处理?


图像噪声

噪声来源灰常多,但主要可以分为三类:

1.来自捕捉源的(acquisition/digitization),比如一个摄像机的镜头、A/D或者sensor;

2.来自图像传输过程(image transmission),传输图像的信道包括无线电、微波、光缆等等,如果通过无线电传输,遇到个风吹雨雪的,自然会有各种噪声了;

3.来自计算过程(computation),比如咱们将浮点型数据转化为整形处理,就会丢失部分信息,但这不属于错误,是把问题简化,所以这也是一种噪声。

所以,图像复原主要是用各种滤波方法去除噪声。

因为噪声的来源飘忽不定,所以噪声的种类很多。
包括
指数噪声(exponential noise)、
均匀噪声(uniform noise)、
脉冲噪声(impulse noise)、
椒盐噪声(salt and pepper noise)(也叫黑白噪声,就是黑白点)、
斑点噪声(speckle noise)(大多在雷达信号里产生)、
瑞利噪声(reyleigh noise)(不太明白这种噪声的来源)、
周期噪声(periodic noise)。

而在一般不知道噪声属于什么类型时,多加入高斯噪声进行模拟。

针对不同噪声选用不同滤波器效果也不同。
常见的处理方法:均值滤波 、中值滤波、高斯滤波、双边滤波器去噪 双边滤波

椒盐噪声与中值滤波去噪

首先,对lena女神加入椒盐噪声,因为椒盐噪声为黑白噪声,所以中值滤波效果应该不错。
试验结果如下图:
在这里插入图片描述
加椒盐噪声
在这里插入图片描述

在这里插入图片描述
用中值滤波去噪:

 
Image image = Image.FromFile("xx.jpg");
Image<Bgr, byte> img = new Image<Bgr, byte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
 img =img.SmoothMedian(k);//按照指定的滤波核进行中值滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

在这里插入图片描述

在这里插入图片描述
经过中值滤波,基本恢复原始图像

均值滤波

 
Image image = Image.FromFile("xx.jpg");
Image<Bgr, byte> img = new Image<Bgr, byte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
img = img. SmoothBlur (k,k);//按照指定的滤波核进行均值滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

在这里插入图片描述


高斯噪声与高斯滤波去噪

再对原始图像加入高斯噪声。

因为高斯噪声的范围遍布所有灰度级,所以,任何一种低通、高通、带通滤波器都无法完全将其滤除,我们只能尽可能的获得较好效果。
经过查资料,滤除高斯噪声的主要方法有:
平滑线性滤波、
高斯滤波、
维纳滤波还有
小波去噪(小波去噪有些复杂,今天没做)。

下图是加入高斯噪声的效果。
在这里插入图片描述
加高斯噪声
在这里插入图片描述
下面分别是针对高斯噪声,采用平滑线性滤波、高斯滤波、维纳滤波处理的直观效果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直观上看平滑线性滤波没有高斯滤波和维纳滤波效果好。

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,普遍应用于图像处理的减噪过程。

高斯滤波就是对整幅图像进行加权平均的过程,每个像素点的值,
都由其自己和邻域内的其余像素值通过加权平均后获得。

高斯滤波的具体操做是:用一个模板(或称卷积、掩模)扫描图像中的每个像素,
用模板肯定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

双边滤波器去噪

双边滤波器(Bilateral filter)是一种能够保边去噪的滤波器。

能够滤除图像数据中的噪声,且还会保留住图像的边缘、纹理等
(因噪声是高频信号,边缘、纹理也是高频信息
高斯滤波会在滤除噪声的同时使得边缘模糊)。

是使用一个卷积核(模板矩阵),叠加到待处理像素点上,
使用对应邻域像素点的加权求和来做为新的输出像素点的值一种方法,
简单来讲,双边滤波和高斯滤波同样,不一样只在于模板矩阵的不一样。

 
Image image = Image.FromFile("xx.jpg");
Image<Bgr, byte> img = new Image<Bgr, byte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
CvInvoke.EdgePreservingFilter(img, img, EdgePreservingFilterFlag.NormconvFilter, k, 0.4f);;//按照指定的滤波核进行双边滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

小波去噪

将信号经过小波变换(采用Mallat算法)后,
信号产生的小波系数含有信号的重要信息
,将信号经小波分解后小波系数较大,噪声的小波系数较小,

而且噪声的小波系数要小于信号的小波系数,
经过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,
小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。

离散余弦变换DCT滤波

在这里插入图片描述
时间域相对于空间域增加了一个时间维度,
可以对不同时间段的图像进行处理,
对时域噪声有很好的抑制作用。

而频率域又是一个全新的维度,换个角度看问题,
将图像转换到频域,高频部分代表图像的细节、纹理信息,
低频部分代表图像的轮廓信息,可以再特定的“频率”范围内对图像进行处理,
就像是用显微镜看图像一样,能挖掘图像更加广阔的信息。

在这里插入图片描述

离散余弦变换是一种频率域转为到空间域的数学工具(函数),
它为频率域与空间域架起一座桥梁。

离散余弦变换是**离散傅里叶变换(DFT)**的一种特殊形式,特殊点就在于其原始变换信号是一个实偶函数。

DCT变换较DFT变换具有更好的频域能量聚集度,
那么对于那些不重要的频域区域和系数就能够直接裁剪掉,
因此,DCT变换非常适合于图像压缩算法的处理,
例如现在大名鼎鼎的jpeg就是使用了DCT作为图像压缩算法。

二维DCT变换公式如下:

在这里插入图片描述
由公式我们可以看出,上面只讨论了二维图像数据为方阵的情况,
在实际应用中,如果不是方阵的数据一般都是补齐之后再做变换的,
重构之后可以去掉补齐的部分,得到原始的图像信息,这个尝试一下,应该比较容易理解

另外,由于DCT变换高度的对称性,
在使用Matlab进行相关的运算时,我们可以使用更简单的矩阵处理方式:
在这里插入图片描述

clear;
clc;
% 正变换
X=round(rand(4)*100)   %产生随机矩阵
A=zeros(4);
for i=0:3
    for j=0:3
        if i==0
            a=sqrt(1/4);
         else
             a=sqrt(2/4);
         end            
         A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4);
    end
end

Y=A*X*A'        %DCT变换

%反变换
for i=0:3
    for j=0:3
         if i==0
             a=sqrt(1/4);
         else
             a=sqrt(2/4);
         end            
         A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); %生成变换矩阵
     end
end

X1=A'*Y*A  %DCT反变换恢复的矩阵

% Matlab版
YY=dct2(X)      %Matlab自带的dct变换
XX=idct2(YY)    %Matlab自带的idct逆变换

%读取图像
X=imread('lena.jpg'); 
X=rgb2gray(X);
%读取图像尺寸
[m,n]=size(X); 
%给图像加噪
Xnoised=imnoise(X,'gaussian',0.01); 
%输出加噪图像
subplot(121); 
imshow(Xnoised);
%DCT变换
Y=dct2(Xnoised); 
I=zeros(m,n);
%高频抑制
I(1:m/3,1:n/3)=1; 
Ydct=Y.*I;
%逆DCT变换
Y=uint8(idct2(Ydct)); 
%结果输出
subplot(122);
imshow(Y);

在这里插入图片描述


总结

提示:重要经验:

1)噪声有椒盐噪声、高斯噪声等等
2)中值滤波,均值滤波应对椒盐噪声,高斯平滑,双边滤波(双线性变换),应对高斯噪声,还有小波变换,DCT变换滤波
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同图像的噪声,选用什么滤波器去噪,图像处理的噪声和处理方法 的相关文章

  • 使用 OpenCV 和/或 Numpy 对两个图像进行 Alpha 混合 [重复]

    这个问题在这里已经有答案了 我想将一个填充纯色的半透明矩形添加到已加载的半透明 PNG 中 这是我正在使用的输入图像示例 该图像加载了标准cv2 IMREAD UNCHANGED标志 以便完美保留 alpha 通道 该输入图像存储在imag
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 提取二值图像中的最中心区域

    我正在处理二进制图像 之前使用此代码来查找二进制图像中的最大区域 Use the hue value to convert to binary thresh 20 thresh thresh img cv2 threshold h thre
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • C++ OpenCV 3.4 / FFMPEG 3.4.1 VideoWriter 和 MP4 输出文件格式

    我正在运行 Linux 内核 4 9 35 ti r44 的 ARM BeagleBone X 15 Debian 机器 在我的 C Qt 5 应用程序中 我想将 cv Mat 帧保存为 MP4 格式视频 我安装了 libx264 并从头开
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • OpenCV Sobel 滤波器 - 为什么它看起来这么糟糕,尤其是与 Gimp 相比?

    我正在尝试使用 OpenCV 重建一些我之前在 Gimp 中完成的预处理 第一级是用于边缘检测的 Sobel 滤波器 它在 Gimp 中运行得很好 现在这是我对 OpenCV 的尝试 opencv imgproc Sobel src sca
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • OpenCV 地板分割检测

    我正在研究一种检测图像中地板的方法 我试图通过将图像缩小为颜色区域然后假设最大区域是地板来实现此目的 我们对机器人的运行环境做出一些相当广泛的假设 我正在寻找一些关于适合这个问题的算法的建议 任何帮助将不胜感激 编辑 具体来说 我正在寻找一
  • 将 CvSeq 保存到数组

    我对 OpenCV 文档有点迷失 我想将 cvFindContours 返回的 CvSeq 保存到一个数组中 据我了解它将返回 CvContour 的 seq 但我找不到它包含的内容 我应该保存其中的哪些部分 稍后我可以迭代它并说调用 cv

随机推荐

  • 信息收集----谷歌语句

    信息收集的方式可以分为两种 主动和被动 主动的信息收集方式 通过直接访问 扫描网站 这种将流量流经网站的行为 被动的信息收集方式 利用第三方的服务对目标进行访问了解 比如 Google搜索 通过搜索引擎 有时会给我们带来意想不到的效果 下面
  • thinkphp5 切换多语言

    请求时候 1 header中增加 Accept Language 语言 2 在请求地址中增加 lang 语言参数
  • python--unittest单元测试框架

    1 简介 unittest单元测试框架是受到 JUnit JAVA 的启发 与其他语言中的主流单元测试框架有着相似的风格 其支持测试自动化 配置共享代码测试 支持将测试样例聚合到测试集中 并将测试与报告框架独立 2 构成 静态类图 2 1
  • ajax发生错误,Ajax犯的错误处理方法

    1 ajax 发送请求时状态判断 if else 语句问题 var xhr new XMLHttpRequest xhr open get strUrl xhr onreadystatechange function if xhr read
  • 时序分析/约束(一):相关概念

    由 zme 于 星期四 02 20 2014 15 03 发表 http xilinx eetrend com blog 6631 时序分析时FPGA设计中永恒的话题 也是FPGA开发人员设计进阶的必由之路 慢慢来 先介绍时序分析中的一些基
  • uniapp 登入功能 vuex使用 通俗易懂

    目录 功能介绍 运行效果 未登入状态 登入页面 进行登入完后 代码演示 功能结构 请求封装 详细文章 部分api ts 关于 用户登入接口 store index ts store user ts main js App vue type
  • 2018-12-12 Pycharm git clone 密码错误

    在新建工程的时候选择了 clone from git 不小心把密码输错了 再次clone 不再提示输入密码 只提示错误 微信截图 20181212003707 png 进入 windows 凭据 点击下三角 删除即可 微信截图 201812
  • nodejs express multer 中文名乱码

    找了半天找不到 科学上网出去秒解决 哎 无力吐槽 不bb那么多 直接上代码 上传时前端正常 但是后端接收文件时乱码 const uploads multer 文件上传的位置 dest path join dirname public upl
  • Java中字符串与byte数组之间的转换方法

    在Java编程中 我们常常需要对字符串和byte数组进行转换 字符串一般是用来表示文本信息 而byte数组则是用来表示二进制数据 如图片 音频等 本文将详细介绍Java中字符串和byte数组之间的转换方法 包括将字符串转换为byte数组和将
  • Failed to find Build Tools revision 27.0.3

    因为电脑系统的问题 导致运行一下Android Studio整个8G的电脑内存都给吃没了 索性又重装了下电脑 重新安装了下Android Studio 错误信息 11 44 Gradle sync failed Failed to find
  • @Value值注入及配置文件组件扫描方式

    spring配置文件对应的是父容器 springMVC配置文件产生的是子容器 前者一般配置数据源 事务 注解等 当然还可以进一步将一些配置细化到其他xml中 后者一般配置控制层相关的 如静态资源 视图解析器等 系统启动的时候 先初始化父容器
  • 神经网络的计算量(FLOPs)、参数量(Params)、推理时间(FPS)的定义及实现方法

    目录 1 定义 2 实现方法 2 1 计算参数量 2 2 计算参数量和FLOPs 2 3 计算推理时间 FPS 3 数据大小对参数量和FLOPs的影响 4 参数量和FLOPs对于硬件要求 参考 1 定义 在评价深度学习模型的大小 计算量 推
  • CentOS7搭建Redis Sentinel

    目录 什么是Redis Sentinel 搭建Redis Sentinel 启动与验证 什么是Redis Sentinel 官方文档 Redis 的 Sentinel 文档 搭建Redis Sentinel 首先需要在CentOS环境下准备
  • GCC Coverage代码分析-GCC如何编译生成gcov/gcov-dump程序及其bug分析

    本博客 http blog csdn net livelylittlefish 贴出作者 阿波 相关研究 学习内容所做的笔记 欢迎广大朋友指正 Content 0 序 1 编译gcov gcov dump 2 额外的话 3 gcov dum
  • vue项目打包部署-手把手教程

    vue项目打包部署 1 购买服务器 可选阿里云 腾讯云 华为云 等等 购买时选择镜像 我们这里以CentOS为例 2 配置服务器 2 1 安装FinalShell 需要本地使用一些软件来操作服务器 例如 FinalShell Xshell
  • npm遇到的各种坑(errno)及解决办法

    建议从底下向上来看 9 8 npm警告可选跳过可选依赖 fsevents 1 2 7 node modules fsevents npm WARN notsup跳过可选依赖项 Unsupported platform fo fsevents
  • JAVA Swing

    Swing简介 Swing 是 Java 为图形界面应用开发提供的一组工具包 是 Java 基础类的一部分 Swing 包含了构建图形界面 GUI 的各种组件 如 窗口 标签 按钮 文本框等 Swing 提供了许多比 AWT 更好的屏幕显示
  • 制造业MES&R语言数据挖掘之设备故障序列关联分析

    本案例针对于铅酸电池行业的设备故障进行R语言数据挖掘 找到故障之间的时间先后规律 比如A故障发生后 多大概率会发生B故障 目录 一 数据准备 二 选择算法 三 编程建模 四 分析 五 评价 步骤 1 数据准备 2 选择算法 3 编程建模 4
  • 什么是梯形凸块布线,什么是10度走线,什么是zig-zag走线,什么是任意角度走线? 为什么要走梯形凸块布线,为什么要走10度走线,为什么要走zig-zag走线,为什么要走任意角度走线?

    来自群友的疑难杂症 加杨老师V信 PCB206 可入群 请教下各位老师 你们有见过以下面这样的走线方式吗 科普下有什么作用 杨老师简单阐述下 虽然绝大部分人暂时还没用到 说不定将来也不会用到 但是对于了解这些走线方式还是有帮助的 梯形凸块布
  • 不同图像的噪声,选用什么滤波器去噪,图像处理的噪声和处理方法

    不同图像的噪声 选用什么滤波器去噪 图像处理的噪声和处理方法 提示 据说是科大讯飞的算法面试题 知道哪些噪声 分别用什么滤波器处理 文章目录 不同图像的噪声 选用什么滤波器去噪 图像处理的噪声和处理方法 TOC 文章目录 图像噪声 椒盐噪声