halcon算子翻译——estimate_noise

名称

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 估算图像中的噪声

原文地址:https://www.cnblogs.com/xhiong/p/estimate_noise.html

时间: 2024-11-14 13:15:07

halcon算子翻译——estimate_noise的相关文章

Halcon算子翻译——catch

名称 catch - 捕获在前面的try块中抛出的异常. 用法 catch( : : : Exception) 描述 使用算子try,catch,endtry和throw可以在HDevelop中实现动态的异常处理,这相当于C ++和C#中的异常处理. HDevelop中异常处理的基本概念在算子try,throw和dev_set_check以及“HDevelop用户指南”中进行了描述. 算子catch在错误情况时结束一个监控的程序行块,并跳转至另一个程序行块. 如果try-catch块执行没有出现

Halcon算子翻译——exit

名称 exit - 终止HDevelop. 用法 exit( : : : ) 描述 退出HDevelop. 算子等同于菜单项File - > Quit. 在内部和导出的C ++代码中使用C函数调用exit(0). exit terminates HDevelop. The operator is aquivalent to the menu entry File -> Quit. Internally and for exported C++ code the C-function call

Halcon算子翻译——executable_expression

名称 executable_expression - 以类似于算子的方式执行单个表达式. 用法 executable_expression( : : Expression : ) 描述 HDevelop语言包含一些表达式,不仅返回一个返回值,而且修改它们的输入变量. 使用executable_expression,可以以类似于算子的方式执行这些表达式. 目前,这些是向量表达式'.clear()','.insert()'和'.remove()'. 有关更多详细信息,请参阅HDevelop用户指南.

Halcon算子翻译——comment

名称 comment - 为程序添加一行注释. 用法 comment( : : Comment : ) 描述 comment给程序中添加一行注释. 作为参数值,即作为注释,允许所有的字符. 如果使用算子窗口输入注释,并且注释行参数中有换行符,则每个文本行都插入一条注释语句. 在全文编辑器中,通过输入星号('*')作为第一个非空白字符来标记注释. 该算子对程序执行没有影响. comment allows to add a comment of one line to the program. As

Halcon算子翻译——export_def

名称 export_def - 将任意文本插入到程序的导出代码中. 用法 export_def( : : Position, Declaration : ) 描述 export_def允许定义逐行写入要导出{项目或程序}的输出文件的{代码行或文本块}. 参数Position控制了在声明中给出的文本的位置. 支持以下选项: 'in_place' - #文本插入到实际位置的过程中,即在相邻的程序行之间. 'at_file_begin' - #^^文本在导出文件的最开始处导出. 'before_pro

Halcon算子翻译——import

名称 import - 导入一个或多个外部程序. 用法 import( : : ProcedureSource : ) 描述 import语句可用于从HDevelop程序中导入其他外部程序. 导入的程序仅适用于包含导入语句的程序,但不作用于其他程序. import语句可以出现在程序的任何一行中. 导入的程序只能在导入语句下方使用,并可能被后面的(相同名称)导入程序取代. proc() * unresolved procedure call import ./the_one_dir proc()

halcon算子翻译——stop

名称 stop - 停止程序执行. 用法 stop( : : : ) 描述 stop算子停止HDevelop程序的连续程序执行. 如果发生这种情况,即使下面有大量的注释或其他不可执行的程序行,PC(程序计数器)仍停留在stop语句(而不是放在下一个可执行程序行),以便直接显示程序中断的原因. 算子相当于菜单栏中的stop行动(F9). 程序可以通过run(F5)继续. 可以通过在首选项对话框(preferences dialog)中设置时间参数来重新定义行为. 执行不会停止,而是在等待指定的时间

halcon算子翻译——region_to_label

名称 region_to_label - 将区域转换为标签图像. 用法 region_to_label(Region : ImageLabel : Type, Width, Height : ) 描述 region_to_label根据它们的索引(1..n)将输入区域转换成标签图像,即,第一区域被绘成灰度值1,第二区域被绘成灰度值2等.仅使用正灰度值. 对于'byte'图像,索引以取256的模输入. 超出生成图像的区域被适当地剪切. 如果区域重叠,则输入索引较高图像的区域(即,它们按照它们被包含

halcon算子翻译——elliptic_axis_gray

名称 elliptic_axis_gray - 计算灰度值图像中某个区域的方向和长轴. 用法 elliptic_axis_gray(Regions, Image : : : Ra, Rb, Phi) 描述 算子elliptic_axis_gray计算和输入区域具有“相同方向”和“纵横比”的椭圆的轴的长度和方向. 几个输入区域可以作为元组传递给Regions. 确定长轴Ra和短轴Rb的长度以及主轴相对于x轴的取向(Phi). 角度以弧度返回. 计算过程类似于elliptic_axis. 唯一的区别