OpenVX非线性滤波器
OpenVX非线性滤波器
在输入图像的窗口上计算非线性滤波器。输出图像的大小应与输入图像的大小相同。
属性VX_CONTEXT_NONLINEAR_MAX_DIMENSION,允许用户查询vxNonLinearFilterNode实现所支持的最大非线性滤波器。实现必须支持所有维度(高度或宽度,不一定相同),直到该属性的值。此属性必须支持的最低值为9。
功能
3.38.1. 函数
vxNonLinearFilterNode
[图表]创建非线性滤波器节点。
vx_node vxNonLinearFilterNode(
vx_graph graph,
vx_enum function,
vx_image input,
vx_matrix mask,
vx_image output);
参数
[in] graph - 对图形的引用。
[in] function - 非线性滤波器功能。参见vx_non_linear_filter_e。
[in] input - VX_DF_image_U8或VX_DF_ image_U1格式的输入图像。
[in] mask - 应用于非线性函数的掩码。VX_MATRIX_ORIGIN属性,用于在计算结果图像时适当放置遮罩。参见vxCreateMatrixFromPattern。
[out] output - VX_DF_image_U8或VX_DF_image_U1格式的输出图像,其大小和格式必须与输入图像相同。
返回:vx_node。
返回值
vx_node- 节点参考。应使用vxGetStatus检查,阻止成功创建的任何可能错误。
vxuNonLinearFilter
[立即]执行非线性滤波。
vx_status vxuNonLinearFilter(
vx_ context,
vx_enum function,
vx_image input,
vx_matrix mask,
vx_image output);
参数
[in] context - 对整体上下文的引用。
[in] function - 非线性滤波器函数。参见vx_non_linear_filter_e。
[in] input - VX_DF_image_U8或VX_DF_image_U1格式的输入图像。
[in] mask - 要应用于非线性函数的掩码。VX_MATRIX_ORIGIN属性。用于在计算结果图像时适当放置遮罩。参见vxCreateMatrixFromPattern和vxCreateMatixFromPatternAndOrigin。
[out] output - VX_DF_image_U8或VX_DF_image_U1格式的输出图像。输出图像必须与输入图像具有相同的大小和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
* - 发生错误。参考vx_status_e。
3.39. 非最大值抑制
非极大值抑制
在图像中找到局部最大值,或者以其他方式抑制,不是局部最大值的像素。
非最大抑制器的输入是VX_DF_IMAGE_U8或VX_DF_IMAGE_S16图像。在VX_DF_IMAGE_S16图像的情况下,抑制像素的值应为INT16_MIN。
可选的掩模图像,可以用于将抑制限制到感兴趣的区域。如果掩码像素为非零,则输入中的相关像素被完全忽略,并且在抑制期间不被考虑;也就是说,它不被抑制并且不被视为任何抑制窗口的一部分。
具有坐标(x,y)的像素被保持,当且仅当其大于或等于其左上邻居;并且大于其右下邻居。例如,对于窗口大小为3的情况,如果以下条件成立,则保留P(x,y):
功能
3.39.1. 函数
vxNonMaxSuppressionNode
[图表]创建非最大抑制节点。
vx_node vxNonMaxSuppressionNode(
vx_graph graph,
vx_image input,
vx_image mask,
vx_int32 win_size,
vx_image output);
参数
[in] graph - 对图形的引用。
[in] input - 输入图像VX_DF_IMAGE_U8或VX_DF_IMAGE_S16格式。
[in] mask - [可选]抑制ROI的收缩。掩码图像的类型为VX_DF_image_U8或VX_DF_image_U1,并且必须具有与输入图像相同的大小。
[in] win_size - 执行局部非最大值抑制的窗口大小。必须是奇数,并且小于或等于输入图像的最小大小。
[out] output - VX_DF_image_U8或VX_DF_image_S16格式的输出图像。输出图像必须与输入图像具有相同的大小和格式。
返回:vx_node。
返回值
vx_node- 节点参考。应使用vxGetStatus检查,阻止成功创建的任何可能错误。
vxuNonMax抑制
[立即]对图像执行非最大值抑制,生成相同类型的图像。
vx_status vxuNonMaxSuppression(
vx_context context,
vx_image input,
vx_image mask,
vx_int32 win_size,
vx_image output);
参数
[in] context - 对整体上下文的引用。
[in] input - 输入图像的VX_DF_IMAGE_U8格式或VX_DF_IMAGE_S16格式。
[in] mask - [可选]抑制ROI的收缩。掩码图像的类型为VX_DF_image_U8或VX_DF_image_U1,并且必须与输入图像具有相同的大小。
[in] win_size - 在其上执行局部非最大值抑制的窗口大小。必须是奇数,并且小于或等于输入图像的最小大小。
[out] output - VX_DF_image_U8或VX_DF_image_S16格式的输出图像。输出图像必须与输入图像具有相同的大小和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
* - 发生错误。参考vx_status_e。
光流金字塔(LK)
使用Lucas Kanade方法计算两个金字塔图像之间的光流。
该函数是算法的实现。函数输入是两个vx_pyramid对象,旧的和新的,以及要从旧的vx_pyramid跟踪的,vx_keypoint_t结构的vx_array。棱锥体新旧棱锥体,必须具有相同的维度。必须支持VX_SCALE_PYRAMID_HALF金字塔缩放。
该函数输出vx_keypoint_t结构的vx_array,这些结构从旧的vx_pyramid,跟踪到新的vx_piramid。新阵列中的vx_keypoint_t结构的vx_array中,每个元素可能有效也可能无效。实现应在新vx_array中返回与旧vx_array中,相同数量的vx_keypoint_t结构。
更详细地说:Lucas Kanade方法,使用以下方程为旧图像跟踪点阵列中的每个点,找到仿射运动矢量V:
其中
和
是使用输入图像上的Scharr梯度获得的:
是通过两个图像中相同像素之间的简单差异获得的。
被定义为与所考虑的点
相邻的像素。对于给定的窗口大小
,
是
个点。像素
位于窗口的中心。在实践中,为了获得准确的解,有必要对该方案进行多次迭代(以牛顿-拉夫森方式),直到:
仿射运动矢量的残差小于阈值
和/或实现的最大迭代次数。
每次迭代,通过将其更改为旧图像和新图像中具有估计坐标的像素之间的差来使用上一次迭代的估计。每次迭代,函数都会检查要跟踪的像素是否丢失。丢失跟踪的标准是上面的矩阵是可逆的。(矩阵的行列式小于阈值:
)或者矩阵的最小特征值小于阈值(
)。当点跟踪坐标在图像坐标之外时,也会发生丢失跟踪。当给出vx_true_e作为use_initial_asseries的输入时,该算法首先将其计算为旧图像和新图像中,具有初始估计坐标的像素之间的差。tracking_status设置为零(丢失)的vx_keypoint_t结构的输入vx_array,被复制到新的vx_array。
客户端负责编辑vx_keypoint_t structs数组的输出vx_array,然后将其用作下一帧的vx_keypoint_t struct的输入vx_arrays。例如,为了提高效率,客户端可以移除tracking_status设置为零的vx_keypoint_t结构。
此函数仅更改vx_keypoint_t结构的x、y和tracking_status成员,其行为就好像它将剩余部分,从旧的跟踪vx_keypoint_t复制到新的图像vx_keypoint _t。
功能