使用 FFTW 进行图像卷积时,内核在哪里居中?

2023-12-25

我正在尝试使用 FFTW 进行图像卷积。

起初只是为了测试系统是否正常工作,我执行了 fft,然后执行了逆 fft,并且可以返回完全相同的图像。

然后向前迈出了一小步,我使用了恒等内核(即 kernel[0][0] = 1,而所有其他组件等于 0)。我取了图像和内核(都在频域中)之间的分量乘积,然后进行了逆 fft。理论上我应该能够得到相同的图像。但我得到的结果与原始图像非常不接近。我怀疑这与我将内核 fft 到频域之前的居中位置有关(因为我将“1”放在 kernel[0][0] 处,这基本上意味着我将正数部分居中在顶部左边)。谁能告诉我这里出了什么问题吗?


对于每个维度,索引样本数应为 -n/2 ... 0 ... n/2 -1,因此如果维度为奇数,则以中间为中心。如果维度是偶数,则居中,以便在新 0 之前比新 0 之后多一个样本。

例如。 -4、-3、-2、-1、0、1、2、3(宽度/高度为 8)或 -3、-2、-1、0、1、2、3(宽度/高度为 7) 。

FFT是相对于中间的,其尺度上有负点。
在内存中,点是 0...n-1,但 FFT 将它们视为 -ceil(n/2)...floor(n/2),其中 0 是 -ceil(n/2) 和 n- 1 是楼层(n/2)

单位矩阵是一个由 0 组成的矩阵,其中 1 位于 0,0 位置(中心 - 根据上面的编号)。 (在空间域中。)

在频域中,单位矩阵应该是一个常数(所有实数值为 1 或 1/(N*M),所有虚数值为 0)。

如果您没有收到此结果,则识别矩阵可能需要以不同方式填充(向左和向下而不是围绕所有边) - 这可能取决于 FFT 实现。

Center 每个维度分别(这是索引居中,实际内存没有变化)。

您可能需要填充图像(居中后)每个维度的 2 的整数次幂(2^n * 2^m,其中 n 不必等于 m)。

通过在源图像和目标图像中使用基于中心的索引(例如 (0,0) 到 (0,0))将现有像素复制到新的较大图像中,相对于 FFT 的 0,0 位置(到中心,而不是角)进行填充, (0,1) 至 (0,1), (1,-2) 至 (1,-2))

假设您的 FFT 使用常规浮点单元而不是复杂单元,复杂的图像即使您不需要 2 的整数幂,大小也必须为 2*ceil(2/n) * 2*ceil(2/m)(因为它有一半的样本,但样本很复杂)。

如果你的图像有多个颜色通道,您首先必须重塑它,以便通道在子像素排序中最重要,而不是最不重要。您可以一次性重塑和填充,以节省时间和空间。

不要忘记FFTSHIFTIFFT 后。 (交换象限。)
IFFT 的结果是 0...n-1。您必须采用像素 Floor(n/2)+1..n-1 并将它们移动到 0...floor(n/2) 之前。
这是通过将像素复制到新图像、将 Floor(n/2)+1 复制到内存位置 0、将 Floor(n/2)+2 复制到内存位置 1、...、将 n-1 复制到内存- 来完成的。位置floor(n/2),然后0到内存位置ceil(n/2),1到内存位置ceil(n/2)+1,...,floor(n/2)到内存位置n -1。

当你在频域中相乘,请记住,样本是复杂的(一个细胞实数,一个细胞虚数),因此您必须使用复数乘法。

结果可能需要除以 N^2*M^2,其中 N 是填充后 n 的大小(对于 M 和 m 也是如此)。 - 您可以通过(a. 查看单位矩阵的频域值,b. 将结果与输入进行比较。)来判断这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FFTW 进行图像卷积时,内核在哪里居中? 的相关文章

  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 如何在 python 中读取 32 位 TIFF 图像?

    我想用 python 读取 32 位浮点图像文件来进行一些图像分析 我努力了 import matplotlib pyplot as plt im plt imread path to file tif 但是 这仅将数据读取为 8 位整数值
  • 低质量相机的模糊内核

    我正在做一些图像增强实验 所以我用我的廉价相机拍照 相机有马赛克伪像 所有图像看起来都像网格 我认为药盒 失焦 内核和高斯内核不是最佳候选 有什么建议么 EDIT Sample 我怀疑这不能通过恒定的内核来完成 因为对像素的影响并不相同 因
  • Opencv Mat内存管理

    内存管理对于图像类至关重要 在opencv中 图像类是cv Mat 它有一个微妙的内存管理方案 假设我已经有了自己的图像类SelfImage class SelfImage public int width int height unsig
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • 为什么这个 gif 的持续时间似乎是 0 毫秒?如何找到真实的持续时间?

    我正在尝试从动画 gif 文件中获取持续时间和帧数 以便计算 gif 的平均帧速率 然后将其转换为视频 我最近在测试过程中看到了这张图片 它似乎让一切都相信它的持续时间为 0 毫秒 为什么 如何找到真实的持续时间 到目前为止我已经尝试过 e
  • PHP清晰度卷积矩阵

    我正在使用一个卷积矩阵 http www php net manual en function imageconvolution php为了锐度PHP GD我想改变清晰度 level 我会去哪里做出改变如果我想做到的话或多或少尖锐 imag
  • 训练 tesseract 与 iPhone 一起使用

    我正在尝试在我的 iPhone 应用程序中使用 tesseract 2 04 只想检测数字 我在这里所做的首先是使用这篇文章交叉编译 tesseract 以生成 lib 文件http robertcarlsen net 2009 07 15
  • 在哪里可以找到有关双三次插值和 Lanczos 重采样的好读物?

    我想用 C 实现上述两种图像重采样算法 双三次和 Lanczos 我知道现有的实现有几十种 但我仍然想制作自己的实现 我之所以这么做 部分原因是我想了解它们是如何工作的 部分原因是我想为它们提供一些主流实现中没有的功能 例如可配置的多 CP
  • 如何在 Visual Studio Code 中包含编译器标志?

    我有一个程序试图在使用 fftw 函数的 Visual Studio Code 调试器中运行 它用命令编译 g dimer cpp std c 11 lfftw3 在我的计算机上的终端上 而不会抱怨未定义的引用 但是 在生成 launch
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • 提高 Python 中的 FFT 性能

    Python 中最快的 FFT 实现是什么 看来 numpy fft 和 scipy fftpack 都基于 fftpack 而不是 FFTW fftpack 和 FFTW 一样快吗 使用多线程 FFT 或分布式 MPI FFT 怎么样 您
  • 使用Python对图像进行反转和平移

    我编写了以下代码来循环遍历文件夹中的所有图像 创建其底片并将其保存在新的相似名称下 我怎样才能做同样的事情来将它们向右平移 5 个像素 Code from PIL import Image import PIL ImageOps impor
  • 比较两个直方图

    对于一个小型项目 我需要将一张图像与另一张图像进行比较 以确定图像是否大致相同 这些图像很小 宽度从 25 到 100 像素不等 这些图像应该具有相同的图片数据 但略有不同 因此简单的像素相等检查不起作用 考虑以下两种可能的情况 博物馆中的
  • 如何在 MATLAB 的 for 循环中读取多个图像?

    我已将结果分段放在一个文件夹中 这些需要在 for 循环中读取并在循环中进一步处理 我尝试阅读如下 for i 1 10 file name dir strcat C Users adminp Desktop dinosaurs im im

随机推荐