open cv均值 中值 高斯 双边高斯 滤波及模糊
/*
模糊与消噪
模糊原理(线性滤波)
●Smooth/Blur 是图像处理中最简单和常用的操作之一
●使用该操作的原因之一-就为了给图像预处理时候减低噪声
●使用Smooth/Blur操作其背后是数学的卷积计算
●通常这些卷积算子(kernel掩膜)计算都是线性操作 ,所以又叫线性滤波
降低噪点 OCR识别 特征提取 通过smooth让二值化对象提取更准确
归一化盒子滤波(均值滤波)
高斯滤波(能最大限度保留像素的质量与大小)
相关API
●均值模糊
x坐标 y坐标 中心像素的位置
- blur(Mat src,IMat dst, Size(xradius, yradius), Point(-1,-1);
●高斯模糊(各像素权重不一样,按高斯分布)(类似于图像混合)
窗口大小 正态分布的情况
- GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);
其中Size ( x,y) ,x, y必须是正数而且是奇数
filter2D也可以做模糊
https://blog.csdn.net/Vici__/article/details/102476784?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9
中值滤波
●统计排序滤波器
●中值对椒盐噪声(白点和黑点)有 很好的抑制作用 噪声所在的位置叫做噪点
双边滤波(效果好)
●均值模糊无法克服边缘像素信息丢失缺陷。原因是均
值滤波是基于平均权重
●高斯模糊部分克服 了该缺陷,但是无法完全避免,因
为没有考虑像素值的不同
●高斯双边模糊- 是边缘保留的滤波方法,避免了边缘
信息丢失,保留了图像轮廓不变
空域核 值域和 保留值域
相关API
●中值模糊medianBlur ( Mat src, Mat dest, ksize )
●双边模糊bilateralFilter(src, dest, d=15, 150, 3);
15 计算的半径.半径之内的像数都会被纳入计算, 如果提供1则根据sgma space参数取值
150 sigma color决定多少差值之内的像素会被计算
3 sigma space如果d的值大于0刚声明无效。否则根据它来计算d值
中值模糊的ksize(卷积核)大小必须是大于1而且必须是奇数(偶数不好找中心像素)
*/
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include
#include <windows.h>
using namespace cv;
using namespace std;
int main()
{
Mat src, dst, gsblur, zaoblur, shuangblur,ts1,ts2,ts3;
src = imread(“D:/实验台/机器视觉/测试图片/机器人正面.jpg”);//以灰度图形式读取
zaoblur = imread(“D:/实验台/机器视觉/测试图片/机器人正面.jpg”);
if (!src.data)
{
cout << “加载失败” << endl;
return -1;
}
char input[] = “原图”;
char output[] = “模糊”;
imshow(input,src);
blur(src, dst, Size(11, 11), Point(-1, -1));
//均值模糊,参数分为为待处理图像,处理后图像
//Size卷积模板x方向和y方向窗口的大小 核的大小
//只能为正的奇数,值越大,对应方向模糊程度越明显
//模板中间像素位置一般固定为Point(-1,-1)
imshow("blur均值模糊", dst);
GaussianBlur(src, gsblur, Size(9, 9), 12, 12);
//高斯模糊,参数分别为待处理图像,处理后图像
//卷积模板x方向和y方向窗口的大小
//(只能为正的奇数,值越大,对应方向模糊程度越明显)
//高斯公式的两个方向的sigma值(用来调节正态分布)
//9,9表示x和y方向的方差,如果y=0则y方向的方差与x相等
//12,12表示模糊的程度 差越大越模糊
imshow("Gaussianblur高斯模糊",gsblur);
medianBlur(src,src,3);//中值滤波
//src为待处理图像,dest为处理后图像,3(ksize)为卷积模板的大小
//其值必须大于1且为奇数 这个数越大图片越模糊
//namedWindow("中值滤波消噪", 0);
imshow("中值滤波消噪medianBlur", src);
/*配合掩膜有油画的感觉 可以增强简单的轮廓
Mat kernel = (Mat_<char>(3, 3) << 0,-1, 0,
-1, 5, -1,
0, -1, 0);
filter2D(zaoblur, zaoblur, zaoblur.depth(), kernel);
*/
//效果最好(高斯双边模糊+对比度提升)
bilateralFilter(src,dst,15,30,3);//高斯双边模糊
;//src为待处理图像,dst为处理后图像,
//15为计算的半径,半径之内的像素都会被纳入计算(大小不影响滤波程度)
//30为空间过滤器的sigma值 值越大 该像素领域中会有越宽广的颜色被混在一起(越大越模糊)
//3为高斯分布的sigma值(若d的值大于0则声明无效,否则根据用它计算d值代替30
imshow("双边高斯模糊", dst);
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
-1, 5, -1,
0, -1, 0);
//filter2D(dst, dst, dst.depth(), kernel);
//namedWindow("双边高斯模糊+对比度提升",0);
//imshow("双边高斯模糊+对比度提升",dst);
waitKey(0);
return 0;
}
/*
对比:高斯滤波会保留像素原有的特征值,若原像素值很大
,根据高斯分布按权相加,越靠近中心权重越大,
待处理像素位置有最大的权值,经过高斯滤波仍会是一个较大的像素值
。而在均值滤波中,一个较大像素值周围都是小的像素值,平均后会变小,
所以均值模糊获得的图像会更模糊一些。
均值模糊 无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重。
高斯模糊 部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同。
例如边界处像素值差别会比较大,对其进行高斯滤波时,边界处像素值受周围像素值的影响较大。(虽然周围像素值所占权重较小,但也会受影响)
高斯双边模糊 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。(设定一个阈值,若周围像素值与其模板中心像素值的差值大于某一个阈值,不参与计算)利用双边滤波,可以消除微小差异,保留图像轮廓,类似磨皮的效果。
*/