Main Content

imnoise

向图像添加噪声

说明

J = imnoise(I,'gaussian') 将方差为 0.01 的零均值高斯白噪声添加到灰度图像 I

J = imnoise(I,'gaussian',m) 添加高斯白噪声,均值为 m,方差为 0.01。

J = imnoise(I,'gaussian',m,var_gauss) 添加高斯白噪声,均值为 m,方差为 var_gauss

J = imnoise(I,'localvar',var_local) 添加局部方差为 var_local 的零均值高斯白噪声。

J = imnoise(I,'localvar',intensity_map,var_local) 添加零均值高斯白噪声。噪声的局部方差 var_localI 中图像强度值的函数。图像强度值到噪声方差的映射由向量 intensity_map 指定。

J = imnoise(I,'poisson') 从数据中生成泊松噪声,而不是向数据中添加人为噪声。有关详细信息,请参阅算法

J = imnoise(I,'salt & pepper') 添加椒盐噪声,默认噪声密度为 0.05。这会影响大约 5% 的像素。

示例

J = imnoise(I,'salt & pepper',d) 添加椒盐噪声,其中 d 是噪声密度。这会影响大约 d*numel(I) 个像素。

J = imnoise(I,'speckle') 使用方程 J = I+n*I 添加乘性噪声,其中 n 是均值为 0、方差为 0.05 的均匀分布随机噪声。

J = imnoise(I,'speckle',var_speckle) 添加方差为 var_speckle 的乘性噪声。

示例

全部折叠

读取灰度图像并显示它。

I = imread('eight.tif');
imshow(I)

向图像添加椒盐噪声,噪声密度为 0.02。显示结果。

J = imnoise(I,'salt & pepper',0.02);
imshow(J)

输入参数

全部折叠

灰度图像,指定为任意维度的数值数组。

imnoise 要求数据类型为 doublesingle 的像素值在 [0, 1] 范围内。您可以使用 rescale 函数将像素值调整到所需范围。如果您的图像是 doublesingle 类型,其值在范围 [0, 1] 之外,则 imnoise 会在添加噪声之前将输入像素值裁剪到范围 [0,1]。

注意

对于泊松噪声,imnoise 不支持数据类型为 int16 的图像。

数据类型: single | double | int16 | uint8 | uint16

高斯噪声的均值,指定为数值标量。

高斯噪声的方差,指定为数值标量。

高斯噪声的局部方差,指定为下列项之一:

  • I 大小相同的数值矩阵。

  • intensity_map 长度相同的数值向量。

映射到高斯噪声方差的强度值,指定为数值向量。值归一化为范围 [0, 1]。

您可以使用命令 plot(intensity_map,var_local) 绘制噪声方差 var_local 和图像强度之间的函数关系。

椒盐噪声的噪声密度,指定为数值标量。噪声应用于大约 d*numel(I) 个像素。

乘性噪声的方差,指定为数值标量。

输出参量

全部折叠

含噪图像,以与输入图像 I 具有相同数据类型的数值矩阵形式返回。对于数据类型为 doublesingle 的图像,imnoise 函数在添加噪声后将输出像素值裁剪到范围 [0, 1]。

算法

  • 指定 'gaussian''localvar''speckle' 噪声类型的均值和方差参数时始终假设图像的类为 double,范围为 [0, 1]。如果输入图像为不同类,则 imnoise 函数会将图像转换为 double,并根据指定的类型和参数添加噪声,将像素值裁剪到范围 [0, 1],然后将噪声图像转换回与输入图像相同的类。

  • 泊松分布取决于输入图像 I 的数据类型:

    • 如果 I 为双精度,则会将输入像素值放大 1e12 倍解释为泊松分布的均值。例如,如果输入像素的值为 5.5e-12,则对应的输出像素将根据均值为 5.5 的泊松分布生成,然后缩小为 1e12 分之一。

    • 如果 I 为单精度,则使用的缩放因子是 1e6

    • 如果 Iuint8uint16,则直接使用输入像素值,无需缩放。例如,如果 uint8 输入中一个像素的值为 10,则对应的输出像素将根据均值为 10 的泊松分布生成。

  • 要将密度为 d'salt & pepper' 噪声添加到图像中,imnoise 首先从开区间 (0,1) 上的一个标准均匀分布中为每个像素分配一个随机概率值。

    • 对于概率值在范围 (0, d/2) 内的像素,像素值设置为 0。设置为 0 的像素数约为 d*numel(I)/2 个。

    • 对于概率值在 [d/2, d) 范围内的像素,像素值设置为图像数据类型的最大值。设置为最大值的像素数约为 d*numel(I)/2 个。

    • 对于概率值在 [d, 1) 范围内的像素,像素值不变。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

|