Image processing 使用FFT进行二维卷积时如何变换滤波器?
我想用FFT来加速二维卷积。过滤器为15 x 15,图像为300 x 300。该滤波器的大小是不同的图像,所以我不能做点积后FFT。那么,如何在进行FFT之前变换滤波器,使其大小与图像匹配?我使用Image processing 使用FFT进行二维卷积时如何变换滤波器?,image-processing,fft,convolution,Image Processing,Fft,Convolution,我想用FFT来加速二维卷积。过滤器为15 x 15,图像为300 x 300。该滤波器的大小是不同的图像,所以我不能做点积后FFT。那么,如何在进行FFT之前变换滤波器,使其大小与图像匹配?我使用N是内核大小的约定 知道卷积没有(数学上)在边上定义(N//2在每个维度的每一端),您将在每个轴上丢失总计N像素 您需要为卷积留出空间:用足够的“中性值”填充图像,以便边缘情况(插入的垃圾值)消失。 这将涉及到使您的图像成为307x307px图像(具有合适的填充值,请参见下一段),在卷积后将返回300x
N
是内核大小的约定
知道卷积没有(数学上)在边上定义(N//2
在每个维度的每一端),您将在每个轴上丢失总计N
像素
您需要为卷积留出空间:用足够的“中性值”填充图像,以便边缘情况(插入的垃圾值)消失。
这将涉及到使您的图像成为307x307px图像(具有合适的填充值,请参见下一段),在卷积后将返回300x300图像
流行的图像处理库已经嵌入了这一点:当您请求卷积时,您有额外的参数指定“模式”
我们可以填充哪些值? 毫无羞耻地从他那里偷来的
- “常量”:具有常量值的焊盘
- “边”:使用数组的边值填充
- “线性斜坡”:在end_值和arraydge值之间具有线性斜坡的焊盘
- “最大值”: 具有全部或部分最大值的焊盘 沿每个轴的矢量
- “中庸” 具有全部或部分平均值的焊盘 沿每个轴的矢量
- “中位数” 具有全部或部分平均值的焊盘 沿每个轴的矢量
- “最低限度” 具有全部或部分最小值的焊盘 沿每个轴的矢量
- “反映” 向量反射镜像在其上的焊盘 向量沿每个方向的第一个和最后一个值 轴心国
- “对称” 具有向量镜像反射的焊盘 沿着阵列的边缘
- “包装” 使用向量沿轴的缠绕进行填充。 第一个值用于填充端点和端点 结束值用于填充开始
N
是内核大小的约定
知道卷积没有(数学上)在边上定义(N//2
在每个维度的每一端),您将在每个轴上丢失总计N
像素
您需要为卷积留出空间:用足够的“中性值”填充图像,以便边缘情况(插入的垃圾值)消失。
这将涉及到使您的图像成为307x307px图像(具有合适的填充值,请参见下一段),在卷积后将返回300x300图像
流行的图像处理库已经嵌入了这一点:当您请求卷积时,您有额外的参数指定“模式”
我们可以填充哪些值? 毫无羞耻地从他那里偷来的
- “常量”:具有常量值的焊盘
- “边”:使用数组的边值填充
- “线性斜坡”:在end_值和arraydge值之间具有线性斜坡的焊盘
- “最大值”: 具有全部或部分最大值的焊盘 沿每个轴的矢量
- “中庸” 具有全部或部分平均值的焊盘 沿每个轴的矢量
- “中位数” 具有全部或部分平均值的焊盘 沿每个轴的矢量
- “最低限度” 具有全部或部分最小值的焊盘 沿每个轴的矢量
- “反映” 向量反射镜像在其上的焊盘 向量沿每个方向的第一个和最后一个值 轴心国
- “对称” 具有向量镜像反射的焊盘 沿着阵列的边缘
- “包装” 使用向量沿轴的缠绕进行填充。 第一个值用于填充端点和端点 结束值用于填充开始
(例如,在进行平均时,用0填充没有什么意义,因为0在正值的平均值中不是中性的)这取决于FFT使用的算法,因为大多数算法需要处理二进维度的图像(2的幂) 以下是您必须做的:
如果您使用的算法不需要二元维,那么步骤1是无用的,步骤2必须是图像维的简单填充。这取决于您用于FFT的算法,因为大多数算法需要处理二元维的图像(2的幂) 以下是您必须做的: