基于积分图的均值滤波算法
来源:互联网 发布:安顺大数据徐杰 编辑:程序博客网 时间:2024/06/06 16:27
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围N个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。(百度百科)
我们使用一个模板对图像进行卷积的时候,其效率是非常低的。均值滤波算法也是如此。
在处理不同的卷积的时候,根据模板和算法的特点,总会采取一些加速算法。下面我们就分析一下“基于积分图的均值滤波算法”。
先讲一下积分图的概念:
对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和。(来自百度百科)
图解:
像素位置为(8,8)的像素值的计算过程为:红色区域像素值的和 +绿色区域像素值的和 + (9,9)像素本身大小
在进行积分图运算后,值为288 + 28 + 8 = 324.
假设模板大小为(9*9),卷积中心为(4,4),那么点像素位置为(4,4)的均值滤波的值 = 324/ (9*9) = 4。
这个例子滤波后的值恰好没有变化!
算法过程:
1)计算图像的积分图(具体编程的时候,一定是计算积分图的同时,把均值计算出来,这样速度会更快)
2)根据积分图的特点计算均值,会省去大量的重复计算
3)尽量规避最后除以模板大小的操作以int类型的乘法和位运算来代替(openCV里的做法)
如:本例最后求均值必须除以9*9=81;324/ (9*9) = 342/81 = 4.0;
1 / (9*9) * pow(2,12)=1/81*4096 = 50.567; 50.567 约等于50
约等于:(324 * 50 + 1 << 11) >>12 = (324 * 50 + 2048) / 4096 = 4.455 取整数为4
结论,算法运行的效率是高于openCV自带的函数的,cvSmooth(src, dst, CV_BLUR, param1, param2);
- 基于积分图的均值滤波算法
- 基于积分图的维纳滤波算法
- 图像处理之积分图应用四(基于局部均值的图像二值化算法)
- 基于opencv和c++的均值滤波
- 一种网格去噪算法(基于平均面法向的均值滤波)
- 均值滤波快速算法
- 非局部均值滤波算法
- 非局部均值滤波算法的python实现
- 滤波算法(均值、中值、最大均值、最大中值、几何均值)
- 基于MATLAB的滤波算法
- 基于matlab的图像处理——高斯噪声&均值滤波,椒盐噪声&中值滤波
- 4基于opencv的线性领域滤波(方框_均值_高斯滤波)
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 图像的均值滤波、中值滤波_JAVA
- 均值滤波、中值滤波的matlab实现
- Mysql 通过frm&ibd 恢复数据
- ansible 内嵌变量
- MyVector
- vi与vim总结
- 《SSO系列二》自己动手写一个SSO
- 基于积分图的均值滤波算法
- sql中模糊查询的字段中包含百分号%的语句
- ESP8266 基础篇:WiFi scan 方法以及测试
- STM32L152 RTC 使用
- 什么是并行、并发,两者区别
- 微信公众号开发(一)微信分享接入
- 查询并禁止apache中异常访问量的用户
- Windows下Git 安装、配置及使用
- 编程规范