博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机视觉技术:C++和opencv插件 实现比较均值、中值、高斯滤波,对不同噪音(椒盐、高斯噪音)的抑制效果
阅读量:3965 次
发布时间:2019-05-24

本文共 1480 字,大约阅读时间需要 4 分钟。

问题描述:

比较均值滤波、中值滤波、高斯滤波在不同窗口尺寸下,对于不同噪音(椒盐噪音、高斯噪音)的抑制效果。

#include 
#include
using namespace cv;using namespace std;int main(int argc, char** argv){
Mat src1, src2, dst1, dst2, gblur1, gblur2, mblur1, mblur2; src1 = imread("E:\\picture\\1-1g.jpg"); src2 = imread("E:\\picture\\1-2j.jpg"); if (!src2.data || !src1.data) {
printf("could not load image...\n"); return -1; } imshow("高斯噪声原图", src1);//原图显示 imshow("椒盐噪声原图", src2);//原图显示 //均值滤波操作 //src:输入图像 //dst:输出图像 //Size里面都要奇数,正数。内核内数值分别表示宽,高。 //Point(-1,-1):表示锚点,一般取-1,表示锚点在核中心。 blur(src1, dst1, Size(5, 5), Point(-1, -1)); blur(src2, dst2, Size(5, 5), Point(-1, -1)); imshow("高斯噪声-均值滤波", dst1); imshow("椒盐噪声-均值滤波", dst2); //高斯滤波操作 //src:输入图像 //gblur:输出图像 //Size里面都要奇数,正数。内核内数值分别表示宽,高。 //x方向方差 //Y方向方差 GaussianBlur(src1, gblur1, Size(15, 15), 11, 11);//高斯滤波 GaussianBlur(src2, gblur2, Size(15, 15), 11, 11);//高斯滤波 imshow("高斯噪声-高斯滤波", gblur1); imshow("椒盐噪声-高斯滤波", gblur2); //中值滤波操作 //src:输入图像 //mblur::输出图像 //模板宽度,为奇数 medianBlur(src1, mblur1, 3); medianBlur(src2, mblur2, 3); imshow("高斯噪声-中值滤波", mblur1); imshow("椒盐噪声-中值滤波", mblur2); waitKey(0); return 0;}

通过得到的结果,可以发现均值滤波、中值滤波、高斯滤波,对于不同噪音(椒盐噪音、高斯噪音)的抑制效果是不同的:

1、均值滤波直观地理解就是用相邻元素灰度值的平均值代替该元素的灰度值,所以它不能很好地保护细节。

2、高斯滤波一般针对的是高斯噪声,能够很好的抑制图像输入时随机引入的噪声,将像素点跟邻域像素看作是一种高斯分布的关系,它的操作是将图像和一个高斯核进行卷积操作。

3、中值滤波将窗口函数里面的所有像素进行排序取得中位数来代表该窗口中心的像素值,对椒盐噪声和脉冲噪声的抑制效果特别好。

结论:从滤波的结果可以看出各种滤波算法对图像的作用非常不同,有些变化非常大,有些甚至跟原图一样。在实际应用时,应根据噪声的特点、期望的图像和边缘特征等来选择合适的滤波器,这样才能发挥图像滤波的最大优点。

转载地址:http://wlyki.baihongyu.com/

你可能感兴趣的文章
Java~今日学习各种锁策略(乐观锁 悲观锁 读写锁等等)、CAS机制和synchronize的原理及其优化机制(锁消除 偏向锁 自旋锁 膨胀锁 锁粗化)
查看>>
动态规划(二)三角矩阵(Triangle)、路径总数(Unique Paths)、路径总数2(Unique Paths II)、最小路径和(Minimum Path Sum)
查看>>
动态规划(三)背包问题、回文串分割(Palindrome Partitioning)、编辑距离(Edit Distance)、不同子序列(Distinct Subsequences)
查看>>
Java~在使用isAlive时, 将线程对象已构造参数的形式传递给Thread对象时进行start启动时, 使用this和Thread.currentThread的差异
查看>>
Java~使用synchronized修饰静态方法带来的问题 与 同步synchronized代码块不使用String作为锁对象的原因
查看>>
Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法
查看>>
Java~并发容器ConcurrentHashMap、ConcurrentLinkedQueue、阻塞队列BlockingQueue的实现原理与使用
查看>>
Java~并发流程控制的手段CountDownLatch、CyclicBarrier、Semaphore和Exchanger工具类的学习和使用
查看>>
Java~学习Executor框架, 了解ThreadPoolExecutor和ScheduledThreadPoolExecutor
查看>>
Java~在maven项目中添加junit依赖实现单元测试(@After、@Before 、@Ignore、@Test)的使用
查看>>
selenium~使用unittest测试框架,批量执行测试脚本,addTest、makeSuite、TestLoader、discover的使用
查看>>
Spring~Bean的作用域(单例模式、原型模式)等, Bean的自动装配方法, @AutoWired和@Resource的区别
查看>>
Spring~使用注解配置开发(@Component、@Repository、@Service、@Controller)和使用JavaConfig实现配置开发
查看>>
Spring~使用Mybatis-Spring包将MyBatis与Spring整合(俩种方式实现), 解决静态资源不导入问题
查看>>
MyBatis~配置解析, 属性(properties)、设置(settings)、类型别名(typeAliases)、环境配置(environments)、映射器(mappers)
查看>>
MyBatis~使用万能的ResultMap解决属性名和字段名不一致问题,实现分页查询 | 使用注解实现简单的CRUD(注意@Param的使用)
查看>>
MyBatis~关联的嵌套Select查询和关联的嵌套结果映射(association元素的使用)、集合的嵌套Select查询和集合的嵌套结果映射(collection的使用)
查看>>
MyBatis~动态 SQL之if,choose、when、otherwise,trim、where、set,foreach,sql的使用,实现带逻辑代码的sql语句
查看>>
SpringMVC~使用RestFul风格和SpringMVC俩种方式接收数据, 对比model、modelMap、modelAndView三种方式数据显示到前端
查看>>
SpringBoot~解决三个疑惑,为什么pom.xml文件中导入依赖不需要版本? 它是如何实现自动配置的? 它是如何启动运行的?
查看>>