OpenVX一些算法问题
OpenVX一些算法问题
双边滤波器
该函数将双边滤波应用于输入张量。
双边滤波器是一种非线性、边缘保持和降噪的平滑滤波器。输入和输出是具有相同维度和数据类型的张量。张量维度分为空间维度和非空间维度。空间维度是笛卡尔等距距离。他们是最后2名。非空间维度是第一个,我们称之为辐射测量。每个空间位置处的辐射测量值被来自附近像素的辐射测量数值的加权平均值代替。该权重可以基于高斯分布。至关重要的是,权重不仅取决于空间维度的欧几里得距离,还取决于辐射差异(例如,距离差异,如颜色强度、深度距离等)。这通过系统地循环通过每个像素并相应地调整相邻像素的权重来保持尖锐的边缘。方程如下:
:: latexmath:[h(x,\tau)=\frac{1}{W_{p}}\sum f(y,t)g_{1}(y-x)g_{2}(t-\tau)dydt]
:: latexmath:[g_{1}(y)=\frac{1}{\sqrt{2\pi\sigma_{y}}}\exp\left(-\frac{1}{2}\left(\frac{y^{2}}{\sigma_{y}^{2}}\right)\right)]
:: latexmath:[g_{2}(t)=\frac{1}{\sqrt{2\pi\sigma_{t}}}\exp\left(-\frac{1}{2}\left(\frac{t^{2}}{\sigma_{t}^{2}}\right)\right)]
:: latexmath:[W_{p}=\sum g_{1}(y-x)g_{2}(t-\tau)dydt]
其中x、y在空间欧氏空间中。t、 τ是辐射空间中的矢量。可以是颜色、深度或移动。Wp是归一化因子。在三维的情况下,vx_tensor的第一个维度。可以是1号或2号。或者在张量为2维的情况下,张量中的值。
功能
vx双边过滤器节点
vxu双边滤波器
3.4.1. 功能
vx双边过滤器节点
[图表]该函数将双边滤波应用于输入张量。
vx_node vxBilateralFilterNode(
vx_graph graph,
vx_tensor src,
vx_int32 diameter,
vx_float32 sigmaSpace,
vx_float32 sigmaValues,
vx_tensor dst);
参数
[in]graph-对图形的引用。
[in]src-输入数据,一个vx_tensor。最大尺寸为3,最小尺寸为2。张量的类型为VX_type_UINT8或VX_type_INT16。尺寸为[辐射、宽度、高度]或[宽度、高度】。请参见vxCreateTensor和vxCreateVirtualTensor。
[in]直径-过滤过程中使用的每个像素邻域。直径的值必须是奇数。大于3,小于10。
[in]sigmaValues-在辐射测量空间中过滤西格玛。支持的值大于0且小于或等于20。
[in]sigmaSpace-在空间空间中过滤西格玛。支持的值大于0且小于或等于20。
[out]dst-输出数据,类型为vx_type_UINT8或vx_type_INT16的vx_tensor。必须与输入的类型和大小相同。
笔记
支持边界模式VX_NODE_border值VX_border_RELICATE和VX_border_CONSTANT。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxu双边滤波器
[立即]该函数将双边滤波应用于输入张量。
vx_status vxuBilateralFilter(
vx_context context,
vx_tensor src,
vx_int32 diameter,
vx_float32 sigmaSpace,
vx_float32 sigmaValues,
vx_tensor dst);
参数
[in]context-对整体上下文的引用。
[in]src-输入数据,一个vx_tensor。最大尺寸为3,最小尺寸为2。张量的类型为VX_type_UINT8或VX_type_INT16。尺寸为[辐射,宽度,高度]或[宽度,高度】
[in]直径-过滤过程中使用的每个像素邻域。直径的值必须是奇数。大于3,小于10。
[in]sigmaValues-在辐射测量空间中过滤西格玛。支持的值大于0且小于或等于20。
[in]sigmaSpace-在空间空间中过滤西格玛。支持的值大于0且小于或等于20。
[out]dst-输出数据,类型为vx_type_UINT8或vx_type_INT16的vx_tensor。必须与输入的类型和大小相同。
笔记
支持边界模式VX_NODE_border值VX_border_RELICATE和VX_border_CONSTANT。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.5. 按位和
在两个VX_DF_IMAGE_U8或VX_DF_IMAGE_U1映像之间执行逐位AND运算。输出图像的尺寸应与输入图像的尺寸相同。
对于输入图像中每个像素中的每个位,通过以下公式计算逐位AND:
:: [eq]#out(x,y) = in~1~(x,y) {land} in~2~(x,y)#
或用 C 代码表示:
out(x,y) = in_1(x,y) & in_2(x,y)
功能
3.5.1. 函数
vxAnd节点
[图表]创建按位 AND 节点。
vx_node vxAndNode(
vx_graph graph,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]graph-对图形的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxuAnd
[立即]计算两个图像之间的逐位和。
vx_status vxuAnd(
vx_context context,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]context-对整体上下文的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.6. 按位独占或
在两个VX_DF_IMAGE_U8或VX_DF_IMAGE_U1映像之间执行逐位异或(XOR)运算。输出图像的尺寸应与输入图像的尺寸相同。
对于输入图像中每个像素中的每个比特,通过以下方式计算逐比特XOR:
:: [eq]#out(x,y) = in~1~(x,y) {oplus} in~2~(x,y)#
或用 C 代码表示:
out(x,y) = in_1(x,y) ^ in_2(x,y)
功能
3.6.1. 函数
vxXor节点
[图表]创建按位 EXCLUSIVE OR 节点。
vx_node vxXorNode(
vx_graph graph,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]graph-对图形的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxuXor
[立即]计算两个图像之间的逐位互斥或。
vx_status vxuXor(
vx_context context,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]context-对整体上下文的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.7. 按位 INCLUSIVE 或
在两个VX_DF_IMAGE_U8或VX_DF_IMAGE_U1映像之间执行逐位包含或运算。输出图像的尺寸应与输入图像的尺寸相同。
对于输入图像中每个像素中的每个位,通过以下公式计算逐位包含或:
:: [eq]#out(x,y) = in~1~(x,y) {lor} in~2~(x,y)#
或用 C 代码表示:
out(x,y) = in_1(x,y) | in_2(x,y)
功能
3.7.1. 函数
vxOr节点
[图表]创建按位 INCLUSIVE OR 节点。
vx_node vxOrNode(
vx_graph graph,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]graph-对图形的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxuOr
[立即]计算两个图像之间的按位(包括)或按位(包含)。
vx_status vxuOr(
vx_context context,
vx_image in1,
vx_image in2,
vx_image out);
参数
[in]context-对整体上下文的引用。
[in]in1-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[in]in2-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[out]out-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.8. 按位取反
对VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像执行逐位NOT操作。输出图像的尺寸应与输入图像的尺寸相同。
对于输入图像中每个像素中的每个位,逐位NOT由以下公式计算:
:: latexmath:[out(x,y) = \overline{in(x,y)}]
或用 C 代码表示:
out(x,y) = ~in_1(x,y)
功能
3.8.1. 函数
vxNot节点
[图表]创建按位 NOT 节点。
vx_node vxNotNode(
vx_graph graph,
vx_image input,
vx_image output);
参数
[in]graph-对图形的引用。
[in]输入-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像。
[out]输出-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxuNot
[立即]计算图像的按位非。
vx_status vxuNot(
vx_context context,
vx_image input,
vx_image output);
参数
[in]context-对整体上下文的引用。
[in]输入-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输入图像
[out]输出-VX_DF_IMAGE_U8或VX_DF_IMAGE_U1输出图像。输出图像必须与输入图像具有相同的尺寸和格式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.9. 盒式过滤器
在输入图像的窗口上计算长方体过滤器。输出图像的尺寸应与输入图像的尺寸相同。
此滤波器使用以下卷积矩阵:
功能
3.9.1. 函数
vxBox3x3节点
[图表]创建框筛选器节点。
vx_node vxBox3x3Node(
vx_graph graph,
vx_image input,
vx_image output);
参数
[in]graph-对图形的引用。
[in]input—VX_DF_image_U8格式的输入图像。
[out]output-VX_DF_image_U8格式的输出图像。输出图像的尺寸必须与输入图像的尺寸相同。
返回:vx_node。
返回值
vx_node—节点参考。应使用vxGetStatus检查阻止成功创建的任何可能错误
vxuBox3x3
[立即]通过3x3窗口计算图像上的框过滤器。
vx_status vxuBox3x3(
vx_context context,
vx_image input,
vx_image output);
参数
[in]context-对整体上下文的引用。
[in]input—VX_DF_image_U8格式的输入图像。
[out]output-VX_DF_image_U8格式的输出图像。输出图像的尺寸必须与输入图像的尺寸相同。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-成功
*-出现错误。请参见vx_status_e。
3.10. Canny边缘检测器
提供Canny边缘检测器内核。输出图像的尺寸应与输入图像的尺寸相同。
该功能实现了类似于[Canny1986]中描述的边缘检测算法。该算法的主要组成部分是:
使用抗噪声算子(Sobel)进行梯度幅度和方向计算。
使用梯度方向信息对梯度幅度进行非最大抑制。
使用滞后阈值来跟踪修改的梯度图像中的边缘,以产生二进制结果。
这些步骤中的每一个的细节如下所述。
梯度计算:从概念上讲,输入图像与Gradient_size参数指示的大小的垂直和水平Sobel核进行卷积。用于梯度计算的Sobel核应如下所示。然后使用所得到的两个方向梯度图像(dx和dy)来计算梯度幅度图像和梯度方向图像。用于计算梯度幅度的范数由norm_type参数表示,因此数量可能是VX_norm_L1的用于计算梯度幅度的范数由norm_type参数表示,因此,可能为VX_norm_L1的幅度|dx|+|dy|或VX_NORM_L2的
。梯度方向图像被量化为 4 个值:0、45、90 和 135度。
对于渐变尺寸 3:
对于渐变尺寸 5:
:: [eq]#*sobel*~y~ = transpose(*sobel*~x~)#
对于渐变尺寸 7:
:: [eq]#*sobel*~y~ = transpose(*sobel*~x~)#
非最大抑制:然后应用它,使像素为 当且仅当其大小更大时,仍保留为潜在边缘像素 大于或等于垂直于其边缘方向上的像素 取向。 例如,如果像素的方向为 0 度,则仅在以下情况下保留它 它的梯度大小大于 90 和 270 处的像素 度到它。 如果通过此条件抑制像素,则该像素不得显示为边缘 pixel,即其值在最终输出中必须为 0。
边缘跟踪:输出中的最终边缘像素通过 双阈值滞后程序。 所有幅度高于高阈值的保留像素都标记为 最终输出图像中的已知边缘像素(值为非零)。 所有大小小于或等于低阈值的像素必须 在最终输出中不标记为边缘像素。 对于阈值之间的像素,边被跟踪并标记为 输出中的边缘(非零)。 这可以通过从已知的边缘像素开始并全部移动来完成 递归八个方向,直到梯度大小小于 或 等于低阈值。
警告:上述中间结果仅是概念性的;所以 例如,实现可能实际上没有构造梯度 图像和非最大抑制图像。 只需计算最终的二进制输出图像,使其与 如上所述构造的最终图像的结果。
枚举
功能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-05-23 LLVM优化基础概述
2022-05-23 集成电路技术市场产业链
2021-05-23 TVM量化小结手册
2021-05-23 TVM图优化与算子融合
2021-05-23 桥接PyTorch和TVM
2020-05-23 ADAS虚拟车道边界生成
2020-05-23 3D惯导Lidar SLAM