图像降噪技术的研究历史悠久,可以追溯至20世纪70年代。每年都有大量文献讨论这一领域的问题。在信息传输中,媒介有很多种,而图像是其中最重要的一种。由于图像具有承载大量信息、传输速度快、作用距离远等优点,成为信息传输的良好载体,也是人类认识世界和自我认知的重要途径。早期的图像处理技术是通过给拍到的黑白照片上色来反映真实的自然外界和人类的历史。随着科学技术的发展和完善,原始的图像处理技术被现在的计算机图像处理技术逐渐代替。
然而,计算机对图像进行处理需要经过多个步骤,但数字化后整个过程更加直接。数字图像处理技术得到了快速发展,与我们的生活密切相关。无论是工作还是生活,都离不开数字图像带来的信息,如每天观看的电视和科学实验展示等。图像降噪技术的应用广泛,不仅因为其应用范围特性,还因为其操作简单且可逆。它是评估图像处理技术的方便直接平台。过去许多学术研究者利用各种方法研究图像降噪问题。图像降噪技术是图像处理技术的关键技术之一,处理图像时无法避免噪声的出现。人们根据噪声特性及频谱特点开发了各种各样的图像降噪技术方法并得到广泛应用。统计估计方法、空间自适应滤波法和偏微分方法都有各自的缺点,应用范围有限。
本文重点介绍双边,中值,均值滤波,三种方法。
1.图像模型及噪声特性
人们通过各种途径获得外部世界的信息,包括视、听、触、味等。但是,在这些信息中,绝大多数(大约80%)是由视觉产生的。因而,对其进行深入的研究与应用就显得尤为重要。为了实现对图象的分析与利用,必须对图象进行一系列的处理,如:调整图象的存储格式、去噪声等。图像处理技术是一门融合了数学、物理、心理学、生理学、医学、通信理论、信号分析、控制论、系统工程等多学科知识的交叉融合,具有很强的综合性。
本论文主要针对图像预处理中的噪声问题进行了研究。图像的采集、编码、传输、恢复等过程都受到多种因素的影响。比如,真实影像中的有害信息可被看作是噪声,而设备、环境、获取方式等又会带来诸如电磁、粒子、传感器、信道、滤波等多种噪声干扰。所以,对影像去噪,对于影像品质的改善和后续的进一步处理,都是不可或缺的一环。如何找到一条有效的降低噪声的途径,一直以来都是研究者们努力的方向。
1.1含噪模型
现实中的数字图像在数字化和传输过程中, 常受到成像设备与外部环境噪声干扰等影响, 成为含噪图像。 去除或减轻在获取数字图像中的噪声称为图像降噪,在图像降噪之前我们先要建立一个含噪图像的模型, 为了简便, 我们研究如下的加性噪声模型, 即含噪图像仅由原始图像叠加上一个随机噪声形成:
表示图像,为噪声,含噪图像记为。
1.2噪声特性
在对这个含噪模型进行研究之前,我们有必要了解一下噪庐的一些特性,经常影响图像质量的噪户源可分为三类。人们对其生成原因及相应的模型作了大量研究:
1、电子噪声。在阻性器件中由于电子随机热运动而造成的电子噪声是三种模型中最简单的,一般常用零均值高斯白噪声作为其模型,它可用其标准差来完全表征。
2、 光电子噪声。由光的统计本质和图像传感器中光电转换过程引起,在弱光照的情况下常用具有泊松分布的随机变量作为光电噪声的模型,在光照较强时,泊松分布趋向于更易描述的高斯分布。
3、 感光片颗粒噪声。由于曝光过程中感光颗粒只有部分被曝光,而其余部分则未曝光,底片的密度变化就由曝光后的颗粒密集程度变化所决定,而算曝光颗粒的分布呈现一种随机性。在大多数情况下,颗粒噪声可用高斯白噪声作为有效模型。
通过以上分析可以看出,绝大多数的常见图像噪声都可用均值为零,方差不同的高斯白噪声作为其模型,因而为了简便和一般化,我们采用零均值的高斯白噪声作为噪声源。
1.3噪声添加
高斯噪声的添加:
对于每个像素位置,高斯噪声可以表示为:
其中,是加入高斯噪声后的像素值,是原始图像的像素值,是符合高斯分布的随机噪声。
椒盐噪声的添加:
对于每个像素位置,椒盐噪声可以表示为:
其中,是加入椒盐噪声后的像素值,是原始图像的像素值,和是随机生成的0到1之间的随机数,用于决定像素是椒还是盐。
1.4客观评价
图像质量的客观评价由于着眼点不同而有多种方法, 这里介绍的是一种经常使用的所谓的逼真度测量。 对于彩色图像逼真度的定量表示是一个十分复杂的问题。 目前应用得较多的是对黑白图像逼真度的定量表示。合理的测量方法应和主观实验结果一致,而且要求简单易行。
对 于 连 续 图 像 场 合 , 设为 一 定 义 在 矩 形 区 域,的连续图像, 其去质图像为, 它们之间的逼真度可用归一化的互相关函数 K 来表示。
对于数字图像场合设为原参考图像,为其去质图像, 逼真度可定义为归一化的均方误差值 NMSE表示。
主观评价和客观评价这两种图像质量评价标准有各自的优缺点。由于人眼视觉特性的准确模型还没有完全建立起来,因此主观评价标准还只是一个定性的描述方法,不能作定量描述,但它能反映人眼的视觉特性。峰值信噪比能够对图像质量给出定量的描述。它是一种数学上统计的处理方法, 其缺点是它并不是总能反映人眼的真实感觉。一种折中的方法是在衡量图像“降噪”算法的优劣时,将主观与客观两种标准结合起来考虑。
在我们的实现过程中,我们重点实现了逼真度可用归一化的互相关函数K,其取值介于-1至1区间。
2.图像降噪方法
2.1均值滤波
邻域平均法是一种局部空间域处理的算法。设一幅图像为的阵列,处理后的图像为,它的每个像素的灰度级由包含领域的几个像素的灰度级的平均值所决定, 即用下式得到处理后的图像:
式中x,y=0,1,2,...,N-1;s是以点为中心的邻域的集合,M是s内坐标总数。图像邻域平均法的处理效果与所用的邻域半径有关。半径愈大,则图像模糊程度也愈大。另外,图像邻域平均法算法简单,计算速度快,但它的主要缺点是在降低噪声的同时使图像产生模糊,特别在边缘和细节处,邻域越大,模越厉害。
以一个 3x3 的矩阵为例,对于原图像中的每一个像素,将该像素的灰度值和其周围的八个像素的灰度值取平均数,然后让该像素的灰度值等于该平均数。即可完成均值滤波的操作。
2.2中值滤波
中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。在一定的条件下,可以克服线性滤波器所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。但是对一些细节多,特别是点、线、尖顶细节多的图像不宜采用中值滤波的方法。
中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替。
设有一个一维序列,取窗口长度为m(m为奇数),对此序列进行中值滤波,就是从输入序列中相继抽出 m 个数,再将这m个点按其数值大小排列, 取其序号为正中间的那作为出。
例如: 有一个序列为{0, 3, 4, 0, 7},则中值滤波为重新排序后的序列{0,0, 3, 4, 7}中间的值为3。此例若用平均滤波,窗口也是取5,那么平均滤波输出为2.8。
在实际使用窗口时,窗口的尺寸一般先用再取逐渐增大,直到其滤波效果满意为止。对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜,对于包含尖顶角物体的图像,适宜用十字形窗口。使用二维中值滤波最值得注意的是保持图像中有效的细线状物体。与平均滤波器相比,中值滤波器从总体上来说, 能够较好地保留原图像中的跃变部分。
2.3双边滤波
双边滤波的基本思想是结合空间滤波和强度滤波。它不仅考虑像素之间的空间距离,还考虑像素值之间的差异。具体来说,双边滤波中的每个像素的值是其局部邻域内的像素值的加权平均,权重分为两部分:
- 空间权重:两个像素之间的空间距离越近,空间权重越大,空间权重采用高斯分布。
- 强度权重:两个像素值之间的差异越小,强度权重越大,强度权重也采用高斯分布。
双边滤波的工作过程主要分为:
- 计算每个像素的局部窗口,得到空间高斯权重;
- 计算每个像素与中心像素的值差,得到强度高斯权重;
- 权重与相乘,对每个像素的值进行加权平均,得到中心像素的新值。
- 重复步骤1-3,对所有像素进行双边滤波。
3.代码与分析
原图展示
I = imread('input','jpg');
I = rgb2gray(I);
imshow(I);
均值滤波
I = imread('input.jpg'); % 读入图像
I = rgb2gray(I); % 转化为灰度图像
figure;
J1 = imnoise(I, 'gaussian', 0, 0.01); % 加入高斯噪声
J2 = imnoise(I, 'salt & pepper', 0.04); % 加入椒盐噪声
hood = 3;
K1 = medfilt2(J1, [hood hood]);
subplot(2, 3, 1);
imshow(J1);
title('加高斯噪声的图像');
subplot(2, 3, 2);
imshow(K1);
title('高斯噪声的滤波效果');
K2 = medfilt2(J2, [hood hood]);
subplot(2, 3, 4);
imshow(J2);
title('加椒盐噪声的图像');
subplot(2, 3, 5);
imshow(K2);
title('椒盐噪声的滤波效果');
% 计算逼真度归一化系数K
K = ssim(I, K1) / ssim(I, K2);
fprintf('逼真度归一化系数K: %.4f\n', K);
% 绘制逼真度归一化系数K的柱状图
subplot(2, 3, 3);
bar(1, K);
title('逼真度归一化系数K');
xticks([]);
yticks([0 0.5 1]);
ylim([0 1]);
ylabel('K');
subplot(2, 3, 6);
axis off;
text(0.5, 0.5, sprintf('K = %.4f', K), 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle', 'FontSize', 14);
中值滤波
%中值滤波
I = imread('input','jpg');%读入图像
I = rgb2gray(I);%转化为灰度图像
figure;
J1=imnoise(I,'gaussian',0,0.01);%加入高斯噪声
J2=imnoise(I,'salt & pepper',0.04);%加入椒盐噪声
hood=3;
K1=medfilt2(J1,[hood hood]);
subplot (2,2,1);
imshow(J1);
title('加高斯噪声的图像');
subplot (2,2,2);
imshow(K1)
title ('高斯噪声的滤波效果');
K2=medfilt2(J2,[hood hood]);
subplot (2,2,3);
imshow(J2);
title('加椒盐噪声的图像');
subplot(2,2,4);
imshow(K2);
title('椒盐噪声的滤波效果');
双边滤波
% 读取图像
input_image = imread('input.jpg');
% 转换为灰度图像
gray_image = rgb2gray(input_image);
% 添加高斯噪声
noise_std_dev = 20; % 设定高斯噪声标准差
gaussian_noise = noise_std_dev * randn(size(gray_image));
noisy_gaussian_image = gray_image + uint8(gaussian_noise);
% 添加椒盐噪声
salt_pepper_ratio = 0.02; % 设定椒盐噪声比率
sp_noisy_image = imnoise(gray_image, 'salt & pepper', salt_pepper_ratio);
% 双边滤波
spatial_radius = 3; % 空间半径
intensity_radius = 50; % 强度半径
bilat_filtered_image = bilateral_filter(double(sp_noisy_image), spatial_radius, intensity_radius);
% 显示对比图
figure, subplot(221), imshow(gray_image), title('原始灰度图像');
subplot(222), imshow(noisy_gaussian_image), title('添加高斯噪声的图像');
subplot(223), imshow(sp_noisy_image), title('添加椒盐噪声的图像');
subplot(224), imshow(uint8(bilat_filtered_image)), title('双边滤波降噪后的图像');
function output = bilateral_filter(input, spatial_radius, intensity_radius)
[h, w] = size(input);
output = zeros(h, w);
spatial_filter = fspecial('gaussian', 2*spatial_radius+1, spatial_radius);
for x = 1:h
for y = 1:w
% 获取局部邻域
x_min = max(x - spatial_radius, 1);
x_max = min(x + spatial_radius, h);
y_min = max(y - spatial_radius, 1);
y_max = min(y + spatial_radius, w);
local_region = input(x_min:x_max, y_min:y_max);
% 计算强度权重
intensity_weights = exp(-(double(local_region) - double(input(x,y))).^2 / (2 * intensity_radius^2));
% 双边滤波
weights = spatial_filter((x_min:x_max)-x+spatial_radius+1,(y_min:y_max)-y+spatial_radius+1) .* intensity_weights;
output(x,y) = sum(local_region(:) .* weights(:)) / sum(weights(:));
end
end
end
均值滤波是一种简单而常用的图像滤波方法,它通过计算像素周围邻域的平均值来平滑图像。虽然均值滤波在某些情况下可以有效地去除噪声,但它也存在一些缺点:
1. 模糊效果:均值滤波会对图像进行平滑处理,这可能导致图像细节的损失。平均化像素值的过程会模糊图像边缘和纹理细节,使图像失去一些清晰度和锐利度。
2. 无法处理离群值:均值滤波对于噪声中的离群值或异常值并不鲁棒。由于它仅仅计算邻域像素的平均值,当存在离群值时,平均值会被拉向离群值,导致去噪效果不佳。
3. 不适用于保护边缘:均值滤波对于保护图像中的边缘信息效果较差。在边缘处,像素值的变化较大,使用均值滤波平均化周围像素值会导致边缘模糊或细节丢失。
4. 处理时间较长:均值滤波涉及对邻域内所有像素进行求和和求平均操作,因此在处理大尺寸图像或具有大卷积核的滤波时,可能需要较长的计算时间。
尽管均值滤波是一种简单易用的去噪方法,但在某些情况下可能无法提供理想的结果。对于一些特定的图像噪声和要求更高的图像去噪任务,可能需要考虑其他更高级的滤波算法。
中值滤波的优点包括:
1. 能够有效去除椒盐噪声和脉冲噪声:中值滤波对于椒盐噪声和脉冲噪声有良好的去噪效果。通过取邻域内像素的中值来替代当前像素值,能够有效去除异常值的干扰。
2. 保留边缘信息:相比于均值滤波,中值滤波在去噪的同时更好地保留了图像的边缘信息。这是因为中值滤波不会改变边缘处的像素值,只会用周围像素的中值来替代噪声像素。
中值滤波也存在一些缺点:
1. 模糊效果:中值滤波会对图像进行平滑处理,可能导致图像细节的损失。特别是对于纹理细节较多的图像,中值滤波可能会使图像失去一些清晰度和细节。
2. 处理时间较长:中值滤波需要对邻域内的像素进行排序,因此在处理大尺寸图像或较大的邻域时,可能需要较长的计算时间。
双边滤波是一种常用的图像滤波方法,它在平滑图像的同时保留边缘信息。与传统的线性滤波方法相比,双边滤波考虑了像素之间的空间距离和像素值的相似度。
双边滤波的优点包括:
1. 保留边缘信息:双边滤波通过考虑像素之间的相似度,能够有效地保留图像中的边缘信息。它使用一个高斯权重函数来平滑邻域内的像素,其中权重不仅考虑空间距离,还考虑像素值的相似度。这使得双边滤波在去噪的同时能够保持图像的边缘清晰度。
2. 控制平滑程度:双边滤波的平滑程度可以通过两个参数进行控制:空间域的标准差和像素值域的标准差。通过调整这两个参数,可以平衡去噪效果和保留细节之间的权衡。
双边滤波也存在一些缺点:
1. 较高的计算复杂度:双边滤波的计算复杂度较高,特别是对于大尺寸图像和较大的滤波窗口。这是因为在计算权重时需要考虑像素之间的空间距离和像素值的相似度,这需要进行大量的计算。
2. 模糊效果:尽管双边滤波在保留边缘信息方面比线性滤波方法更好,但仍然可能对图像的细节造成一定程度的模糊。这是因为在平滑过程中,双边滤波也会对邻域内的像素进行加权平均。
总的来说,双边滤波是一种常用的平滑滤波方法,可以在去噪的同时保留图像的边缘信息。它适用于各种类型的图像去噪任务,并于较大的图像和需要实时处理的应用,可能需要考虑计算复杂度的因素。对于本文中的双边滤波方法,显然效果并不理想,通过分析得参数选择并不合理,双边滤波的效果受到参数选择的影响。其中,空间域的标准差和像素值域的标准差是两个重要的参数。如果选择不当,可能导致过度平滑或保留噪声。不同图像和噪声类型可能需要不同的参数设置来获得最佳效果。