Kinect骨架大小调整/图像大小调整?

时间:2013-03-19 16:35:08

标签: c# image compare kinect

我以前发过关于c#kinect图像比较的文章,我通过在黑色背景上截取骨架流的截图来克服一些问题,以便克服比较照片所固有的问题,现在我的问题是我需要将用户的图像与预先保存的动作进行比较,但是当用户与我的身高不同时,我遇到了麻烦,有没有办法克服这个问题?我唯一的想法涉及调整图像大小或比较某些彩色像素的位置

1 个答案:

答案 0 :(得分: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中存在四个像素)。如果尺寸不能彼此整除,您可以使用加权平均值。例如,如果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是75%的一个像素,25%是它的相邻像素。通过执行此操作,您实际上正在执行一个简单的大小调整算法(将4个不同的像素合并为1)。