【问题标题】:Errors processing large images with SIFT OpenCV使用 SIFT OpenCV 处理大图像时出错
【发布时间】:2018-06-28 02:22:08
【问题描述】:

我想使用 OpenCV Python 对遥感图像进行 SIFT 特征检测。这些图像是高分辨率的,可以是数千像素宽(7000 x 6000 或更大)。但是,我遇到了内存不足的问题。作为参考,我在 Matlab 中运行相同的 7000 x 6000 图像(使用 VLFEAT)没有内存错误,尽管更大的图像可能会出现问题。有没有人建议使用 OpenCV SIFT 处理这种数据集?

OpenCV 错误:cv::OutOfMemoryError,文件 C:\projects\opencv-python\opencv\modules\core\src\alloc.cpp,第 55 行中的内存不足(无法分配 672000000 字节) OpenCV 错误:在 cv::Mat::create, 文件中断言失败 (u != 0)

(我在具有 32 GB RAM 的 Windows 64 位的 Spyder IDE 中使用 Python 2.7 和 OpenCV 3.4。)

【问题讨论】:

  • 欢迎来到 SO。好问题...请完成游览,发布您的代码并详细说明您尝试自己解决的问题(例如,您发现某些东西但不起作用的链接)并享受 SO ;-)
  • @ZF007 - 与此 Q 无关。显然,opencv 库中的某些内容未针对像素为典型视频帧的 100 倍的图像进行优化。发布一堆包装代码不会有帮助。
  • 查看我的答案以回复您的问题 Martin。
  • 你好丽贝卡!你找到解决这个问题的办法了吗?

标签: python opencv image-processing feature-detection sift


【解决方案1】:

我会将图像分割成更小的窗口。只要您知道窗口重叠(我假设您知道横向偏移),任何窗口中的匹配都是有效的。

您甚至可以将其用作检查,图像任何部分的特征点之间的平移必须相同才能使变换有效

【讨论】:

  • 是的,我考虑过这种方法。我正在尝试进行概念验证,因此我希望尽可能少地进行编程。如果我幸运的话,也许我错过了一些 Python/Open CV 技巧。 (研究中没有什么是容易的。)不过感谢您的回复。如果我没有得到任何其他快速而肮脏的解决方案,我相信这将是我的下一个方法。
  • @RebeccaBrown 附言。我还没有在大图像上测试过,但是在最新的 opencv docs.opencv.org/ref/master/db/d61/group__reg.html 中有一个全新的关于图像注册的部分
【解决方案2】:

在这种情况下,有几种处理 SIFT 角点检测的方法:

  1. 每单位/时间一个核心处理单个图像;
  2. 在单核上多处理 2 个或更多图像/单位时间;
  3. 在多个内核上多处理 2 个或更多图像/单位时间。

将内核读取为 cpu 或 gpu。线程化导致串行处理而不是并行处理。

如前所述,Rebecca 在她的 PC 上至少有 32GB 的内存可供她使用,这足以让选项 1 立即处理。

因此,在这种情况下……按照 Martin 的建议分割单个图像……在我看来应该是最后的手段。

为什么应避免在特征检测期间将单个图像拆分到多个窗口中(不会耗尽内存)?

答案:

如果一个角位于窗口的分界侧,因此不情愿地变成两个或多或少的多边形直线状形状,您将找不到您要寻找的角,除非您有专门的算法寻找那些异常。

以防万一:

在 Rebecca 的案例中,了解她在处理图像时采用了哪种方法至关重要...是同时加载到内存中的一张、两张还是更多张图像?

如果成百上千的图像同时加载到内存中……您基本上是在通过占用系统的呼吸空间(以空闲内存的形式)来阻塞系统。此外,我们不是在谈论加载到内存中并为各种后台程序声明(保留)或消耗内存空间的其他程序。这是当前问题的重中之重。

过度思考:

如果按照 Martin 的建议,Opencv 库在处理 Rebecca 所描述的这么多图像时存在问题。进行一些调试,然后将您的发现报告给 Opencv,像她一样在 SO 上发布一个问题。 . 但还要发布代码,显示您在开始时如何处理图像处理;如上所述,为什么这很重要。是的,正如马丁所说......不要发布包装......这样做完全没有意义。指向它的推荐链接(可能的版本号)绰绰有余......或标签;-)

【讨论】:

  • 感谢您的回复。我意识到我的 Python 安装程序是 32 位的,所以我将尝试 64 位的 Python 安装程序,看看是否有区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2013-02-08
  • 2022-06-22
相关资源
最近更新 更多