eznme はあなたの質問に答えなかったので (あなたは指紋が欲しい、彼は圧縮と再構築について説明しています)、ここによく出くわす方法があります:
色と明るさの情報 (クロミナンスと輝度) を分離し、異なる重み付けをします。場合によっては、クロミナンスを捨てて輝度部分だけを使用することさえあります。これにより、指紋のサイズが大幅に縮小され (最大 3 倍)、絶対的な色ではなく、主に局所的な明るさによって画像を認識する方法が考慮されます。おまけとして、画像の色操作に関する堅牢性が得られます。
分離は、RGB 画像をYUVまたはYIQ色空間に変換するなど、さまざまな方法で行うことができます。輝度コンポーネントのみを保持したい場合、これら 2 つの色空間は同等です。ただし、クロミナンスのエンコード方法は異なります。RGB からの輝度 Y の線形変換は次のとおりです。Y = 0.299*R + 0.587*G + 0.114*B
数学を見ると、グレースケール画像を作成する以外に何もしていないことがわかります。数値的にすべてが等しい場合、緑は赤よりも明るく、赤は青よりも明るく知覚されることを考慮してください.
少しのクロミナンス情報を保持したい場合は、指紋をできるだけ簡潔に保つために、2 つの U、V コンポーネント (実際にはそれぞれ 8 ビット) の解像度を下げることができます。したがって、それらの情報を 4 ビットに減らし、シフト演算子と組み合わせることで、両方を 1 つの 8 ビット値に結合できます (Java でどのように機能するかはわかりません)。最終的な指紋距離の計算(あなたが言及した内積)では、クロミナンスは輝度と比較して重みが少なくなるはずです。