QQ登录

只需一步,快速开始

halcon estimate_noise函数介绍

[ 复制链接 ]
6.estimate_noise(Image : : Method, Percent : Sigma)
estimate_noise估算图像Image域中的加性噪声的标准差,Sigma返回结果。
该运算符在以下用例中很有用:
确定匹配的MinContrast,
边缘滤波器振幅的确定,
相机评估,
监控相机操作中的错误(例如,用户超速驱动相机增益)。
Method有四种
'foerstner', 'immerkaer', 'least_squares', 'mean'
foerstner:首先,根据图像灰度值的一阶导数,对每个像素进行均匀性测度
通过对均匀性测度进行阈值化,得到图像中的均匀区域。
阈值是根据图像噪声的一个初始值计算的。
初始值是在第一步中应用“immerkaer”方法(见下文)得到的。
假设均匀区域内的灰度值波动完全是由图像噪声引起的。
再假设图像噪声是高斯分布的。
然后利用均匀区域内的平均均匀性测度对图像噪声进行精细估计。
精细估计为均匀性引入了一个新的阈值。
重复上述过程,直到估计的图像噪声在两个连续迭代之间保持不变。
最后,将估计的图像噪声的标准差通过参数“Sigma”返回。
注意,在某些情况下,迭代会错误地收敛到值0。
例如,如果输入图像的灰度值直方图包含由相机自动辐射缩放,
或使用缩放因子> 1手动扩展灰度值引起的空白等。
还要注意,此方法获得的结果与传入的百分比值Percent 无关。


immerkaer:
首先对输入图像应用以下滤波掩模:
2019-05-09_124520.jpg
该方法的优点是M对图像结构几乎不敏感,只依赖于图像中的噪声。
假设高斯分布噪声,其标准差最终为
2019-05-09_112020.jpg
其中N是使用了M的图像像素的个数
注意,此方法获得的结果与传入的百分比值无关。


least_squares:
利用相对于局部拟合灰度值平面的灰度值波动来估计图像噪声。
首先,根据图像灰度值的一阶导数计算均匀性测度。
均匀图像区域是通过选择输入图像域中最均匀像素的百分比来确定的,
即,一阶导数大小较小的像素。
对于每个均匀像素,将一个灰度值平面拟合到其3x3邻域。
利用3x3邻域内的灰度值与局部拟合平面的差值估计噪声的标准差。
最后,返回所有均匀像素的平均标准差Sigma


mean:
噪声估计是基于输入图像和无噪声图像之间的差异。
首先,根据图像灰度值的一阶导数计算均匀性测度。
均匀图像区域是通过选择输入图像域中最均匀像素的百分比来确定的,
即,一阶导数大小较小的像素。
为了消除噪声,对均匀图像区域进行均值滤波。
假设输入图像与由此得到的无噪声图像之间的差值表示图像噪声。
最后,差值的标准差以参数Sigma表示。
需要注意的是,该方法需要较大的连通均匀图像区域才能可靠地估计噪声。
注意,“foerstner”和“immerkaer”方法假设图像噪声为高斯分布,
而“least_squares”和“mean”方法可以应用于具有任意分布噪声的图像。
一般来说,“foerstner”方法返回最准确的结果,
而“immerkaer”方法显示最快的计算速度。


如果不能可靠地估计图像噪声,就会产生错误代码3175。
如果图像没有包含足够的均匀区域,如果图像是人为创建的,
或者如果噪声不是高斯类型的,就可能发生这种情况。
为了避免这种错误,在某些情况下,根据传入方法的估计方法,
尝试以下修改之一可能是有用的:
增加输入图像域的大小(适用于所有方法)。

增加参数Percent的值(对于方法'least_squares'和'mean'非常有用)。

使用“immerkaer”方法,而不是“foerstner”、“least_squares”或“mean”方法。

“immerkaer”方法不依赖于均匀图像区域的存在,因此几乎总是适用的。


Image,Method,Percent为输入的图像,区域,使用像素百分比。
Sigma为输出结果


例程
read_image (ImageNoise, '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)




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索