高斯模糊的逆滤波器
Inverse Filter for Gaussian Blur
我最近使用高斯卷积来模糊图像。它运作良好,事实上它运作良好。但是,现在我正试图将其反转,而我的逆向过滤器使 运行ning 陷入问题。过滤器应该 运行 遵循以下原则:
G(x, y) / H(x, y) = F(x, y) 其中G(x, y)是模糊图像的傅里叶变换,H(x, y)是傅里叶F(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
无论如何,我不太确定哪里出了问题,如果有任何帮助就更好了。
模糊图像时,基本上是在去除高频成分。他们走了。没有反向过滤器。
如果你应用了一个 "filter" 来获取每个像素并将其替换为纯白色,你不会期望有一个反向过滤器,因为所有细节(原始图像的大小除外)都是丢失。模糊也是一样,只是你失去了高频成分。
我最近使用高斯卷积来模糊图像。它运作良好,事实上它运作良好。但是,现在我正试图将其反转,而我的逆向过滤器使 运行ning 陷入问题。过滤器应该 运行 遵循以下原则:
G(x, y) / H(x, y) = F(x, y) 其中G(x, y)是模糊图像的傅里叶变换,H(x, y)是傅里叶F(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
无论如何,我不太确定哪里出了问题,如果有任何帮助就更好了。
模糊图像时,基本上是在去除高频成分。他们走了。没有反向过滤器。 如果你应用了一个 "filter" 来获取每个像素并将其替换为纯白色,你不会期望有一个反向过滤器,因为所有细节(原始图像的大小除外)都是丢失。模糊也是一样,只是你失去了高频成分。