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 中存在四个像素)。如果大小不能相互整除,则可以使用加权平均。例如,如果 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 个)。

于 2013-03-21T17:56:42.367 回答