图像的高斯噪声(Gaussian noise)是一种常见的图像噪声类型,其特征在于噪声的概率分布服从高斯(正态)分布。高斯噪声通常出现在传感器或电子传输过程中,是由多个小的、独立的扰动叠加而成。其数学表示通常为:
这里,μ是均值,通常取 0(即噪声的平均值为零,不偏离原图像的亮度值),
是方差,表示噪声的强度。
高斯噪声的具体特点和影响包括:
- 均值和方差:噪声值围绕均值对称分布,方差决定了噪声的强度。方差越大,图像受干扰的程度越高。
- 全局影响:高斯噪声影响整个图像,每个像素点都可能受到影响,且噪声的值与像素值无关。
- 可叠加性:由于高斯噪声的独立性,可以简单地通过叠加多次生成的高斯噪声来模拟更复杂的噪声模型。
生成图像高斯噪声的方法通常包括在图像的每个像素值上添加随机采样的高斯噪声值。这样可以模拟出因成像设备或传输过程中的随机误差而导致的噪声。
例如,在灰度图像中,如果一个像素的原始值为I,而噪声值为N,则添加噪声后的像素值为:
其中,N 服从 的高斯分布。总的来说,高斯噪声是一种重要的噪声模型,用于研究和处理图像中的随机干扰,许多图像处理和分析方法都针对这种噪声进行了优化和处理。
利用OpenCV实现添加高斯噪声的C++代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
// Function to add Gaussian noise
void addGaussianNoise(const Mat &src, Mat &dst, double mean, double stddev) {
Mat noise(src.size(), src.type());
randn(noise, mean, stddev); // generate Gaussian noise
dst = src + noise;
}
int main() {
// Load the image
Mat image = imread("path_to_your_image.jpg", IMREAD_GRAYSCALE);
if (image.empty()) {
cout << "Could not open or find the image" << endl;
return -1;
}
// Add Gaussian noise
Mat noisyImage;
addGaussianNoise(image, noisyImage, 0, 25); // mean = 0, stddev = 25
// Display the original and noisy images
imshow("Original Image", image);
imshow("Noisy Image", noisyImage);
// Wait for a key press indefinitely
waitKey(0);
return 0;
}
利用OpenCV实现添加高斯噪声的Pyhton代码、利用MATLAB实现添加高斯噪声的代码见下面这个页面:
https://www.hhai.cc/thread-243-1-1.html