目录
1 图像处理中的高斯函数
1.1一维高斯函数
1.2二维高斯函数
1.3 代码
1.4 结果
2 低通滤波之均值滤波器
2.1、空间滤波基础
2.1.1线性空间滤波原理
2.1.2 相关与卷积
2.2、平滑滤波之均值滤波器
2.2.1原理
2.2.2 c++ opencv代码
2.2.3 结果
3 中值滤波
3.1 c++ opencv代码
3.2 结果
1 图像处理中的高斯函数
1.1一维高斯函数
在统计学与概率论中,高斯函数是正态分布(高斯分布)的密度函数。一维高斯表达式如下:
其中,其中a、b与 c为实数常数,且a > 0.
a表示得到曲线的高度;
b(μ)是指曲线在x轴的中心;
c(σ)指width(与半峰全宽有关);
1.2二维高斯函数
二维高斯表达式:
1.3 代码
噪声程序.h文件:
#pragma once
#include<iostream>
#include<opencv2/opencv.hpp>
#include <random>
using namespace cv;
using namespace std;
void Salt(Mat image, int n);
噪声程序.cpp文件:
#include "Salt.h"
void Salt(Mat image, int n)
{
default_random_engine generater;
uniform_int_distribution<int>randomRow(0, image.rows - 1);
uniform_int_distribution<int>randomCol(0, image.cols - 1);
int i, j;
for (int k = 0; k < n; k++)
{
i = randomCol(generater);
j = randomRow(generater);
if (image.channels() == 1)
{
image.at<uchar>(j, i) = 255;
}
else if (image.channels() == 3)
{
image.at<Vec3b>(j, i)[0] = 255;
image.at<Vec3b>(j, i)[1] = 255;
image.at<Vec3b>(j, i)[2] = 255;
}
}
}
主函数:
#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"
using namespace cv;
using namespace std;
//定义高斯滤波函数
void myfilter(int filter_size, Mat& image_input, Mat& image_output);
int main()
{
Mat image, image_gray, image_output, image_output2; //定义输入图像,灰度图像,输出图像
image = imread("./img_all/2.png"); //读取图像;
if (image.empty())
{
cout << "读取错误" << endl;
return -1;
}
imshow("image", image);
cvtColor(image, image_gray, COLOR_BGR2GRAY);
Salt(image_gray, 1000); //添加噪声
imshow("image_gray", image_gray);
//opencv自带高斯滤波函数
int a = 7;
GaussianBlur(image_gray, image_output, Size(a, a), 2, 2);
imshow("image_output", image_output);
waitKey(0); //暂停,保持图像显示,等待按键结束
return 0;
}
1.4 结果
2 低通滤波之均值滤波器
2.1、空间滤波基础
2.1.1线性空间滤波原理
线性空间滤波器在图像f和滤波器核w之间执行乘积之和运算。用邻域像素改变中心像素的灰度值大小。
2.1.2 相关与卷积
相关以上面的滤波运算方法对图像进行遍历处即使w每个像素能够访问图像f中每个像素。卷积运算时将滤波器核w旋转180°再处理。
2.2、平滑滤波之均值滤波器
2.2.1原理
均值滤波就是将区域内的像素灰度值的平均值作为中心像素的灰度值,一个3*3大小的均值滤波器核如下:
2.2.2 c++ opencv代码
主程序:
#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"
using namespace cv;
using namespace std;
int main()
{
Mat image, image_gray, image_output, image_output2; //定义输入图像,灰度图像,输出图像
image = imread("./img_all/2.png"); //读取图像;
if (image.empty())
{
cout << "读取错误" << endl;
return -1;
}
imshow("image", image);
cvtColor(image, image_gray, COLOR_BGR2GRAY);
Salt(image_gray, 1000); //添加噪声
imshow("image_gray", image_gray);
//opencv自带程序
blur(image_gray, image_output, Size(7, 7));
imshow("image_output", image_output);
waitKey(0); //暂停,保持图像显示,等待按键结束
return 0;
}
2.2.3 结果
3 中值滤波
中值滤波就是取周围邻域像素灰度值值的中值作为中心像素灰度值结果。
3.1 c++ opencv代码
主程序:
#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"
using namespace cv;
using namespace std;
int main()
{
Mat image, image_gray, image_output, image_output2; //定义输入图像,灰度图像,输出图像
image = imread("./img_all/2.png"); //读取图像;
if (image.empty())
{
cout << "读取错误" << endl;
return -1;
}
imshow("image", image);
cvtColor(image, image_gray, COLOR_BGR2GRAY);
Salt(image_gray, 1000); //添加噪声
imshow("image_gray", image_gray);
//opencv自带滤波函数
int a = 7;
medianBlur(image_gray, image_output, a);
imshow("image_output", image_output);
waitKey(0); //暂停,保持图像显示,等待按键结束
return 0;
}