Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 使用FFT进行二维卷积时如何变换滤波器?_Image Processing_Fft_Convolution - Fatal编程技术网

Image processing 使用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

我想用FFT来加速二维卷积。过滤器为15 x 15,图像为300 x 300。该滤波器的大小是不同的图像,所以我不能做点积后FFT。那么,如何在进行FFT之前变换滤波器,使其大小与图像匹配?

我使用
N
是内核大小的约定

知道卷积没有(数学上)在边上定义(
N//2
在每个维度的每一端),您将在每个轴上丢失总计
N
像素

您需要为卷积留出空间:用足够的“中性值”填充图像,以便边缘情况(插入的垃圾值)消失。

这将涉及到使您的图像成为307x307px图像(具有合适的填充值,请参见下一段),在卷积后将返回300x300图像

流行的图像处理库已经嵌入了这一点:当您请求卷积时,您有额外的参数指定“模式”


我们可以填充哪些值? 毫无羞耻地从他那里偷来的

  • “常量”:具有常量值的焊盘
  • “边”:使用数组的边值填充
  • “线性斜坡”:在end_值和arraydge值之间具有线性斜坡的焊盘
  • “最大值”: 具有全部或部分最大值的焊盘 沿每个轴的矢量
  • “中庸” 具有全部或部分平均值的焊盘 沿每个轴的矢量
  • “中位数” 具有全部或部分平均值的焊盘 沿每个轴的矢量
  • “最低限度” 具有全部或部分最小值的焊盘 沿每个轴的矢量
  • “反映” 向量反射镜像在其上的焊盘 向量沿每个方向的第一个和最后一个值 轴心国
  • “对称” 具有向量镜像反射的焊盘 沿着阵列的边缘
  • “包装” 使用向量沿轴的缠绕进行填充。 第一个值用于填充端点和端点 结束值用于填充开始
这真的取决于你,但经验法则是“为手头的任务选择中性值”

(例如,在进行平均时用0填充没有什么意义,因为0在正值的平均值中不是中性的)

我使用
N
是内核大小的约定

知道卷积没有(数学上)在边上定义(
N//2
在每个维度的每一端),您将在每个轴上丢失总计
N
像素

您需要为卷积留出空间:用足够的“中性值”填充图像,以便边缘情况(插入的垃圾值)消失。

这将涉及到使您的图像成为307x307px图像(具有合适的填充值,请参见下一段),在卷积后将返回300x300图像

流行的图像处理库已经嵌入了这一点:当您请求卷积时,您有额外的参数指定“模式”


我们可以填充哪些值? 毫无羞耻地从他那里偷来的

  • “常量”:具有常量值的焊盘
  • “边”:使用数组的边值填充
  • “线性斜坡”:在end_值和arraydge值之间具有线性斜坡的焊盘
  • “最大值”: 具有全部或部分最大值的焊盘 沿每个轴的矢量
  • “中庸” 具有全部或部分平均值的焊盘 沿每个轴的矢量
  • “中位数” 具有全部或部分平均值的焊盘 沿每个轴的矢量
  • “最低限度” 具有全部或部分最小值的焊盘 沿每个轴的矢量
  • “反映” 向量反射镜像在其上的焊盘 向量沿每个方向的第一个和最后一个值 轴心国
  • “对称” 具有向量镜像反射的焊盘 沿着阵列的边缘
  • “包装” 使用向量沿轴的缠绕进行填充。 第一个值用于填充端点和端点 结束值用于填充开始
这真的取决于你,但经验法则是“为手头的任务选择中性值”


(例如,在进行平均时,用0填充没有什么意义,因为0在正值的平均值中不是中性的)

这取决于FFT使用的算法,因为大多数算法需要处理二进维度的图像(2的幂)

以下是您必须做的:

  • 填充图像:将图像居中放置到一个具有二元尺寸的较大图像中
  • 填充内核:将核心卷积到与步骤1相同尺寸的图像中
  • 对步骤1中的图像进行FFT
  • 第2步中的内核FFT
  • 步骤3和步骤4的结果的复数乘法(傅里叶空间)
  • 在步骤5中对结果图像进行逆FFT
  • 取消添加步骤6中的结果图像
  • 将所有4个区块按正确顺序排列

  • 如果您使用的算法不需要二元维,那么步骤1是无用的,步骤2必须是图像维的简单填充。

    这取决于您用于FFT的算法,因为大多数算法需要处理二元维的图像(2的幂)

    以下是您必须做的:

  • 填充图像:将图像居中放置到一个具有二元尺寸的较大图像中
  • 填充内核:将核心卷积到与步骤1相同尺寸的图像中
  • 对步骤1中的图像进行FFT
  • 第2步中的内核FFT