按老规矩,先给简要说明,然后上MATLAB,c++和Python的代码。
图像的噪声
不管是模拟信号还是数字信号,都难免会产生噪声,尤其是模拟信号,噪声处理一直是比较重要的环节,数字信号相对来说噪声会少一点。
图像噪声的产生原因很复杂,可能是成像设备或者环境本身导致成像质量不稳定,也可能是数字信号传输过程中发生丢失或者受到干扰,可以将噪声看成是一种无规律不可预测的随机误差。
噪声主要形式有:椒盐噪声(可能是黑白噪声的看着像椒盐,然后叫这名字吧);高斯噪声(服从高斯分布的噪声,一般在数码相机图像采集阶段会产生);泊松噪声(服从泊松分布的噪声)。
噪声的产生会严重影响图像质量,必须给予纠正。
MATLAB: imnoise(src,noise_name,size),通过设置不同噪声名字,可以添加高斯,椒盐,泊松噪声。OpenCV: 没有专门添加噪声的函数,但是可以人为添加,见下文gaussian_noise()
常见的滤波方法
滤波也称为平滑模糊,是一种可以有效去除图像噪声的方法。下面简单分析一下几种常见滤波器的工作原理。图像卷积核一般推荐3x3, 5x5,通常不会超过15,卷积核越大图像越模糊
- 卷积滤波
图像的卷积很多文章都有讲过,就是设置一个卷积核,对图像通过卷积核进行逐个的元素相乘,再求和求平均值,从而达到图像平滑的效果。
在MATLAB中,卷积操作为: conv2(src, size); src表示输入图像,size表示设定的卷积核在OpenCV中,卷积操作为:blue(src, dst, size);
- 均值滤波
均值滤波核卷积滤波原理一致,区别是均值滤波卷积核为 n*n 的元素为1的矩阵,求出来的像素值为采样点的平均数,而卷积滤波的卷积核可以自行设置,比方我可以设置为[1 2 3; 3 2 1; 1 1 1]。
在MAT