Computer vision 正映射与逆映射
我必须做一个图像映射的gpu实现(opencl) 我似乎记得在什么地方读到过,前向映射更适合于并行实现,为什么Computer vision 正映射与逆映射,computer-vision,opencl,gpu,Computer Vision,Opencl,Gpu,我必须做一个图像映射的gpu实现(opencl) 我似乎记得在什么地方读到过,前向映射更适合于并行实现,为什么 还有谁有关于如何进行这些映射的示例代码(最好是在gpu上)?对我来说,并行实现的直观选择是反向映射,而不是正向映射 考虑多个源像素映射到单个目标像素的实例。在正向映射中,如果将每个源像素作为一个不同的工作项进行计算,则必须在目标像素上实现某种同步,以协调多个写入操作。在反向映射中,没有同步开销,因为保证每个像素只写入一个工作项 反向映射内核代码示例,利用OpenCL的image2d_t
还有谁有关于如何进行这些映射的示例代码(最好是在gpu上)?对我来说,并行实现的直观选择是反向映射,而不是正向映射 考虑多个源像素映射到单个目标像素的实例。在正向映射中,如果将每个源像素作为一个不同的工作项进行计算,则必须在目标像素上实现某种同步,以协调多个写入操作。在反向映射中,没有同步开销,因为保证每个像素只写入一个工作项 反向映射内核代码示例,利用OpenCL的image2d_t和sampler_t概念进行图像处理:
__kernel void warp(__read_only image2d_t srcImage,
__write_only image2d_t dstImage,
sample_r sampler)
{
int2 dstCoords = (int2){ get_global_id(0), get_global_id(1)};
int2 srcCoords = my_warp_func_inverse(dstCoords);
float4 srcPixel = read_imagef(srcImage, sampler, srcCoords);
write_imagef(dstImage, dstCoords, srcPixel);
}
当然,也有一些例外情况,向前映射可能更可取。例如,如果您有一个非常大的源映像和一个小的目标映像,则正向映射将允许您将源映像拆分为段,然后使用缓存在_private或_本地地址空间中的段数据将其拆分为工作项或工作组。如果事先不了解映射函数,反向映射可能需要访问源映像的任何部分,这可能会限制您访问全局内存