用于图像处理的GPU编程

sor*_*h-r 4 opengl image-processing opencl gpu-programming

我正在开展一个旨在控制双极人形机器人的项目.不幸的是,我们拥有非常有限的硬件资源(RB110板和它的迷你PCI图形卡).我打算将图像处理任务从CPU移植到图形卡处理器,但之前从未做过......我建议使用OpenCV,但似乎不可能,因为我们的图形卡处理器(Volari Z9s)不受框架支持.然后我在Linux Journal上发现了一篇有趣的帖子.作者使用OpenGL处理​​从v4l设备检索到的帧.

我对硬件API和OpenGL/OpenCV之间的关系有点困惑.为了利用GPU,硬件是否需要通过图形编程框架(OpenGL/OpenCV)来解决?我在哪里可以找到这样的API?

我搜索了很多关于我的硬件的信息,不幸的是供应商(XGI技术)似乎已经灭绝......

jos*_*efx 5

为了利用GPU,硬件是否需要通过图形编程框架(OpenGL/OpenCV)来解决?我在哪里可以找到这样的API?

OpenCL和OpenGL都由GPU驱动程序转换为硬件指令,因此您需要一个支持这些框架的操作系统驱动程序.大多数GPU驱动程序都支持某些版本的OpenGL,因此应该可以使用.

OpenGL标准由Khronos Group维护,您可以在nehe找到一些教程.

OpenGL的工作原理

OpenGL接受三角形作为输入,并根据绘制时的状态绘制它们.大多数OpenGL函数都可以通过操作此状态来更改执行的操作.图像处理可以通过将输入图像加载为纹理并在纹理处于活动状态时绘制多个顶点来完成,从而生成新的图像(或更通用的新2D数据网格).

从版本> 2(或使用正确的ARB扩展),可以使用称为顶点和片段着色器的GLSL程序控制对图像执行的操作(有更多着色器,但这些是最早的着色器).每个顶点将调用一次顶点着色器,其结果将被内插并转发到片段着色器.每次将新片段(像素)写入结果时,都会调用片段着色器.

现在这都是关于读取和写入图像,如何使用它进行对象检测?使用"顶点"跨越整个视口上的输入纹理.您可以编写一个片段着色器来计算灰度图像/渐变图像,然后检查每个像素的纹理,而不是计算rgb颜色并将其存储在结果中,如果像素位于具有特定大小的循环的中心,则为行的一部分或者只是具有相对较高的梯度(与其周围(良好的特征)相比)或者真正的其他方法,你可以找到一个很好的并行算法.(我自己没有这样做)

最终结果必须回读到cpu(有时你可以使用着色器在执行此操作之前缩小数据).OpenCL给它带来了更少的图形感觉,并提供了更多的自由,但支持较少.