图像噪音来源众多,视图像来源而定:扫描仪,数码相机,摄像头等等,均会产生图像噪音。
而图像噪音又可以分为点,线,背景波纹等等。
这里简单介绍一下点和线类型的噪音去除算法。
看过我的系列的前几篇文章的朋友,可以发现“模糊”算法也具有去除噪音的效果,
这是因为模糊本身就是一个高频滤波器,但是由于这个模糊算法并非专门为去除噪音而设计,
如果你把它用来去除噪音,那么估计效果是惨不忍睹了。
(噪音点被平均分摊到周围的区域中去了,淡是淡了,范围却变大了)
现在我们要优化一下模糊算法,使之更适用于去除图像噪音,而又不会不分好坏,对正常图像影响太大。
首先,我们来看一下噪音点的形态。一般由于输入设备上的灰尘或划痕(扫描仪,数码相机),造成输入的
数码图像上带上了细微的杂色点或细线。
这些杂点或细线的宽度比较小,一般在1到数个象素之间。
(要是很大的斑点,估计大家就会去清理输入设备重新输入了)
并且,这些杂点的颜色(亮度)和正常图片的差异痕大。
因此我们可以针对每一个象素,取一个范围,比如它周围的最相邻的8个或24(或更多)像素 *注1
在这个范围内的所有象素和当前象素做一个比较,取差异最小的K个象素,用这几个象素的平均值来代替当前象素。
(实际的做法是还要设置一个阀值,当这K个像素平均值和当前像素的差异超过这个阀值的时候,当前像素才会被替换)
这样就有两种情况会发生:
1:当前象素是噪音点:
如果当前象素是噪音点,那么即使是和它的差值最接近的K个象素也都是正常象素,他们的平均值也依然在正常范围内。
因此替代之后,当前的噪音点就被正常点给替代了,也就是说噪音点被去除了。
2:当前点是正常点:
如果当前点是正常点,那么和它差异最小的K个点的平均值代替当前点之后,新点和原来点的差异很小,图像基本不变。
(这里有个假定前提:自然图片,包括照片或摄像输入的图片的主体是色彩平滑的,突变点很少)
因此如果图像本身是一个有很多不平滑的突变点构成的话,那么这些突变点也会被认为是噪音点而被去除。
下面举例子:范围为1,一共9个点,取最接近的点数5点:
(当前点:6)
3 4 5
4 6 5 =》最接近的5个点为4,5,5,7,8
3 7 8
均值=(4+5+5+7+8)/5=5.8=>6(四舍五入会比较精确点,当然也可以直接取整=5)
运算后结果为:
3 4 5