Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 为什么韦纳滤波器只减少噪音在我的情况下,它不是减少模糊量_Image Processing_Signal Processing - Fatal编程技术网

Image processing 为什么韦纳滤波器只减少噪音在我的情况下,它不是减少模糊量

Image processing 为什么韦纳滤波器只减少噪音在我的情况下,它不是减少模糊量,image-processing,signal-processing,Image Processing,Signal Processing,我正在用python实现weiner滤波,它应用于使用圆盘形状点扩散函数模糊的图像,我包括制作圆盘形状psf和weiner滤波器的代码 def weinerFiltering(kernel,K_const,image): #F(u,v) copy_img= np.copy(image) image_fft =np.fft.fft2(copy_img) #H(u,v) kernel_fft = np.fft.fft2(kernel,s=copy_img.

我正在用python实现weiner滤波,它应用于使用圆盘形状点扩散函数模糊的图像,我包括制作圆盘形状psf和weiner滤波器的代码


def weinerFiltering(kernel,K_const,image):
    #F(u,v)
    copy_img= np.copy(image)
    image_fft =np.fft.fft2(copy_img)
    #H(u,v)
    kernel_fft  = np.fft.fft2(kernel,s=copy_img.shape)
    #H_mag(u,v)
    kernel_fft_mag = np.abs(kernel_fft)
    #H*(u,v)
    kernel_conj = np.conj(kernel_fft)

    f = (kernel_conj)/(kernel_fft_mag**2 + K_const)
    return np.abs(np.fft.ifft2(image_fft*f))


def makeDiskShape(arr,radius,centrX,centrY):
    for i in range(centrX-radius,centrX+radius):
        for j in range(centrY-radius,centrY+radius):
            if(l2dist(centrX,centrY,i,j)<=radius):
                arr[i][j]=1
    return arr/np.sum(arr)



def weinerFiltering(内核、K_常数、图像):
#F(u,v)
复制\u img=np.复制(图像)
图像\u fft=np.fft.fft2(复制\u img)
#H(u,v)
kernel\u fft=np.fft.fft2(kernel,s=copy\u img.shape)
#H_mag(u,v)
kernel\u fft\u mag=np.abs(kernel\u fft)
#H*(u,v)
kernel\u conj=np.conj(kernel\u fft)
f=(核函数)/(核函数fft函数**2+K常数)
返回np.abs(np.fft.ifft2(image_fft*f))
def makeDiskShape(arr、半径、中心X、中心Y):
对于范围内的i(中心半径,中心+半径):
对于范围内的j(中心半径,中心+半径):

如果(l2dist(centrX,centrY,i,j)减少你的
K
值。你需要反复使用它,直到你得到好的结果。如果它太大,它不会过滤,如果它太小,你会得到很强的伪影

如果你知道噪声方差,你可以用它来估计正则化参数。在维纳滤波器中,常数
K
N/S
的简化,其中
N
是噪声功率,
S
是信号功率。这两个值都与频率有关。信号功率
S
可以通过待滤波图像的自相关函数的傅里叶变换来估计。噪声功率很难估计,但如果你有这样的估计(或者因为你合成了噪声图像而知道),然后您可以将该值插入公式中。请注意,这是噪声功率,而不是噪声的方差

下面的代码使用(我们称之为PyDIP的Python接口)来演示Wiener反褶积(免责声明:我是作者)

将PyDIP作为dip导入
image=dip.ImageRead('trui.ics');
kernel=dip.CreateGauss([3,3]).Pad(image.size())
平滑=倾斜卷积(图像,内核)
平滑=倾斜。高斯噪声(平滑,5.0)#方差=5.0
H=dip.Fourier变换(内核)
F=倾斜。Fourier变换(平滑)
S=倾角平方模量(F)#信号功率估计
N=倾斜图像(5.0*smooth.NumberOfPixels())#噪声功率(在所有频率下具有相同的值)
Hinv=倾角共轭(H)/(倾角平方模量(H)+N/S)
out=dip.fourier变换(F*Hinv,{“逆”,“实”})
平滑的
图像如下所示:

通过对上面的图像进行去卷积得到的
out
图像如下所示:

不要期望完美的结果。正则化项会阻碍完美的逆滤波,因为这种滤波会强烈增强噪声,从而淹没信号并产生完全无用的输出。维纳滤波器在消除卷积和抑制噪声之间找到了一个中间地带


的DIPlib文档解释了一些涉及的方程。

yaa这就是我现在面临的问题,但如何才能得到K值的良好近似值,因为它是噪声功率谱和地面真值图像的比率(即| F(u,v)|),因为现在我有原始图片,所以如果我这样做,得到两个功率谱的比率(不假设公式中的常数),我仍然在图像中得到很强的伪影,,,为什么会这样?@Bunny:原始图片没有告诉你噪声级是多少。你需要猜一下。耶,我明白。实际上我在玩图像,我有一个没有任何噪声的原始图像。我用点扩散函数将其卷积以模糊它,所以我得到了真实的H(u,v)我加上高斯噪声,所以现在我有了N(u,v)@Bunny:请看我的编辑,了解如何正确计算已知的噪声功率。在方程中使用实际噪声是没有用的,你只需要它的统计数据。这个家伙的名字是诺伯特·维纳,而不是韦纳…@pigger谢谢你提供有用的信息