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