0

私は道に迷っており、方向性が必要です。

imagemagick を使用して、多数の小さな画像 (X) を単一の統合キャンバスにレンダリングしようとしています。

異なる X は、それぞれ 20x20、40x40、60x60、80x80、または 100x100 の 5 つの異なるサイズのいずれかになります。大きな画像の幅は常に 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

...単純でばかげていますが、一連の画像を 1 つにマージして出力します。もうすぐです ;-)

多くの X を反復して並べて配置し、複数の行にまたがってスペースを最適化できる効果的なアルゴリズムを知っている人はいますか? ここでの目標は、すべての小さな画像で構成された、空白のない単一の画像を作成することです。

前述のとおり、これに関するフィードバックをお待ちしています。ポインタ?アイデア?例?

ありがとう。

4

1 に答える 1

0

今のイメージはノイズのようです。タイルの問題を解決したいと考えています。タイルにはいくつかの固定サイズがあり、固定幅と最小高さのサーフェスに配置したいと考えています。これは、DFS、BFS、A* などを使用してグローバルに実行できます。また、グローバルな最適化が必要か、適切で合理的なソリューションが必要かによって、シミュレーテッド アニーリングやヒル クライミングなどのローカルな方法を検討することもできます。これらのメソッドの実装は、AIMA のオンライン ソース リポジトリにあります。

タイルの問題を解決したら、表示しているコードと同様のコードを使用して、画像を重ねることができます。

于 2010-11-30T00:20:00.783 に答える