【问题标题】:Kinect skeleton resizing / image reszing ?Kinect 骨架大小调整/图像大小调整?
【发布时间】:2013-03-19 16:35:08
【问题描述】:

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

【问题讨论】:

  • 您比较的目的是什么?您的描述几乎让人觉得您正在尝试检测姿势和/或手势。

标签: c# image compare kinect


【解决方案1】:

这取决于您要如何比较图像。如果你想逐个像素地比较它们,你不需要调整大小,你只需要在 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 个)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多