如何查看大图的实时马赛克?



我构建了一个代码,可以拼接大约 100X100 的图像。我想实时查看此拼接过程。我正在使用 pyvips 来创建大图像。我正在将最终图像保存在 中。DZI 格式,因为它需要非常少的内存占用来显示。 以下代码仅用于测试目的 https://github.com/jcupitt/pyvips/issues/43。

#!/usr/bin/env python
import sys
import pyvips
# overlap joins by this many pixels
H_OVERLAP = 100
V_OVERLAP = 100
# number of images in mosaic
ACROSS = 40
DOWN = 40
if len(sys.argv) < 2 + ACROSS * DOWN:
print 'usage: %s output-image input1 input2 ..'
sys.exit(1)
def join_left_right(filenames):
images = [pyvips.Image.new_from_file(filename) for filename in filenames]
row = images[0]
for image in images[1:]:
row = row.merge(image, 'horizontal', H_OVERLAP - row.width, 0)
return row
def join_top_bottom(rows):
image = rows[0]
for row in rows[1:]:
image = image.merge(row, 'vertical', 0, V_OVERLAP - image.height)
return image
rows = []
for y in range(0, DOWN):
start = 2 + y * ACROSS
end = start + ACROSS
rows.append(join_left_right(sys.argv[start:end]))
image = join_top_bottom(rows)
image.write_to_file(sys.argv[1])

要运行此代码,请执行以下操作:

$ export VIPS_DISC_THRESHOLD=100
$ export VIPS_PROGRESS=1
$ export VIPS_CONCURRENCY=1
$ mkdir sample
$ for i in {1..1600}; do cp ~/pics/k2.jpg sample/$i.jpg; done
$ time ./mergeup.py x.dz sample/*.jpg

在这里cp ~/pics/k2.jpg将从 PICS 文件夹中复制 K2.jpg 图像 1600 次,因此请根据您的图像名称和位置进行更改。

我想实时显示此过程。现在,在创建最终的马赛克图像后,我可以显示。只是一个想法,我想制作一个大图像并显示它,然后插入较小的图像。我不知道,怎么能做到。我很困惑,因为我们还必须制作金字塔结构。因此,如果我们首先创建大图像,则必须用新图像替换每个级别图像。创建。DZI 图像很昂贵,所以我不想在每个运行循环中创建它。替换图像可能是一种解决方案。 有什么建议吗??

我想你有两个挑战:如何在服务器上保持金字塔的最新状态,以及如何在客户端上保持金字塔的最新状态。暴力方法是不断在服务器上重建 DZI,并定期刷新客户端上的图块(以便它们重新加载(。对于类似的事情,您还需要每次向磁贴 URL 添加缓存半身像,否则浏览器会认为它应该只使用其本地副本(没有意识到它已经更新(。当然,这种蛮力方法可能太慢了(尽管尝试一下可能会很有趣!

为了更巧妙一点,您需要制作一个与子图像完全对齐的金字塔。这样,当您更改单个子图像时,可以明显看到哪些磁贴需要更新。如果您有方形子图像,并且您使用的磁贴大小是子图像大小的偶数部分,则可以使用 DZI 执行此操作。也没有瓷砖重叠。当然,您必须构建自己的DZI构造函数,因为现有的构造函数不能简单地替换单个磁贴。如果您知道在服务器上更改了哪些切片,则可以将其传达给客户端(通过定期轮询或使用 Web 套接字之类的内容(,然后仅刷新这些切片(再次使用缓存无效化(。

您可以尝试的另一种解决方案是,本身不要尝试金字塔,而只是尝试一组合理分辨率的平面图块,以允许用户在场景中平移。这将大大简化服务器上的金字塔更新,因为您需要做的就是为每个子图像替换单个图像。这可以以自定义(非OpenSeadragon(方式在客户端上加载和显示,或者您甚至可以使用OpenSeadragon的多图像功能来利用其平移和缩放,如下所示:http://www.letsfathom.com/(每个专辑封面都是其自己的独立图像对象(。

最新更新