现在在上数字图像处理的课程,最近的一次作业要求不用OpenCV自带的滤波器函数来实现几种滤波器,以实现对加入椒盐噪声的图像的去噪。也是对markdown编辑器的一次练习。
椒盐噪声
椒盐噪声是一种很简单的噪声,即随机将图像中一定数量的像素点设置为0(黑)或255(白)。由于看起来好像在图像上撒了椒盐一样,故被称为椒盐噪声。
下面是椒盐噪声的处理代码(假定输入图像为3通道)
void salt(Mat &image, float salt_ratio){
int n=image.rows*image.cols*salt_ratio;
for (int k = 0; k < n; k++)
{
int i = rand() % image.cols; //cols 和 rows 给出图像的宽与高
int j = rand() % image.rows;
int type= rand() %2;
if (type==1){
image.at<Vec3b>(j, i)[0] = 255;
image.at<Vec3b>(j, i)[1] = 255;
image.at<Vec3b>(j, i)[2] = 255;
}
else{
image.at<Vec3b>(j, i)[0] = 0;
image.at<Vec3b>(j, i)[1] = 0;
image.at<Vec3b>(j, i)[2] = 0;
}
}
}
以经典的lena图为例,加入10%的椒盐噪声后:
![](http://ofltv9hb9.bkt.clouddn.com/salt.jpg)
滤波器原理
首先介绍一些通用的设定:令 Sxy 表示中心在 (x,y) 的点,尺寸为 m×n 的矩形子图像窗口的坐标集。 m×n 为滤波器模板的大小。 f^(x,y) 为滤波器得到的结果,赋值给 (x,y) </