中值滤波器
函数: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 );


邻域滤波(卷积)
函数:
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) ;
相当于中间像素值得五倍减去上下左右四个像素的值,然后结果赋值为中间那个像素。
OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT );

常用的零均值离散高斯滤波器函数:


int dx, int dy, int ksize=3,
double scale=1, double delta=0,
int borderType=BORDER_DEFAULT );
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 ;
}