我正在尝试为我在Cuda的项目添加噪点和模糊功能,经过相当多的研究后,我遇到了一些绊脚石,我已经阅读了高斯模糊矩阵,但我仍然有无法获得能够模糊图像某些部分的工作代码,我设法得到一种形式的噪声来显示。 如果有人可以在解释如何实现高斯或简单模糊方法或甚至提供一些实现模糊的代码方面给予一些帮助。 非常感谢!!
答案 0 :(得分:2)
Gaussian blur是一个可分离的过滤器,因此您可以先将1D内核应用于ROI中的所有行,然后应用于模糊行的列。
CUDA的棘手部分是这是一个邻域操作,所以通常你需要让每个块重叠一半的内核大小,以便将所需的邻域像素放入共享内存。
答案 1 :(得分:1)
仅供参考,这是两个单独的问题,应在本网站单独询问。
关于模糊 - 对于大模糊内核(强模糊),最好的方法是在图像和高斯噪声内核图像上使用FFT,然后使用产生的复数乘法和逆FFT将结果相乘。您必须自己实现FFT-Shift功能,如果使用彩色图像,则必须将图像分割为每个通道的单独缓冲区。
对于小模糊内核(gentile blur),最简单的方法是对结果图像中的每个像素求和,在源图像中加上附近的像素(使用高斯权重函数)。
关于噪声 - 测试最简单的方法是将预先生成的伪随机生成器的结果图像从均匀分布的随机数转换为正态分布随机数后加载到CUDA中。 E.g. this question.
随机图像中的正确尺寸区域应乘以噪声西格玛,并添加到源图像以接收结果。
上次我检查了CUDA的no随机缓冲区生成解决方案,这是几年前的事。
更新:CUDA现在有cuRand所以您应该能够生成随机数而不是使用预生成的随机缓冲区。