在统一画布上高效渲染许多图像

时间:2010-11-29 22:47:40

标签: ruby-on-rails ruby image-processing imagemagick rmagick

我迷失了,需要指导。

我们尝试使用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并将它们并排放置,跨越多条线并仍在优化空间? 此处的目标是创建一个没有空白区域的单个图像,由所有小图像构建。

如上所述,我希望你们对此有任何反馈意见。指针?想法?实例

感谢。

1 个答案:

答案 0 :(得分:0)

现在看来图像是噪音。你想解决一个瓷砖问题。瓷砖有一些固定的尺寸,您希望将它们放在固定宽度和最小高度的表面上。这可以通过DFS,BFS,A *等全局完成。您还可以查看一些本地方法,如模拟退火或爬山,这取决于您是否需要全局最优或仅仅是一个合理的解决方案。您可以在online source repository for AIMA

中找到这些方法的实现

解决了拼贴问题后,您可以使用与您正在显示的代码类似的代码覆盖图像。