編集: この最初の部分は問題ではないようです。以下を参照してください (Ted と Jim に感謝):
これは p-hash 実装の一部です。コードは正常に一貫して実行されますが、64 と 32 でコンパイルすると、一部の画像で結果がわずかに異なります。(平均値は単位です)
ulong hash = 0;
for (int i = 0; i < 64; i++)
if (grayscale[i] >= averageValue)
{
hash |= (1UL << (int)(63L - i));
}
VS2010 でコンパイルされています。実装を変更するためのアイデアはありますか?
ありがとう!
編集:問題はその部分にあるようには見えませんが、画像を読み取って凝縮することにあります。
私は自分の画像を次のように取得しています(画像は渡されたビットマップ画像です):
// Squeeze the image into an 8x8 canvas
Bitmap squeezed = new Bitmap(8, 8, PixelFormat.Format32bppRgb);
Graphics canvas = Graphics.FromImage(squeezed);
canvas.CompositingQuality = CompositingQuality.HighQuality;
canvas.InterpolationMode = InterpolationMode.HighQualityBilinear;
canvas.SmoothingMode = SmoothingMode.HighQuality;
canvas.DrawImage(image, 0, 0, 8, 8);
そして、ネストされた for ループで
uint pixel = (uint)squeezed.GetPixel(x, y).ToArgb();
ただし、これらの値は異なります。
....
対:
....