Image processing 实时Cuda图像处理建议

Image processing 实时Cuda图像处理建议,image-processing,opencv,matrix,cuda,gpu,Image Processing,Opencv,Matrix,Cuda,Gpu,我正在尝试为一个系统实现一个算法,该系统的摄像机速度为1000fps,我需要得到所有图像中每个像素的值,并对N个图像中的像素[I][j]的演化进行不同的计算,对于图像中的所有像素。我有一个(unsignedchar*ptr),我想把它们传输到GPU并开始实现算法。但我不确定什么是实时处理的最佳选择。 我的系统: CPU英特尔至强x5660 2.8Ghz(2个处理器) GPU NVIDIA Quadro 5000 我有以下问题: 我是否需要向CUDA添加任何图像处理库?如果是,你有什么建议 我可以

我正在尝试为一个系统实现一个算法,该系统的摄像机速度为1000fps,我需要得到所有图像中每个像素的值,并对N个图像中的像素[I][j]的演化进行不同的计算,对于图像中的所有像素。我有一个(unsignedchar*ptr),我想把它们传输到GPU并开始实现算法。但我不确定什么是实时处理的最佳选择。 我的系统: CPU英特尔至强x5660 2.8Ghz(2个处理器) GPU NVIDIA Quadro 5000

我有以下问题:

  • 我是否需要向CUDA添加任何图像处理库?如果是,你有什么建议

  • 我可以为像素[I,j]创建一个矩阵,其中包含图像大小中每个像素的图像[1:n]值吗?例如,对于大小为200x200的1000幅图像,我最终会得到每个40000个矩阵 一个像素包含1000个值?CUDA是否给了我一些像OpenCV这样的选项来创建一个矩阵?还是向量


  • 听起来您将有40000个独立的计算,其中每个计算仅在一个(时间)像素内工作。如果是这样,这对GPU来说应该是一个很好的任务。你的352核费米GPU应该能够击败你的12个超线程至强核心

    您计划运行的算法是否为通用操作?听起来可能不是这样,在这种情况下,您可能需要编写自己的内核

    是的,在CUDA中可以有任何类型的元素数组


    这是一种“面向流”的方法,这对于GPU实现是有益的,因为与PCIe总线上的传输相比,它最大化了计算数量。这也可能会带来困难,因为如果您想按特定顺序(例如从最旧到最新)处理给定像素的1000个值,您可能希望避免连续移动内存中的所有帧(为最新帧腾出空间)。这将使像素值的寻址稍微复杂化,但避免帧移动的最佳方法可能是在每次添加新帧时用最新帧覆盖最旧帧。这样,你会得到一个“帧堆栈”,它的顺序相当好,但是在它的某个地方新旧帧之间有一个不连续性。

    听起来你会有40000个独立的计算,每个计算只在一个(时间)像素内工作。如果是这样,这对GPU来说应该是一个很好的任务。你的352核费米GPU应该能够击败你的12个超线程至强核心

    您计划运行的算法是否为通用操作?听起来可能不是这样,在这种情况下,您可能需要编写自己的内核

    是的,在CUDA中可以有任何类型的元素数组

    这是一种“面向流”的方法,这对于GPU实现是有益的,因为与PCIe总线上的传输相比,它最大化了计算数量。这也可能会带来困难,因为如果您想按特定顺序(例如从最旧到最新)处理给定像素的1000个值,您可能希望避免连续移动内存中的所有帧(为最新帧腾出空间)。这将使像素值的寻址稍微复杂化,但避免帧移动的最佳方法可能是在每次添加新帧时用最新帧覆盖最旧帧。这样,你会得到一个“框架堆栈”,它的顺序相当好,但是在它的某个地方新旧框架之间有一个不连续性

    1-我是否需要向CUDA添加任何图像处理库

    苹果和桔子。每个都有不同的目的。像OpenCV这样的图像处理库提供的不仅仅是简单的加速矩阵计算。也许您不需要OpenCV来处理这个项目,因为您似乎更愿意直接使用CUDA。但您仍然可以使用OpenCV,以便从磁盘加载和写入不同的图像格式

    2-CUDA是否给了我一些像OpenCV这样的选项来创建一个矩阵

    当然。不久前,我编写了一个简单的(教育性)应用程序,它使用OpenCV从磁盘加载图像,并使用CUDA将其转换为灰度版本。该项目名为。我还没有用CUDA4.x测试过它,但是代码展示了如何在结合OpenCV和CUDA时实现基本功能

    1-我是否需要向CUDA添加任何图像处理库

    苹果和桔子。每个都有不同的目的。像OpenCV这样的图像处理库提供的不仅仅是简单的加速矩阵计算。也许您不需要OpenCV来处理这个项目,因为您似乎更愿意直接使用CUDA。但您仍然可以使用OpenCV,以便从磁盘加载和写入不同的图像格式

    2-CUDA是否给了我一些像OpenCV这样的选项来创建一个矩阵

    当然。不久前,我编写了一个简单的(教育性)应用程序,它使用OpenCV从磁盘加载图像,并使用CUDA将其转换为灰度版本。该项目名为。我还没有用CUDA4.x测试过它,但是代码展示了如何在结合OpenCV和CUDA时实现基本功能

    我是否需要将任何图像处理库添加到CUDA??? 如果是,你有什么建议

    披露:我公司开发和销售CUVILib

    GPU加速成像库也提供了通用功能,但只有很少的选项。CUVILib是其中一个选项,它提供以下功能,非常适合您的特定需求:

  • CuviImage对象,将图像数据和图像保存为二维矩阵
  • 您可以编写自己的GPU函数,并将CuviImage用作2D GPU矩阵
  • CUVILib已经提供了丰富的成像功能,如颜色操作、图像统计、特征检测、运动估计、FFT、图像变换等