目录
1 概念讲解及用处
均值滤波是一种基本的图像平滑滤波方法,用于减少图像中的噪声和细节。它通过将每个像素周围邻域内的像素取平均值来实现。
均值滤波的主要用途包括:
去除高斯噪声、椒盐噪声等图像中的噪声。
平滑图像,减少图像中的细节,达到降噪的效果。
2 函数详解
在OpenCV中,可以使用blur函数进行均值滤波。
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT)
src:输入图像。
dst:输出图像。
ksize:滤波核大小,即滤波窗口的尺寸。
anchor:锚点位置,指示滤波核的中心,默认为(-1, -1)表示位于核的中心。
borderType:边界模式,控制如何处理图像边缘。
3 数学原理及数学推导公式
均值滤波的数学原理很简单,即将滤波窗口内的所有像素值进行求平均操作。假设输入图像为I,滤波窗口尺寸为ksize,输出图像为O,则均值滤波运算可以表示为:
计算步骤:任意一点的像素值,都是周围N*N个像素值的均值
例:(197+25+106+156+159+……+41+75)/25。
优点:效率高,思路简单
缺点:计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征
4 用C++编写代码进行实现
下面是一个使用OpenCV进行均值滤波的示例代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像
Mat image = imread("image.jpg", IMREAD_COLOR);
if (image.empty())
{
cout << "Failed to load image." << endl;
return -1;
}
// 进行均值滤波
Mat blurredImage;
Size kernelSize(5, 5); // 滤波核大小
blur(image, blurredImage, kernelSize);
// 显示结果
imshow("Original Image", image);
imshow("Blurred Image", blurredImage);
waitKey(0);
return 0;
}
在这个示例中,首先使用imread函数读取彩色图像。然后,定义了一个5x5的滤波核,用于进行均值滤波。接下来,使用blur函数对图像进行均值滤波操作。最后,使用imshow函数显示原始图像和滤波后的图像。