名称
estimate_noise - 估算来自单个图像的图像噪声。
用法
estimate_noise(Image : : Method, Percent : Sigma)
描述
算子estimate_noise估算在Image中域(ROI)内的累积噪声的标准偏差。 标准偏差在Sigma中返回。
该算子在以下用例中很有用:
在匹配中确定MinContrast,
确定边缘滤波器的幅度,
相机评测,
监视相机的错误操作(例如,用户过度调整照相机增益)。
可以在方法中选择以下四种方法之一估算噪声:
'foerstner':如果Method设置为'foerstner',首先对于每个像素,基于图像的灰度值的一阶导数计算均匀性度量。通过阈值均匀性度量,获得图像中的均匀区域。阈值是基于图像噪声的起始值计算的。起始值是通过在第一步中应用方法'immerkaer'(见下面)获得的。假定均匀区域内的灰度值波动仅由图像噪声引起。此外假定图像噪声是高斯分布的。然后使用均匀区域内的平均均匀性度量来计算图像噪声的改善的估计。改善的估计导致均匀性的新的阈值。迭代所描述的过程直到估计的图像噪声在两次连续迭代之间保持恒定。最后,估计图像噪声的标准偏差在'Sigma'中返回。
请注意,在某些情况下,迭代错误地收敛到值0.例如,如果输入图像的灰度值直方图包含分别由相机或图像采集卡的自动辐射定标(automatic radiometric scaling)导致的间隙,或者 通过使用比例因子> 1的手动扩展灰度值。
另请注意,通过此方法获得的结果与在Percent中传递的值无关。
'immerkaer':如果Method设置为'immerkaer',则首先将以下滤波器掩膜应用于输入图像:
这种方法的优点是M对图像结构几乎不敏感,只依赖于图像中的噪声。 假设一个高斯分布的噪声,其标准差最终得到
其中N是M被应用的图像像素的数量。 请注意,通过此方法获得的结果与Percent传递的值无关。
'least_squares':如果Method设置为'least_squares',则灰度值相对于局部拟合的灰度值平面的波动被用来估算图像噪声。 首先,基于图像灰度值的一阶导数计算均匀性度量。 通过选择输入图像的域中最均匀的像素的百分比Percent(即具有一阶导数的小幅度的像素)来确定均匀图像区域。均匀平面的每个像素的灰度值拟合其3*3邻域。使用3×3邻域内的灰度值与局部拟合的平面之间的差异来估计噪声的标准偏差。 最后,Sigma中返回所有同类像素的平均标准偏差。
'mean':如果Method设置为'mean',则噪声估算是基于输入图像与输入图像的无噪声版本之间的差异。 首先,基于图像灰度值的一阶导数计算均匀性度量。 通过选择输入图像的域中最均匀的像素(即具有一阶导数的最小幅度的像素)的百分比Percent来确定均匀图像区域。 将均值滤波器应用于均匀图像区域以消除噪声。 假设输入图像与由此获得的无噪声图像之间的差异表示图像噪声。 最后,在Sigma中返回差异的标准差。 应该指出的是,这种方法需要大的连通均匀图像区域以能够可靠地估算噪声。
请注意,方法的“foerstner”和“immerkaer”假设图像噪声的高斯分布,而方法的“least_squares”和“mean”可以应用于具有任意分布的噪声的图像。 一般而言,“foerstner”方法返回最准确的结果,而“immerkaer”方法则显示最快的计算结果。
如果图像噪声不能可靠地估计,会引起错误3175。 如果图像不包含足够的均匀区域,如果图像是人为创建的,或者噪声不是高斯类型的,则可能发生这种情况。 为了避免这个错误,在某些情况下,根据在Method中传递的估算方法尝试以下修改之一可能会有用:
增加输入图像域的大小(对所有方法有用)。
增加参数Percent的值(对方法'least_squares'和'mean'有用)。
使用方法'immerkaer',而不是方法'foerstner','least_squares'或'mean'。 该方法'immerkaer'不依赖于均匀图像区域的存在,因此几乎总是适用的。
并行
● 多线程类型:可重入(与非独占算子并行运行)。
● 多线程范围:全局(可以从任何线程调用)。
● 在元组级别自动并行化处理。
参数
Image (input_object) singlechannelimage(-array) → object (byte / uint2)
输入图像。
Method (input_control) string → (string)
估算图像噪声的方法。
Default value: 'foerstner'
List of values: 'foerstner', 'immerkaer', 'least_squares', 'mean'
Percent (input_control) number → (real / integer)
使用的图像点的百分比。
Default value: 20
Suggested values: 1, 2, 5, 7, 10, 15, 20, 30, 40, 50
限制: (0 < Percent) && (Percent <= 50.)
Sigma (output_control) real(-array) → (real)
图像噪声的标准偏差。
Assertion: Sigma >= 0
Example (HDevelop)
read_image (Image, 'combine') estimate_noise (ImageNoise, 'foerstner', 20, SigmaFoerstner) estimate_noise (ImageNoise, 'immerkaer', 20, SigmaImmerkaer) estimate_noise (ImageNoise, 'least_squares', 20, SigmaLeastSquares) estimate_noise (ImageNoise, 'mean', 20, SigmaMean)
结果
如果参数有效,则算子estimate_noise返回值2(H_MSG_TRUE)。 如有必要,会引发异常。 如果图像噪声不能可靠地估计,会引起错误3175。
Possible Predecessors
grab_image, grab_image_async, read_image, reduce_domain
Possible Successors
binomial_filter, gauss_filter, mean_image, smooth_image
Alternatives
noise_distribution_mean, intensity, min_max_gray
See also
gauss_distribution, add_noise_distribution
参考
W. Förstner: “Image Preprocessing for Feature Extraction in Digital Intensity, Color and Range Images“, Springer Lecture Notes on Earth Sciences, Summer School on Data Analysis and the Statistical Foundations of Geomatics, 1999
J. Immerkaer: “Fast Noise Variance Estimation“, Computer Vision and Image Understanding, Vol. 64, No. 2, pp. 300-302, 1996
模块
Foundation
HDevelop例程
estimate_noise.hdev 估算图像中的噪声