0

我迷路了,需要方向。

我们正在尝试使用 imagemagick 将一堆小图像 (X) 渲染到一个统一的画布上。

不同的 X 可以是五种不同尺寸之一:20x20、40x40、60x60、80x80 或 100x100。大图的宽度始终设置为 600,但高度可以根据需要进行调整。

在任何给定时刻,我们可以使用少至 10 个或多至 10,000 个 X。

目前,我们正在使用的基本概念证明类似于:

images.each do |image|

      image = Magick::Image.read("#{RAILS_ROOT}/public/images/#{image}").first

      w = image.columns
      h = image.rows

      pixels = image.export_pixels(0, 0, w, h, "RGB")

      img.import_pixels(x, y, w, h, "RGB", pixels)

      x += w

end

...它既简单又愚蠢,但它确实输出了一系列合并为一个的图像。差不多好了 ;-)

有谁知道一种有效的算法,我们可以使用它迭代许多 X 并将它们并排放置,跨越多行并仍然优化空间?这里的目标是创建一个没有空白的单一图像,由所有小图像构成。

如前所述,我希望你们对此有任何反馈。指针?想法?例子?

谢谢。

4

1 回答 1

0

看起来现在图像是噪音。你想解决一个瓷砖问题。瓷砖有一些固定的尺寸,你想把它们放在一个固定宽度和最小高度的表面上。这可以使用 DFS、BFS、A* 等在全局范围内完成。您还可以查看一些局部方法,例如模拟退火或爬山,这取决于您是否需要全局最优或只是一个好的、合理的解决方案。您可以在AIMA 的在线源代码库中找到这些方法的实现。

解决了平铺问题后,您可以使用与您显示的代码相似的代码来覆盖图像。

于 2010-11-30T00:20:00.783 回答