OpenCV滤波器
2014-02-22 12:36
253 查看
中值滤波器
函数:void medianBlur( InputArray src, OutputArray dst, int ksize );
参数:
src:输入图像
dst:输出结果
ksize:尺寸
说明:中值滤波一般不会用的最大值与最小值,在处理salt点图像时可以体现其效果
方框滤波器
函数:blur( InputArray src, OutputArray dst,
Size ksize, Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT );
参数:
src :输入图像
dst:输出结果
ksize:核矩阵尺寸
使用的是均值方法,像素的值取自周围像素值得平均值,blur是boxFilter()的标准化(blur内部以标准的形式调用boxFilter())
函数:void boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor=Point(-1,-1),
bool normalize=true,
int borderType=BORDER_DEFAULT );
这里 blur 和 boxFilter 的区别是,blur是标准化后的 boxFilter,即boxFilter的核函数:
其中,
邻域滤波(卷积)
函数:
void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT );
使用方法:
相当于中间像素值得五倍减去上下左右四个像素的值,然后结果赋值为中间那个像素。
高斯滤波器
函数:
void GaussianBlur( InputArray src,
OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT );
参数:
ksize:核矩阵的尺寸
sigmax,sigmay:高斯函数中的参数
说明:
高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。它对去除服从正态分布的噪声很有效。
常用的零均值离散高斯滤波器函数:
2D图像中表示为:
方向滤波器:
函数:void Sobel( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, int ksize=3,
double scale=1, double delta=0,
int borderType=BORDER_DEFAULT );
参数:
ddepth:数据类型
dx , dy:X ,Y 轴方向
delta:偏移量
说明:在X,Y方向的滤波器
代码:
拉普拉斯高通滤波器:
参考:/article/1357510.html
http://blog.csdn.net/thefutureisour/article/details/7574900(sobel 和 LapLace高通滤波器)
函数:void medianBlur( InputArray src, OutputArray dst, int ksize );
参数:
src:输入图像
dst:输出结果
ksize:尺寸
说明:中值滤波一般不会用的最大值与最小值,在处理salt点图像时可以体现其效果
方框滤波器
函数:blur( InputArray src, OutputArray dst,
Size ksize, Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT );
参数:
src :输入图像
dst:输出结果
ksize:核矩阵尺寸
使用的是均值方法,像素的值取自周围像素值得平均值,blur是boxFilter()的标准化(blur内部以标准的形式调用boxFilter())
函数:void boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor=Point(-1,-1),
bool normalize=true,
int borderType=BORDER_DEFAULT );
这里 blur 和 boxFilter 的区别是,blur是标准化后的 boxFilter,即boxFilter的核函数:
其中,
邻域滤波(卷积)
函数:
void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT );
使用方法:
cv::Mat filter_2D ; cv::Mat ker(3 , 3 , CV_32F , cv::Scalar(0)) ; ker.at<float>(1 , 1) = 5.0f ; ker.at<float>(0,1) = -1.0; ker.at<float>(1,0) = -1.0; ker.at<float>(1,2) = -1.0; ker.at<float>(2,1) = -1.0; cv::filter2D(image , filter_2D ,image.depth() , ker) ; cv::imshow("filter_2D" , filter_2D) ;
相当于中间像素值得五倍减去上下左右四个像素的值,然后结果赋值为中间那个像素。
高斯滤波器
函数:
void GaussianBlur( InputArray src,
OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT );
参数:
ksize:核矩阵的尺寸
sigmax,sigmay:高斯函数中的参数
说明:
高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。它对去除服从正态分布的噪声很有效。
常用的零均值离散高斯滤波器函数:
2D图像中表示为:
方向滤波器:
函数:void Sobel( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, int ksize=3,
double scale=1, double delta=0,
int borderType=BORDER_DEFAULT );
参数:
ddepth:数据类型
dx , dy:X ,Y 轴方向
delta:偏移量
说明:在X,Y方向的滤波器
代码:
cv::Mat sobelX ; cv::Sobel(image , sobelX , CV_8U , 1 , 0 , 3 , 0.4 , 128) ; cv::imshow("sobelX" , sobelX) ;//滤去水平的,垂直的痕迹很清晰 cv::Mat sobelY ; cv::Sobel(image , sobelY , CV_8U , 0 , 1 , 3 , 0.4 , 128) ; cv::imshow("sobelY" , sobelY) ;//滤去垂直的,水平的痕迹很清晰 cv::Mat sobel ; cv::Sobel(image , sobelX , CV_16S , 1 , 0) ; cv::Sobel(image , sobelY , CV_16S , 0 , 1) ; sobel = abs(sobelX) + abs(sobelY) ; cv::imshow("sobel" , sobel) ; double sobmin , sobmax ; cv::minMaxLoc(sobel , &sobmin , &sobmax) ; cv::Mat sobelImage ; sobel.convertTo(sobelImage , CV_8U , -255. / sobmax , 255) ; cv::imshow("sobelImage" , sobelImage) ; cv::Mat sobelThresholded ; cv::threshold(sobelImage , sobelThresholded ,200 , 255 , cv::THRESH_BINARY) ; cv::imshow("sobelThresholded" , sobelThresholded) ; cv::Sobel(image , sobelX , CV_32F , 1 , 0) ; cv::Sobel(image , sobelY , CV_32F , 0 , 1) ; cv::Mat norm ,dir ; cv::cartToPolar(sobelX , sobelY , norm , dir) ;
拉普拉斯高通滤波器:
cv::Mat computeLaplacian(const cv::Mat & image) { cv::Laplacian(image , laplace , CV_32F , aperture) ; img = image.clone() ; return laplace ; } cv::Mat getLaplacianImage(double scale = -1.0) { if(scale < 0) { double lapmin , lapmax ; cv::minMaxLoc(laplace , &lapmin , &lapmax) ; scale = 127 / std::max(-lapmin , lapmax ) ; } cv::Mat laplaceImage ; laplace.convertTo(laplaceImage , CV_8U , scale , 128) ; return laplaceImage ; }
参考:/article/1357510.html
http://blog.csdn.net/thefutureisour/article/details/7574900(sobel 和 LapLace高通滤波器)
相关文章推荐
- Linux下安装Firefox
- Linux 环境下用Tomcat 发布项目
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
- Linux可插拔认证模块的基本概念与架构
- 监控 Linux 性能的 18 个命令行工具
- u-boot2013.10引导linux3.10.30记录
- linux service命令
- FireEye:GreedyWonk行动针对经济和外交政策网站
- linux CPU 画正弦曲线 编程之美
- Linux的10个核心面试问题
- Python Tkinter实现的linux命令帮助手册
- 红旗Linux走到尽头 国产软件为何难以长大?
- linux命令:svn
- OpenCV中Latent SVM模型文件XML
- MyEclipse 启动Tomcat启动信息显示在控制台
- 总结之:grep、egrep、fgrep的用法与特性详解
- Linux环境下用Weblogic发布项目【三】 -- 启动、登陆、停止WebLogic
- Linux Backup use of dd
- 28-Linux-服务-web相关
- Hadoop架构