0

以前、c# kinect 画像比較について投稿しました。写真の比較に固有の問題を克服するために、黒い背景でスケルトン ストリームのスクリーンショットを撮ることで、多くの問題を克服しました。今、私の問題は、画像が必要なことです。ユーザーの身長が保存された動きと比較されるのですが、ユーザーが私と同じ身長でないと問題が発生します。これを克服する方法はありますか? 私の唯一のアイデアは、画像のサイズを変更するか、特定の色のピクセルの位置を比較することです

4

1 に答える 1

0

画像をどのように比較するかによって異なります。それらをピクセルごとに比較したい場合は、実際にサイズを変更する必要はありません。for ループで使用する比率が必要なだけです。たとえば、image1 のサイズが WIDTH1*HEIGHT1 で、image2 のサイズが WIDTH2*HEIGHT2 の場合、次のような for ループを使用できます。

for(int i = 0; i < WIDTH1; i++)
{
    for(int j = 0; j < HEIGHT1; j++)
    {
        pixel1 = image1[i][j];
        pixel2 = image2[i * WIDTH2/WIDTH1][j * HEIGHT2/HEIGHT1];
        // compare
    }
}

より洗練された方法は、pixel1 を image2 の複数のピクセルの組み合わせと比較することです。たとえば、image1 が 300*300 で image2 が 600*600 の場合、image1 の各ピクセルを image2 の 4 ピクセルの平均 RGB と比較できます (image1 のすべてのピクセルに対して、image2 には 4 つのピクセルが存在するため)。サイズが互いに割り切れない場合は、加重平均を使用できます。たとえば、image1 が 300*300 で image2 が 400*400 の場合、image1 の pixel1 と image2 の 4 ピクセルの加重平均を比較できます。

pixel1 = image1[i][j];
pixel2 = 0.75 * image2[i * WIDTH2/WIDTH1][j * HEIGHT2/HEIGHT1] + 
    0.25 * AVERAGE(image2[i * WIDTH2/WIDTH1 + 1][j * HEIGHT2/HEIGHT1] +
    image2[i * WIDTH2/WIDTH1][j * HEIGHT2/HEIGHT1 + 1] + 
    image2[i * WIDTH2/WIDTH1 + 1][j * HEIGHT2/HEIGHT1 + 1]);

基本的には、pixel2 は 1 つのピクセルの 75% とその隣接ピクセルの 25% であることを意味します。これを行うと、実際には単純なサイズ変更アルゴリズムを実行しています (4 つの異なるピクセルを 1 つに結合します)。

于 2013-03-21T17:56:42.367 に答える