gpt4 book ai didi

c++ - CUDA、NPP 滤波器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:13 26 4
gpt4 key购买 nike

CUDA NPP 库支持使用 nppiFilter_8u_C1R 命令过滤图像,但不断出现错误。我可以毫无问题地启动并运行 boxFilterNPP 示例代码。

eStatusNPP = nppiFilterBox_8u_C1R(oDeviceSrc.data(), oDeviceSrc.pitch(), 
oDeviceDst.data(), oDeviceDst.pitch(),
oSizeROI, oMaskSize, oAnchor);

但如果我将其改为使用 nppiFilter_8u_C1R,eStatusNPP 将返回错误 -24 (NPP_TEXTURE_BIND_ERROR)。下面的代码是我对原始 boxFilterNPP 示例所做的更改。

NppiSize oMaskSize = {5,5};
npp::ImageCPU_32s_C1 hostKernel(5,5);

for(int x = 0 ; x < 5; x++){
for(int y = 0 ; y < 5; y++){
hostKernel.pixels(x,y)[0].x = 1;
}
}

npp::ImageNPP_32s_C1 pKernel(hostKernel);

Npp32s nDivisor = 1;

eStatusNPP = nppiFilter_8u_C1R(oDeviceSrc.data(), oDeviceSrc.pitch(),
oDeviceDst.data(), oDeviceDst.pitch(),
oSizeROI,
pKernel.data(),
oMaskSize, oAnchor,
nDivisor);

这已经在 CUDA 4.2 和 5.0 上尝试过,结果相同。

当 oMaskSize = {1,1} 时,代码以预期结果运行

最佳答案

过滤器应用向上和向左延伸的掩码,遵循两个函数之间的卷积反转第二个函数的方向的数学约定。

盒子过滤器掩码向下和向右延伸,这可能更直观。

在任何情况下,问题是由于更改代码中的输入图像必须以有效的 SOURCE[-4, -4) 进行采样以计算 DESTINATION[0, 0] .由于输入图像是通过纹理采样器访问的,因此将源图像指针偏移量绑定(bind) (-4, -4) 会导致您看到的纹理绑定(bind)错误。

解决方法:此问题最简单的解决方法是将 anchor 设置为 (4, 4),这会有效地将蒙版向下和向右移动。你仍然需要知道你想要反转内核数组中的权重(即 K[-4, -4] -> K[0, 0], K[ 0, 0] -> K[-4, -4] 等)。

关于c++ - CUDA、NPP 滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12778463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com