【拜小白opencv】28-平滑处理1线性滤波之——盒式滤波(方框滤波)
来源:互联网 发布:自适应pid控制算法 编辑:程序博客网 时间:2024/04/29 10:47
常言道“温故而知新”,写此文章就是对自己目前学习内容的小小的总结与记录。
本文力求用最简洁的语言,详细的代码将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有些瑕疵,还望读者能够指教探讨,大家共同进步。
博主机器配置为:VS2013+opencv2.4.13+Win-64bit。
若本文能给读者带来一点点启示与帮助,我就很开心了。
===========================分割线========================
1-盒式滤波(方框滤波)
- 盒式滤波(方框滤波)是一种线性滤波技术,它的实现借鉴了积分图像的原理思想,在快速积分图像求解中,将计算某个矩阵像素间的和值运算,转化为求矩阵对应边角点的求和差值运算。
- 盒式滤波的实现最关键的步骤就是初始化数组S,数组S的每个值是存放像素邻域内的像素和值,在求解某矩形块中的像素和时,只需要索引对应区域的位置存放的和值就可以完成计算。
原理:
先给出内核,用内核各点的值与对应的图像像素值相乘:
可以才看出通过盒式滤波后,图片的边缘信息会丢失。
=======================分割线=========================
2-boxFilter()函数——盒式滤波
OpenCV将盒式滤波封装在boxFilter()函数中,作用是输入一副图像对其进行盒式滤波。感兴趣的同学可以看看其源代码。下面来看下boxFilter()函数的定义:
void boxFilter( InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT );
- 参数1:输入要处理的图像。
- 参数2:得到处理后的的输出图像。
- 参数3:图像的深度。-1代表使用原图深度,即src.depth()。
- 参数4:内核的大小。一般用Size(w,h)来表示内核大小,其中w为像素宽度,h为像素高度,正奇数或0。例:Size(3,3)就代表3×3的核大小。
- 参数5:表示锚点,即被平滑的那个点。如果这个点坐标是负值的话,就表示取核的中心点为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
- 参数6:默认值为true,一个标识符,表示内核是否被其区域归一化了,具体见下面介绍。
- 参数7:用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT,我们一般不用管它。
boxFilter()函数盒式滤波所用的核表示如下:
对参数6具体解释:
- 当normalize = true 时,盒式滤波就变成了均值滤波。也就是说,均值滤波是盒式滤波归一化(normalized)后的特殊情况。其中,归一化就是把要处理的量都缩放到一个范围内,比如(0,1),以便统一处理和直观量化。
- 当normalize = false时,为非归一化的盒式滤波,用于计算每个像素邻域内的积分特性,比如密集光流算法(dense optical flow algorithms)中用到的图像倒数的协方差矩阵(covariance matrices of image derivatives)。
=========================分割线====================
3-代码演示
/*盒式滤波(方框滤波)*/#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>#include <iostream> using namespace std;using namespace cv;int main(){//------------【1】读取源图像并检查图像是否读取成功------------ Mat srcImage = imread("D:\\OutPutResult\\ImageTest\\boat1.jpg");if (!srcImage.data){cout << "读取图片错误,请重新输入正确路径!\n";system("pause");return -1;}imshow("【源图像】", srcImage);//------------【2】对图像进行盒式滤波(方框滤波)处理------------ Mat dstImage;boxFilter(srcImage, dstImage, -1, Size(5, 5), Point(-1, -1), false); //false为非归一化情况imshow("【盒式滤波/方框滤波】", dstImage);waitKey(0);}
=======================分割线=====================
4-显示结果
非归一化情况如下
归一化情况如下
=======================分割线================
5-程序说明
可以发现,非归一化的时候,得到图像就是一片白色,对源图像毁坏太大,根本无法使用。
而归一化的时候,得到图像是一种模糊的效果,此时与均值滤波一样。
下一节我们将了解均值滤波的时候方法。
=====================END==============
阅读全文
0 0
- 【拜小白opencv】28-平滑处理1线性滤波之——盒式滤波(方框滤波)
- 【拜小白opencv】29-平滑处理2线性滤波之——均值滤波
- 【拜小白opencv】30-平滑处理3线性滤波之——高斯滤波
- 【拜小白opencv】34-图像平滑处理,6种滤波总结的综合示例【盒式滤波、均值滤波、高斯滤波、中值滤波、双边滤波、导向滤波】
- opencv开发笔记(十):线性滤波之方框滤波、均值滤波、高斯滤波
- 线性滤波之平滑滤波
- 【拜小白opencv】31-平滑处理4非线性滤波之——中值滤波
- 【拜小白opencv】32-平滑处理5非线性滤波之——双边滤波
- 【拜小白opencv】33-平滑处理6——引导滤波/导向滤波(Guided Filter)
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- OpenCV之八 线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- netstat 常用用法
- 文章标题
- bzoj 1060(树形dp)
- Fibonacci Again(HDU1021)
- NodeJS总结(二):事件响应一定是异步的吗?
- 【拜小白opencv】28-平滑处理1线性滤波之——盒式滤波(方框滤波)
- 我可是一个有图的留言板咳咳√
- 二维vector定义
- php微信公众号模板消息主动推送
- 输入一棵二叉树,求该树的深度
- Spring Cloud 服务消费者
- 系统思维:设计与思路
- java中next()和nextLine()的区别
- webgl学习笔记三-平移旋转缩放