3

作为工业视觉应用程序的开发人员,我经常有相当笨重的图像,比如 6000x4000Pixels 或更大。

虽然相机和图像处理正在处理稳定的新图像流(并且此处理是主要任务),但我希望允许用户舒适地并行查看其他图像。

在处理器(GDI 等)上执行此操作会窃取太多性能。例如,我们需要 0.2 秒来分析图像,但通过单次缩放(调整大小以适应某些控件)显示它需要 0.8 秒,更不用说让用户继续前进并深入了解它了。

由于 Photoshop 允许借助显卡的非常快的内存和处理来显示和缩放,我想知道是否有人可以给我一个想法,是否以及如何在我自己的代码中对此进行实验:将数据推送到显卡(可能需要多长时间这需要我的 76MB 的 rgb 数据吗?)并让它显示在一些控件中,而不用费力地放大并由用户移动到控件/卡以进行用户交互。

无需 3D 外观,只需在 2D-rgb 图像中移动和调整大小。目标是在低处理器负载的情况下实现快速舒适的观看。

==>这可能吗(作为纹理或类似的东西)?==> 当前的 >=256MB 的低端 3D 卡有限制吗?==> 有人可以建议一些预期的持续时间(复制数据,缩放)吗?

4

4 回答 4

2

您将受到最大纹理大小(因卡而异)的限制,因此您必须将大图像细分为几个较小的纹理。只要卡是 AGP 或 PCI-E,将实际纹理数据传输到您的视频内存应该非常快。

于 2009-04-02T11:20:33.450 回答
1

什么是像素格式?您的尺寸数字似乎适用于 8 位 RGB,6000x4000 像素的单个图像应该需要大约 69 MB 的空间。所以它应该适合低端显卡的纹理内存,假设 Windows 和其他应用程序没有太多开销。当然,上传到显卡内存需要一段时间;但很难提供估计,因为它很可能会随着系统负载以及您的硬件/总线配置而变化。

我会更担心纹理大小的最大限制。我认为今天的高端显卡在纹理中的最大分辨率为 4096x4096 纹素,这意味着您无法将图像放入单个纹理中。

设置 DirectX 来测试这一点应该不会太难,周围有很多教程。是一个快速链接,展示了如何使用纹理进行渲染;查看同一教程系列的前面部分,了解如何初始化内容。

于 2009-04-02T10:03:20.467 回答
0

您可以使用 Direct3D 做到这一点。它可以通过绘制带纹理的四边形轻松处理用于平移和缩放的大图像。

由于图像的大小和屏幕的大小(您没有 6Kx4K 显示器,是吗?),您需要创建一个系统来按需将大图像分页到纹理中。考虑到输入数据的大小,我认为您会发现将数据输入卡的速度的主要因素是磁盘和卡之间的 I/O 带宽。您可能会发现创建一种在磁盘上存储图像的方法是值得的,该方法利用二维空间相干性(即平铺存储布局,而不是扫描线存储布局)以及计算点采样的低分辨率版本。您可以使用未压缩的 RGB 自己完成所有这些操作,您不需要 JPEG2000 来执行此操作。一旦他们选择了图像,您就可以将此数据存储作为低优先级的后台进程。先得到什么'

于 2009-07-20T02:38:31.253 回答
0

我建议您使用专为此类任务设计的格式。它是JPEG2000。您想要的功能称为 ROI(感兴趣区域)和渐进式传输。如果您需要,它可以是无损的。

于 2009-04-02T11:00:25.120 回答