Python 卷积伪影
我使用直接卷积算法来计算此图像之间的卷积: 这个内核: 我使用中的实现来实现直接卷积 这将导致以下卷积,将所有设置(包括边界处理)保留为默认设置,即astropy.convolution.convolve(图像、内核): 这种卷积有一些令人费解的伪影。特别是,在距边缘约50像素的偏移处存在“方形”图案。在我看来,这是由于内核的范围;尽管内核的大小正式为249x249,但大多数信息显然包含在大约100像素的半径内——这意味着当内核应用于边缘时,我们可能会遇到麻烦 这就引出了我的问题:Python 卷积伪影,python,fft,convolution,astropy,Python,Fft,Convolution,Astropy,我使用直接卷积算法来计算此图像之间的卷积: 这个内核: 我使用中的实现来实现直接卷积 这将导致以下卷积,将所有设置(包括边界处理)保留为默认设置,即astropy.convolution.convolve(图像、内核): 这种卷积有一些令人费解的伪影。特别是,在距边缘约50像素的偏移处存在“方形”图案。在我看来,这是由于内核的范围;尽管内核的大小正式为249x249,但大多数信息显然包含在大约100像素的半径内——这意味着当内核应用于边缘时,我们可能会遇到麻烦 这就引出了我的问题: 这个假
是的,这是一个边缘效应问题,因为内核中有负值。一旦内核部分脱离边缘,内核的平均值就开始改变 一种解决方案是使用
boundary='fill'
和fill\u value=(图像的平均值)
或类似的方法。它可能不会完全移除这些工件,但应该减少它们
对于问题的FFT卷积部分,FFT卷积也会做同样的事情。但是,边缘填充对于FFT卷积是必要的,因为否则边界将包裹。不填充(例如,convalve\u fft(…,boundary='wrap')
)实际上会消除您的伪影,但它的方式可能会让您感到惊讶,因为它将平均图像右侧和左侧的像素
astropy的卷积
和卷积fft
在相同的边界
条件下都会做相同的事情,但是简单的fft卷积(即conv=ifft(fft(im)*fft(kernel))
相当于使用boundary='wrap'