5

私は画像処理で少し遊んでいて、色の量子化がどのように機能するかを読むことにしました。少し読んだ後、Modified Median Cut Quantizationアルゴリズムを見つけました。

私はLeptonica ライブラリの C 実装のコードを読んでいて、少し奇妙だと思うものに出会いました。

ここで強調したいのは、私はこの分野の専門家ではなく、数学の専門家ではないということです。したがって、これはすべて、アルゴリズムの実装が間違っているということではなく、すべてを理解していないことが原因であると予測しています。まったく。

アルゴリズムは、vboxが最大軸に沿って分割され、次のロジックを使用して分割されるべきであると述べています。

最大の軸は、(母集団による) 中央値のピクセルでビンを見つけ、長い方の辺を選択し、その辺の中央で分割することによって分割されます。単純に中央値ピクセルのビンを短辺に配置することもできますが、細分割の初期段階では、高密度クラスターの一部として同じ vbox に低密度クラスター (細分割では考慮されない) を配置する傾向があります。将来の中央値ベースのサブディビジョンであっても、中央値の vbox 色でそれを打ち負かすクラスター。ここで使用されるアルゴリズムは、初期のサブディビジョンで特に重要であり、可視であるが人口が少ないカラー クラスターに独自の vbox を与えるのに役立ちます。これは高密度クラスターの細分化にはほとんど影響せず、最終的には vbox 内の人口がほぼ等しくなります。

議論のために、分割の過程にある vbox があり、赤い軸が最大であると仮定しましょう。レプトニカ アルゴリズムの 01297 行で、コードは次のように表示されます。

  • 赤の可能なすべての緑と青のバリエーションを反復します
  • 反復ごとに、赤軸に沿って見つかったピクセル (人口)の総数に追加されます
  • 赤ごとに、現在の赤と前の赤の母集団を合計し、赤ごとに累積値を保存します。

注:「赤」と言うとき、反復によってカバーされる軸に沿った各点を意味します。実際の色は赤ではなく、ある程度の赤が含まれている場合があります

説明のために、赤い軸に沿って 9 つの「ビン」があり、それらの人口が次のとおりであると仮定します。

4 8 20 16 1 9 12 8 8

すべての赤いビンの反復後、partialsum配列には、上記のビンの次のカウントが含まれます。

4 12 32 48 49 58 70 78 86

合計のは 86 になります。

それが完了したら、実際の中央値カットを実行します。赤い軸の場合、これは行 01346 で実行されます。

ビンを反復処理し、累積合計を確認します。そして、これがアルゴリズムの説明から私を突き飛ばす部分です。total/2より大きい値を持つ最初のビンを探します。

total/2は、中央値ではなく平均値より大きい値を持つビンを探していることを意味しませんか? 上記のビンの中央値は49になります

43または49を使用すると、ボックスの分割方法に大きな影響を与える可能性がありますが、アルゴリズムは一致した値があった場所の大きい側の中心に移動します。

私を少し困惑させるもう1つのことは、紙が中央値を持つビンを特定する必要があることを指定しているが、偶数のビンがある場合の処理​​方法について言及していないことです..中央値は(a +の結果になりますb)/2であり、ビンのいずれかにその人口数が含まれているとは限りません。したがって、選択したビンの大きい側の中心で分割が実際にどのように行われるかにより、無視できるいくつかの近似が行われていることがわかります。

少し長くなってしまったら申し訳ありませんが、数日間私を夢中にさせているので、できる限り徹底したかったのです;)

4

2 に答える 2

2

9 ビンの例では、49 は最初の 5 つのビンのピクセル数です。49 は9 つの部分合計のセットの中央値ですが、86 ピクセルのセットの中央値ピクセル、つまり 43 (または 44) が必要で、4 番目のビンに存在します。

leptonica の colorquant2.c で変更された中央値カット アルゴリズムを調べると、3d ボックスの実際のカット位置が、中央値ピクセルを含むビンに隣接して発生するとは限らないことがわかります。この理由は関数 medianCutApply() で説明されています。これは、Paul Heckbert の元の方法に対する「修正」の 1 つです。もう 1 つの重要な変更点は、人口と製品 (人口 * ボリューム) の両方の組み合わせに基づいて、次にカットする 3D ボックスを決定することです。これにより、色空間の大きくても人口がまばらな領域を分割できます。

于 2012-02-06T18:02:37.060 に答える
0

アルゴリズムはわかりませんが、配列には各赤の人口が含まれていると思います。これを例で説明しましょう:

A、B、C、D の 4 つの赤のグラデーションがあり、次の赤の値のシーケンスがあるとします。

AABDCADBBBAAA

中央値を見つけるには、赤の値に従って並べ替え、中央値を取得する必要があります。

    median
      v
AAAAAABBBBCDD

それでは、彼らのアプローチを使用しましょう。

A:6 => 6 
B:4 => 10
C:1 => 11
D:2 => 13

13/2 = 6.5 => B

人口を数えているため、不一致が発生したと思います。平均色は次のようになります。

(6*A+4*B+1*C+2*D)/13
于 2012-02-01T14:37:07.783 に答える