商洛市住房和城乡建设局网站,网站链接做投票,wordpress google ad,九江网站设计公司均值滤波原理
均值滤波步骤
Step1:求和。
Step2:计算平均值。 所谓均值滤波#xff0c;就是求平均值的意思。我们假设在一个3*3的范围内有一个图像#xff0c;其中这个图像每一个像素可能含有噪声#xff0c;也可能不含噪声#xff0c;我们是不知道的#xff0c;因此通…均值滤波原理
均值滤波步骤
Step1:求和。
Step2:计算平均值。 所谓均值滤波就是求平均值的意思。我们假设在一个3*3的范围内有一个图像其中这个图像每一个像素可能含有噪声也可能不含噪声我们是不知道的因此通过均值滤波的方式对图像中所有像素进行求和并除以像素个数得到的结果就是滤波后的结果将3*3区域的中心位置更改为滤波后的平均值这样的过程就是均值滤波。 均值滤波和图像的卷积操作相类似它们都是在原图像中将每一个像素分别覆盖滤波模板也可称为滤波器覆盖原图像后求取平均值放入中心区域作为滤波结果然后移动滤波器使滤波器能够覆盖图像的每一个位置。对于上图3*3的矩阵来说其中每一个位置都乘了1也就是说它进行卷积的模板是一个3*3的矩阵此矩阵中的值都为1之后又除以了和因此它的卷积模板滤波器就是一个1/9乘全为1的矩阵3*3。
均值滤波函数
blur()
void cv::blur(InuputArray src,OutputArray dst,Size ksize,Point anchor Point(-1,-1),int borderType BORDER_DEFAULT)
·src:待均值滤波的图像图像数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F和CV_64F这五种数据类型之一。均值滤波输出的结果的数据类型与输入图像的数据类型保持一致。
·dst:均值滤波后的图像与输入图像具有相同的尺寸和数据类型。
·ksize:卷积核尺寸滤波器尺寸常用的是奇数正方形。因为均值滤波中滤波器中的每一位参数值是恒定的因此这里面我们只需给出其尺寸即可。
·anchor:内核的基准点锚点其默认值为-1-1代表内核基准点位于kernel的中心位置。·borderType:像素外推法选择标志。
方框滤波函数
boxFilter()
void cv::boxFilter(InputArray src,OutputArray dst,int ddepth,Size ksize,Point anchor Point(-1,-1),bool normalize true,int borderType BORDER_DEFAULT) 方框滤波函数与均值滤波其实是等价的只不过方框滤波运行滤波器不进行归一化但是在均值滤波中是强制进行归一化的。 由于方框滤波是一个求和的参数可能会出现255255255....很多个255相加最终超出255范围的情况因此第三个参数运行用户设定输出图像的数据类型也就是输出图像的数据类型可以与输入图像不同但是尺寸和通道数是一致的。
·src:输入图像。
·dst:输出图像与输入图像具有相同的尺寸和通道数。
·ddepth:输出图像的数据类型深度根据输入图像的数据类型不同拥有不同的取值范围。
·ksize:卷积核尺寸。
·anchor:内核的基准点锚点其默认值为-1-1代表内核基准点位于kernel的中心位置。
·normalize:是否将卷积核进行归一化的标志默认参数为true表示进行归一化在矩阵前面乘所有数值之和。
·borderType:像素外推法选择标志。
高斯滤波原理 高斯滤波也就是滤波器是一个高斯分布的形式如上图所示滤波器中中间的像素值较大而四周像素值较小的情况是一个中心对称的滤波器。若以这样的滤波器作为卷积核与原图像进行卷积操作的时候得到的就是一个高斯滤波之后的结果 。
高斯滤波函数
GaussianBlur()
void cv::GaussianBlur(InputArray src,OutputArray dst,Size xsize,double sigmaX,double sigmaY 0,int borderType BORDER_DEFAULT)
·src:待高斯滤波图像数据类型必须为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
·dst:输出图像与输入图像src具有相同的尺寸通道数和数据类型。
·ksize:高斯滤波器的尺寸滤波器可以不为正方形但是必须是正奇数。如果尺寸为0则由标准偏差计算尺寸。高斯滤波器不需要人为的输入因为高斯滤波器的高斯函数分布形式是固定的只需给出滤波器尺寸即可。
·sigmaX:X方向的高斯滤波器标准偏差。
·sigmaY:Y方向的高斯滤波器标准偏差。如果输入量为0则将其设置为等于sigmaX如果两个轴的标准差均为0则根据输入的高斯滤波器尺寸计算标准差。
ksize ,sigmaX,sigmaY不允许同时为0若某个参数为0可以根据对应关系计算出参数。
·borderType:像素外推法选择标志。
示例
#include opencv2/opencv.hpp
#include iostreamusing namespace cv; //opencv的命名空间
using namespace std;//主函数
int main()
{Mat lenaGray imread(E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenaGray.png);Mat equalLena_Salt imread(E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_S.png);Mat equalLena_Gauss imread(E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_G.png);if (lenaGray.empty() || equalLena_Salt.empty() || equalLena_Gauss.empty()){cout 请确认图像名称是否正确 endl;return -1;}Mat result_3, result_9; //存放不含噪声滤波结果后面的数字代表滤波器尺寸Mat result_3gauss, result_9gauss; //存放含有高斯噪声滤波结果后面数字代表滤波器尺寸Mat result_3salt, result_9salt; //存放含有椒盐噪声滤波结果后面的数字代表滤波器尺寸//调用均值滤波函数blur()进行滤波blur(lenaGray, result_3, Size(3, 3));blur(lenaGray, result_9, Size(9, 9));blur(equalLena_Salt, result_3salt, Size(3, 3));blur(equalLena_Salt, result_9salt, Size(9, 9));blur(equalLena_Gauss, result_3gauss, Size(3, 3));blur(equalLena_Gauss, result_9gauss, Size(9, 9));//显示不含噪声图像imshow(lenaGray, lenaGray);imshow(result_3, result_3);imshow(result_9, result_9);//显示不含噪声图像imshow(equalLena_Salt, equalLena_Salt);imshow(result_3salt, result_3salt);imshow(result_9salt, result_9salt);//显示不含噪声图像imshow(equalLena_Gauss, equalLena_Gauss);imshow(result_3gauss, result_3gauss);imshow(result_9gauss, result_9gauss);cout 下面是方框滤波 endl;waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出Mat resultNorm, result;//方框滤波boxFilter()和sqrBoxFilter()boxFilter(lenaGray, resultNorm, -1, Size(3, 3), Point(-1, -1), true); //进行归一化boxFilter(lenaGray, result, -1, Size(3, 3), Point(-1, -1), false); //进行归一化//显示处理结果imshow(resultNorm, resultNorm);imshow(result, result);cout 下面是高斯滤波 endl;waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出Mat result_5_G, result_9_G;//存放不含噪声滤结果后面数字代表滤波器尺寸Mat result_5Gauss_G, result_9Gauss_G;//存放含高斯噪声滤结果后面数字代表滤波器尺寸Mat result_5Salt_G, result_9Salt_G;//存放含椒盐噪声滤结果后面数字代表滤波器尺寸GaussianBlur(lenaGray, result_5_G, Size(5, 5), 10, 20);GaussianBlur(lenaGray, result_5_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Gauss, result_5Gauss_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Gauss, result_9Gauss_G, Size(9, 9), 10, 20);GaussianBlur(equalLena_Salt, result_5Salt_G, Size(5, 5), 10, 20);GaussianBlur(equalLena_Salt, result_9Salt_G, Size(9, 9), 10, 20);//显示不含噪声图像imshow(lenaGray, lenaGray);imshow(result_5_G, result_5_G);imshow(result_9_G, result_9_G);//显示不含噪声图像imshow(equalLena_Salt, equalLena_Salt);imshow(result_5Gauss_G, result_5Gauss_G);imshow(result_9Gauss_G, result_9Gauss_G);//显示不含噪声图像imshow(equalLena_Gauss, equalLena_Gauss);imshow(result_5Salt_G, result_5Salt_G);imshow(result_9Salt_G, result_9Salt_G);waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出return 0;}
滤波完成后:
在均值滤波中:对于椒盐噪声和高斯噪声的滤波结果尺寸越大的滤波器对于图像来说滤波后的结果也越模糊噪声产生的影响变小。如果想最大程度的去除噪声采用均值滤波的形式的话那么需要一个很大的尺寸同时对图像的整体质量有较大的影响。
对椒盐噪声由于我们的均值滤波是每一个像素值都贡献了相同作用所以对于椒盐噪声来说仍然可以看出图像中含有椒盐噪声只不过椒盐噪声的颗粒没有那么亮没有那么明显但是椒盐噪声的颗粒变得更粗了。
在方框滤波中方框滤波中如果进行归一化操作所得到的结果与均值滤波的结果一致若不进行归一化操作那么有可能出现图像中数值远远大于255但是在opencv中会强制为255所以导致整个图像中较大的区域都为白色,而有纹理的恰恰是原图像中较暗的区域。
在高斯滤波中:顾名思义对高斯噪声的滤波更为理想。结果也会变得模糊但是处理结果也较好。若图像中含有椒盐噪声采用线性滤波的方式得到的结果不太理想。