为大型扫描图像和 libvips 选择文件结构

问题描述 投票:0回答:1

您好,提前致谢!

我正在编写一个桌面应用程序,它使用工业线扫描相机来扫描胶片条。捕获图像的总尺寸约为 4,000x250,000 像素(每像素 16 位)。扫描时,相机会清空缓冲区,将捕获的内容保存为 ~4,000x256px tiff 块。我还保存一维统计数据,用于查找帧(胶片上的各个物理图像)的位置。

我的问题是准备这些文件的最有效方法是什么,因为软件需要显示单独提取的帧并对这些帧执行图像校正,可能使用 Libvips :

  • 将图像保留为块:

    • 优点:无需预处理,因为这是相机在扫描时保存的内容,因此扫描完成后它们将立即可用。
    • 缺点:处理管道变得更加复杂,因为每次用户调整设置时都需要加载相关块并连接它们。
  • 将帧提取到单个文件中:

    • 优点:只需加载一个图像即可将处理管道应用于一帧。每个图像的文件大小仍然是可以管理的。
    • 缺点:这需要一些预处理才能将每一帧提取到自己的图像中。但这只是一次性的事情。
  • 创建整个条带的单个巨大图像:

    • 优点:利用 Libvips 处理大图像的能力
    • 缺点:连接和(大部分)保存大文件的预处理时间较长。

我主要倾向于将帧提取到自己的文件中,并且可能会利用 Libvips 的速度来做到这一点,但我很想听听对 Vips 更有经验的人对这个主题的看法!

非常感谢您的阅读和您的时间。

这主要是一个探索性问题。

image image-processing vips libvips
1个回答
0
投票

libvips 作者在这里。我的第一个想法是将每个 4,096 x 256 像素块保存在一个单独的文件中,并将它们合成显示。您可以为 1,000 个块打开 1,000 个图像,然后使用例如。

arrayjoin
快速地从它们中制作出一张巨大的图像。 libvips 会根据您的需要缓存和映射所有内容,因此性能应该很好(只要您可以一次打开 1,000 个文件)。

但是像任何这样的设计一样,最好的方法是尝试为目标平台选择一个规范(操作系统、内存、预期性能)、所需的性能水平(屏幕重绘速度、捕获时间、延迟、内存使用),制作一个微小但具有代表性的原型(Python 非常适合勾勒想法),并花一些时间进行实验以发现可以满足您目标的技术解决方案。

我还想快速浏览一下 vipsdisp:

https://github.com/jcupitt/vipsdisp

它有一个非常奇特的线程、异步、基于 GPU 的屏幕重绘系统,你也许可以借鉴一些想法。如果您的目标是 gtk,您甚至可以重用一些小部件。

© www.soinside.com 2019 - 2024. All rights reserved.