图像复原最基本的任务是去除图像中的噪声的同时,不丢失图像中的细节。然而抑制噪声(高频)与保留细节(高频)是一对矛盾的问题。
图像复原与图像增强都是为了改善图像的质量,但本质上有所区别。图像增强不考虑图像是如何退化的,而是试图用各种技术来增强图像的视觉效果;而图像复原需要知道图像退化的机制与过程,找到一种相应的逆处理方法,从而得到恢复后的图像。
1. 噪声
噪声可以分为加性噪声和乘性噪声两种。
细分,可以分为高斯噪声,椒盐噪声,均匀分布噪声,指数分布噪声,gamma分布噪声等。在matlab中,加入噪声只需要imnoise
就可以实现。
2. 空域滤波
空域内的滤波复原方法,主要包括均值滤波复原、顺序统计滤波复原、和自适应滤波复原。
2.1 均值滤波复原
均值滤波复原就是用均值滤波算子作为卷积核计算。分为算术均值滤波和几何均值滤波。
在matlab中,算术均值滤波就是直接进行滤波:
A = imfilter(Img, psf);
而几何均值滤波则是对图像取对数,再进行滤波,然后取指数:A=exp(imfilter(log(Img),psf));
python中也可以用filter2d
与numpy包来实现类似功能。
此外,还有一个逆谐波均值滤波器,有一个参数Q,用matlab实现的代码为(其实是写公式有些麻烦):
Q = 1.5; A = imfilter(img.^(Q+1),psf)./imfilter(img.^Q,psf);
Q为正值时,可以去除椒噪声;Q为负值时,可以去除盐噪声。当Q = -1时,该滤波器为谐波均值滤波器。我也不知道opencv库中有没有这个功能(反正toturial里面没有),不过可以很简单的用numpy与filter2d
来实现这个功能(照着公式填就完了)。
2.2 顺序统计滤波复原
顾名思义,顺序统计滤波就是把一个像素值周围的邻域所有元素排序,其最大值/最小值/中值就为该点复原后的值。这种方法可以用于去除椒盐噪声。在matlab中,用函数medfilt
(中值滤波)与or