个人做网站租云服务器,上海知名网站建设公司,怎么弄自己的网站卖东西,小网站怎么搜关键词文章目录 图像掩膜操作模糊原理均值滤波高斯滤波中值滤波双边滤波算子代码 图像掩膜操作
图像掩膜操作
模糊原理 Smooth/Blur是图像处理中最简单和常用的操作之一 使用操作的原因之一就是为了给图像预处理时候减低噪声 图像噪声是指存在于图像数据中的不必要的或多余的干扰信… 文章目录 图像掩膜操作模糊原理均值滤波高斯滤波中值滤波双边滤波算子代码 图像掩膜操作
图像掩膜操作
模糊原理 Smooth/Blur是图像处理中最简单和常用的操作之一 使用操作的原因之一就是为了给图像预处理时候减低噪声 图像噪声是指存在于图像数据中的不必要的或多余的干扰信息 Smooth/Blur操作原理是数学的卷积运算根据不同卷积运算公式划分了多种图像滤波方式 图像滤波指的是在尽量保留图像特征的条件下对目标图像得噪声进行抑制
均值滤波
均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重 6x6像素表中3x3的卷积算子从图一所示的红色像素开始卷积依次从左至右从上至下。取黄色像素值之和的平均值赋给红色像素则红色像素为卷积之后的新像素。由此每次移动一个像素。显然计算平均值时取值范围越大模糊效果越强烈。 高斯滤波
高斯模糊部分克服了该缺陷但是无法完全避免因为没有考虑像素值的不同 一阶高斯算子 二阶高斯算子 这9个点的权重总和等于0.4787147如果只计算这9个点的加权平均还必须让它们的权重之和等于1因此上面9个值还要分别除以0.4787147得到最终的权重矩阵. 将这9个值加起来就是中心点的高斯模糊的值。 对所有点重复这个过程就得到了高斯模糊后的图像。如果原图是彩色图片可以对RGB三个通道分别做高斯模糊。 中值滤波 去除椒盐噪声 双边滤波
高斯双边模糊 – 是边缘保留的滤波方法避免了边缘信息丢失保留了图像轮廓不变 双边滤波就是经典的常用的能够保留图像边缘信息的滤波算法之一。双边滤波是一种综合考虑滤波器内图像空域信息和滤波器内图像像素灰度值相似性的滤波算法可以实现在保留区域信息的基础上实现对噪声的去除、对局部边缘的平滑。双边滤波对高频率的波动信号起到平滑的作用同时保留大幅值的信号波动进而实现对保留图像中边缘信息的作用。双边滤波器是两个滤波器的结合分别考虑空域信息和值域信息使得滤波器对边缘附近的像素进行滤波时距离边缘较远的像素值不会对边缘上的像素值影响太多进而保留了边缘的清晰性。 空域核在窗口内每个位置都有权重即每个位置的像素都考虑。 i,j 为模板窗口的其他系数的坐标 k,l为模板窗口的中心坐标点 σ为高斯函数的标准差。 w空间域核由像素位置欧式距离决定的模板权值 值域核一定像素差范围进行局部模糊像素值高的在高的部分模糊低的在低的那部分模糊保留了边缘区分 i ,j为模板窗口的其他系数的坐标 f(i,j)表示图像在点i,j处的像素值 k,l为模板窗口的中心坐标点,对应的像素值为f(k,l) σ为高斯函数的标准差。 w值域核是由像素值的差值决定的模板权值 双边滤波器的模板权值 双边滤波器的数据公式 空域权重衡量的是 p,q两点之间的距离距离越远权重越低 值域权重衡量的是 p,q两点之间的像素值相似程度,越相似权重越大 算子 blur 算子 void blur( InputArray src, OutputArray dst,Size ksize, Point anchor Point(-1,-1),int borderType BORDER_DEFAULT );
/*******************************************************************
* src 输入图像
* dst 输出图像
* ksize 内核大小
* anchor: 锚点
* 默认Point(-1,-1):锚点在核中心
* borderType: 外部像素边界模式(一般不管)
*********************************************************************/高斯算子 void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY 0,int borderType BORDER_DEFAULT );
/*******************************************************************
* src 输入图像
* dst 输出图像
* ksize 内核大小
* x,y必须是整数并且为奇数
* sigmaX: X方向滤波系数
* sigmaY: Y方向滤波系数
* borderType: 外部像素边界模式(一般不管)
*********************************************************************/中值滤波 void medianBlur( InputArray src, OutputArray dst, int ksize );
/*******************************************************************
* src 输入图像
* dst 输出图像
* ksize 内核大小
* 大小必须是大于1而且必须是奇数
*********************************************************************/双边滤波 void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType BORDER_DEFAULT );
/*******************************************************************
* src 输入图像
* dst 输出图像
* d 滤波过程中每个像素邻域的直径
* sigmaColor: 颜色空间滤波器的标准差值
* 参数越大表明该像素领域内有越多的颜色被混合到一起
* sigmaSpace: 空间间坐标中滤波器的标准差值
* borderType: 外部像素边界模式(一般不管)
*********************************************************************/代码
#include iostream
#include string
#include map
#include opencv2/opencv.hpp
using namespace cv;
using namespace std;
class Blur
{
public:Blur() :img(imread(test.jpg)) {result[原图] img;}void BlurByblur() {blur(img, result[blur], Size(9, 9));}void BlurByGaussianBlur() {GaussianBlur(img, result[GaussianBlur], Size(9, 9), 9, 9);}void BlurBymedianBlur() {medianBlur(img, result[medianBlur], 9);}void BlurBybilateralFilter() {bilateralFilter(img, result[bilateralFilter], 9, 9, 9);}void Show(){for (auto v : result) {imshow(v.first, v.second);}waitKey(0);}
private:Mat img;mapstring, Mat result;
};
int main()
{Blur* p new Blur;p-BlurByblur();p-BlurByGaussianBlur();p-BlurBymedianBlur();p-BlurBybilateralFilter();p-Show();return 0;
}