【问题标题】:How does a blur gauss algorithm look like? Are there examples of implementation?模糊高斯算法是什么样子的?有实施的例子吗?
【发布时间】:2010-11-22 13:05:44
【问题描述】:

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

【问题讨论】:

    标签: c++ algorithm image-processing gaussian


    【解决方案1】:

    这其实很简单。您有一个过滤器模式(也称为过滤器内核) - 一个带有系数的(小)矩形阵列 - 并且只需计算图像和模式的 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
    

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

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

    【讨论】:

    • 我正在关注这个示例,但我通过以下方式访问我的像素图像:pImg[i*iWidth+j] = currentPixel 其中ij 是来自嵌套for 循环的变量。那么我将如何使用读取像素的方式更改newValue += OldImage[x-PatternWidth/2+i, y-PatternHeight/2+j] * Pattern[i,j]NewImage[x,y] = newValue 行?
    【解决方案2】:

    图像处理的最佳位置是THIS。您可以在那里获得 matlab 代码。
    this Wolfram demo 应该可以消除对手工操作的任何疑虑。

    如果你不想学太多东西,请学习PIL(Python Imaging Library)

    Here”正是您所需要的。

    从以上链接复制的代码:

    import ImageFilter
    
    def filterBlur(im):
    
        im1 = im.filter(ImageFilter.BLUR)
    
        im1.save("BLUR" + ext)
    
    filterBlur(im1)
    

    【讨论】:

    • PIL 真的可以在 iPhone 上运行吗? (我没有 iPhone,我只是好奇)
    • 我不知道。我也没有 iPhone。 :-D
    • iPhone 是objective-c。我不确定那个 python 的东西,但我会说不,它不会在那里运行。如果我错了,请纠正我。
    【解决方案3】:

    Wikipedia article 有一个样本矩阵以及一些关于该主题的标准信息。

    【讨论】:

    • 有没有办法把这个7*7的矩阵移植到cocoa-touch CALayer变换矩阵的4*4矩阵中?
    • 没有。变换矩阵用于进行坐标变换(平移、旋转等)。它与卷积矩阵(用于将像素值混合在一起)无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多