0

フォトモザイクスクリプト(PHP)を作りました。このスクリプトには 1 つの写真があり、それを小さな写真の集合写真に変更します。遠くから見ると本物の写真のように見えますが、近づくとすべて小さな写真であることがわかります。固定ピクセル数の正方形を取り、その正方形の平均色を決定します。次に、これを数千枚の写真の平均色を含むデータベースと比較します。利用可能なすべての画像で色距離を決定します。ただし、このスクリプトを完全に実行するには数分かかります。

ボトルネックは、メインの絵の一部に最高の絵を合わせることです。私はこれを減らす方法をオンラインで検索しており、クロス「Antipole Clustering」にたどり着きました。もちろん、この方法を自分で使用する方法に関する情報を見つけようとしましたが、どうすればよいかわかりません。

2 つのステップがあります。1. データベースの取得と 2. フォトモザイクの作成。これがすべて明確になったら、ステップ 1 から始めましょう。多分私はステップ2を自分で理解しています。

ステップ1:

  • データベースの各画像を 3x3 グリッドに配置された 9 つの等しい長方形に分割します

  • 各長方形の RGB 平均値を計算する

  • 27 個の成分 (長方形ごとに 3 つの RGB 成分) で構成されるベクトル x を作成します。

  • x はデータ構造内の画像の特徴ベクトルです

さて、ポイント 1 と 2 は簡単ですが、ポイント 3 ではどうすればよいでしょうか。27 個の成分 (9 * R 平均、G 平均、B 平均) からベクトル X を構成するにはどうすればよいですか?

そして、ベクトルの構成に成功したら、このベクトルで次のステップは何をすべきか.

ピーター

4

3 に答える 3

1

特徴ベクトルの計算方法は次のとおりです。

3 x 3=9個の長方形があります。

各ピクセルは基本的に3つの数字で、赤、緑、青のカラーチャンネルごとに1つずつあります。

長方形ごとに、その長方形のすべてのピクセルの赤、緑、青の色の平均を計算します。これにより、長方形ごとに3つの数字が得られます。

合計で、9(長方形)x 3(R、G、Bの平均)=27の数値があります。

これらの27個の数値を単一の27x1(27 x 1と表記されることが多い)ベクトルに連結するだけです。これは27個の数字をグループ化したものです。この27の数字のベクトルは、写真の色統計を表す特徴ベクトルXです。コードでは、C ++を使用している場合、これはおそらく27の数値の配列、または(適切な名前の)ベクトルクラスのインスタンスでさえあります。この特徴ベクトルは、写真の色がどのようなものかを示す「要約」の形式と考えることができます。大まかに言うと、次のようになります。[R1、G1、B1、R2、G2、B2、...、R9、G9、B9]ここで、R1は最初の長方形の赤いピクセルの平均/平均などです。

ステップ2には、これらの特徴ベクトルを比較する何らかの形式が含まれていると思います。これにより、類似した特徴ベクトル(したがって類似した色)を持つものが一緒に配置されます。比較には、ユークリッド距離(ここを参照)またはその他のメトリックを使用して、特徴ベクトル(したがって写真の色)が互いにどの程度類似しているかを比較することが含まれる可能性があります。

最後に、Anony-Mousseが提案したように、ピクセルをRGBからHSB/HSVカラーに変換することをお勧めします。OpenCVを使用している場合、またはOpenCVにアクセスできる場合、これは単なるワンライナーコードです。それ以外の場合、wikiHSVなどは変換を実行するための数式を提供します。

お役に立てれば。

于 2013-01-03T07:01:45.243 に答える
0

多分それはベクトル量子化(vq)を意味します。vqでは、画像は長方形ではなく、密度の高い領域に分割されます。次に、このクラスターの平均点を取ることができます。まず、すべての色とピクセルを分離して、XY座標のベクトルに転送する必要があります。次に、ボロノイセルのような密度クラスタリングを使用して、平均点を取得できます。この点で、データベース内の他の写真と比較できます。VQについてはこちらをご覧ください:http://www.gamasutra.com/view/feature/3090/image_compression_with_vector_.php

隣接するピクセルからベクトルをプロットする方法:

d(x)= I(x + 1、y)-I(x、y)
d(y)= I(x、y + 1)-I(x、y)

別のリンクは次のとおりです:http://www.leptonica.com/color-quantization.html

更新:サムネイルの平均色をすでに計算している場合は、次に進み、rgbマップのすべての平均色を並べ替え、私が提供する式を使用してベクトルxを計算できます。すべてのサムネイルのベクトルができたので、アンチポールツリーを使用してサムネイルを検索できます。逆極木はkd木のようなものであり、2次元空間を細分化するため、これは可能です。アンチポールツリーについてはこちらをご覧ください:http://matt.eifelle.com/2012/01/17/qtmosaic-0-2-faster-mosaics/。たぶん、作者に聞いてソースコードをダウンロードすることができますか?

于 2012-11-08T19:55:03.127 に答える
0

RGB を使用する代わりに、HSB 空間を使用したい場合があります。さまざまなユースケースでより良い結果が得られます。色相を重視して、写真のカラー マッチを向上させたり、コントラストの高い画像 (ロゴなど) を構成するときに明るさを重視したりします。

対極クラスタリングについて聞いたことがありません。しかし、明らかな次のステップは、持っているすべての画像を大きなインデックスに入れることです。たとえば、R ツリーです。STR経由で一括ロードするかもしれません。その後、一致をすばやく見つけることができます。

于 2012-11-08T19:24:03.717 に答える