高斯模糊的逆滤波器

时间:2015-08-04 13:13:53

标签: python image-processing fft ifft

我最近使用高斯卷积来模糊图像。它工作得很好,实际上它工作得很好。但是,现在我试图扭转它,我的逆过滤器一直遇到问题。过滤器应该按照以下原则运行:

G(x,y)/ H(x,y)= F(x,y)其中G(x,y)是模糊图像的傅里叶变换,H(x,y)是傅里叶变换模糊函数和F(x,y)是原始图像的傅里叶变换。

目前,生成的图像看起来与原始图像完全相同。我的算法如下:

from PIL import Image
import math
import cmath
import numpy as np

def reverseGaussianBlur(picture, r):
    rs = int(math.ceil(r * 2.57)                  # Calculate significant radius
    w, h = picture.size
    pixels = list(picture.getdata())              # Image's pixels as list
    fft_pixels = runFourier(pixels, False)        # Run FFT
    temp_picture = []
    for u in range(0, h):
        for v in range(0, w):
            val = [0] * 3
            wsum = 0
            for iy in range(u - rs, u + rs + 1):
                y = min(h - 1, max(0, iy))
                for ix in range(v - rs, v + rs + 1):
                    x = min(w - 1, max(0, ix))
                    weight = (2 * math.pi) ** 0.5 * cmath.exp(-r * r * ((ix - v) * 
                        (ix - v) + (iy - u) * (iy - u)) / 2)
                    if (weight.real > 1e-5):
                        val = [n + p / weight for n, p in zip(val, fft_pixels[y * w + x])]
                    wsum += weight
            temp_picture.append(tuple([v * wsum for v in val]))
    return_picture = [tuple(int(round(p)) for p in pixel) for pixel in 
        runFourier(temp_picture, True)]           # Run Inverse FFT
    return return_picture

无论如何,我不太确定什么是错的,任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

模糊图像时,基本上可以移除高频成分。他们走了。没有反向过滤器。 如果您已经应用过"过滤器"拍摄每个像素并用平白替换它,你不会期望有一个反向滤镜,因为所有的细节(原始图像的大小除外)都会丢失。模糊是一回事,只有你失去了高频成分。