c++ - 模糊高斯算法是什么样的?有实现的例子吗?

标签 c++ algorithm image-processing gaussian

我有一个位图图像上下文并且想让它看起来模糊。所以我能想到的最好的事情是高斯算法,但我不太清楚这种高斯模糊算法是什么样子的?你知道这方面的好教程或例子吗?语言并不重要,如果它是手工完成的,没有过多使用特定于语言的 API。 IE。在 cocoa 中,幸运的人不需要考虑它,他们只是使用已经存在的 Imagefilter。但是我在 cocoa-touch(objective-c,iPhone OS)中没有这样的东西。

最佳答案

这其实很简单。你有一个滤波器模式(也称为滤波器内核)——一个带系数的(小)矩形阵列——只需计算 convolution图像和图案。

for y = 1 to ImageHeight
  for x = 1 to ImageWidth
    newValue = 0
    for j = 1 to PatternHeight
      for i = 1 to PatternWidth
        newValue += OldImage[x-PatternWidth/2+i,y-PatternHeight/2+j] * Pattern[i,j]
    NewImage[x,y] = newValue

模式只是二维高斯曲线或您喜欢的任何其他滤波器模式。您必须注意图像的边缘,因为滤镜图案将部分位于图像之外。您可以假设这些像素是黑色的,或者使用图像的镜像版本,或者任何看起来合理的东西。

最后一点,使用傅里叶变换计算卷积有更快的方法,但这个简单的版本应该足以进行第一次测试。

关于c++ - 模糊高斯算法是什么样的?有实现的例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326811/

相关文章:

algorithm - 查找和为零的连续子数组的数量

c++ - 确保 C++(数字图像处理)程序和使用文件的处理程序之间的成功通信

c++ - "cannot open output file filename.exe: Permission denied"

c++ - 在 C++ 中将函数作为参数传递

c - 提高效率 "lighthouse"

c中的累积直方图均衡化

c++ - QNativeImage : Unable to attach to shared memory segment.

C++ 类规范,实现问题

c++ - 我有一段代码从 FILETIME 结构中获取持续时间。这是什么意思?

algorithm - 如何平衡 BK-Tree,是否有必要?