gpt4 book ai didi

image-processing - 空间卷积与频率卷积图像的逆滤波器

转载 作者:行者123 更新时间:2023-12-04 15:47:32 24 4
gpt4 key购买 nike

我的图像处理类被分配了一个图像恢复项目。我目前正在研究逆滤波器。图像 -> 降级 -> 逆滤波器 -> 恢复图像。我正在使用一个简单的 5x5 盒式过滤器来进行降级。

如果我在空间域中对图像进行卷积,移动到频域,然后使用内核的 fft 对卷积图像进行逆滤波,我会变得一团糟。如果我在频域中对图像进行卷积,然后对该图像进行逆滤波,我会得到一个很好的图像。

频域和空间域卷积应该是相同的。我唯一的想法是我的内核做错了什么?我正在使用 5x5 盒式过滤器。空间卷积将最终结果除以 np.sum(box)。我尝试通过以下方式规范化盒子:

box = np.ones( 25 ).reshape( 5,5 ) / 25.0

但得到相同的垃圾逆过滤图像结果。

我还注意到频率卷积图像(来自下面代码的“g_freq.png”)发生了偏移,可能是由于 FFT 用图像的底部/右侧填充了顶部和左侧。这会导致问题吗?

空间卷积:
spatial convolition

频率卷积:注意顶部/左侧的填充。
frequency convolution

创建问题的最简单的代码如下。 100% numpy/scipy/matplotlib。
import sys
import matplotlib
matplotlib.use( 'Agg' )
import matplotlib.pyplot as plt
import numpy as np
import scipy
from scipy import ndimage

def save_image( data, filename ) :
print "saving",filename
plt.cla()
fig = plt.figure()
ax = fig.add_subplot( 111 )
ax.imshow( data, interpolation="nearest", cmap=matplotlib.cm.gray )
fig.savefig( filename )

f = scipy.misc.lena()
save_image( f, "scipylena.png" )

# create a simple box filter
kernel = np.ones( 25 ).reshape( 5, 5 )
kernel_padded = np.zeros_like(f,dtype="float")
# put kernel into upper left
kernel_padded[:5,:5] = kernel

# FFT kernel, save as image
K = np.fft.fftshift( np.fft.fft2( kernel_padded ) )
save_image( np.abs(K), "K.png" )


# degrade image via spatial convolution
g = ndimage.convolve( f, kernel )
if np.sum(kernel) != 0 :
g /= np.sum(kernel)
# save spatial image
save_image( g, "g_spatial.png" )

# take convolved image into frequency domain
G = np.fft.fftshift( np.fft.fft2( g ) )

# inverse filter the spatially convolved image
F_HAT = G / K

# back to spatial, save the reconstructed image
a = np.nan_to_num( F_HAT )
f_hat = np.fft.ifft2( np.fft.ifftshift( F_HAT ) )
save_image( np.abs( f_hat ), "f_hat_spatial.png" )

#
# now the same path but entirely in frequency domain
#

# create a frequency domain convolved image
F = np.fft.fftshift( np.fft.fft2( f ) )
G2 = F * K

# back to spatial, save frequency convolved image
g2 = np.fft.ifft2( np.fft.ifftshift( G2 ) )
save_image( np.abs(g2), "g_freq.png" )

# inverse filter the frequency convolved image
F_HAT2 = G2 / K
a = np.nan_to_num( F_HAT2 )
f_hat2 = np.fft.ifft2( np.fft.ifftshift( a ) )
save_image( np.abs( f_hat2 ), "f_hat_freq.png" )

我的“f_hat_frequency”
my f_hat_frequency

我的“f_hat_spatial”:-(
my f_hat_spatial

非常感谢您的帮助。

[编辑] 我通过 Enthought 的免费 32 位版本使用 Numpy 1.6.0 在 Mac OSX 10.6.8 上运行。 ( http://www.enthought.com/products/epd_free.php ) Python 2.7.2 |EPD_free 7.1-1(32 位)

编辑 2011 年 10 月 31 日。
我认为我想要做的事情有着比我理解的更深的数学根源。
http://www.owlnet.rice.edu/~elec539/Projects99/BACH/proj2/inverse.html有点帮助。在反向过滤器之前将以下内容添加到我的代码中:
H_HAT = np.copy(K)
np.putmask( H_HAT, H_HAT>0.0001, 0.0001 )

给了我一个图像,但有很多振铃(可能是因为我的盒式滤波器;需要切换到高斯)。此外,频率滤波图像的偏移很可能会导致问题。我的教授查看了我的代码,找不到问题。她的建议是继续使用频率滤波图像而不是空间滤波图像。

我在 dsp.stackexchange.com 上有一个类似的问题: https://dsp.stackexchange.com/questions/538/using-the-inverse-filter-to-correct-a-spatially-convolved-image

最佳答案

问题很明显是FF_HAT2不相同。您需要调用nan_to_num的事实清楚地表明乘法和除法之间出了问题 K .一个可能的原因是整数溢出。尝试转换 f加载后转换为浮点类型。

关于image-processing - 空间卷积与频率卷积图像的逆滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com