我最近使用高斯卷积来模糊图像。它工作得很好,实际上它工作得很好。但是,现在我试图扭转它,我的逆过滤器一直遇到问题。过滤器应该按照以下原则运行:
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
无论如何,我不太确定什么是错的,任何帮助都会很棒。
答案 0 :(得分:1)
模糊图像时,基本上可以移除高频成分。他们走了。没有反向过滤器。 如果您已经应用过"过滤器"拍摄每个像素并用平白替换它,你不会期望有一个反向滤镜,因为所有的细节(原始图像的大小除外)都会丢失。模糊是一回事,只有你失去了高频成分。