0

我正在使用Kinect并阅读示例DepthWithColor-D3D,有一些代码,但我还不明白。

// loop over each row and column of the color
for (LONG y = 0; y < m_colorHeight; ++y)
{
    LONG* pDest = (LONG*)((BYTE*)msT.pData + msT.RowPitch * y);
    for (LONG x = 0; x < m_colorWidth; ++x)
    {
        // calculate index into depth array
        int depthIndex = x/m_colorToDepthDivisor + y/m_colorToDepthDivisor * m_depthWidth;

        // retrieve the depth to color mapping for the current depth pixel
        LONG colorInDepthX = m_colorCoordinates[depthIndex * 2];
        LONG colorInDepthY = m_colorCoordinates[depthIndex * 2 + 1];

如何计算colorInDepthXcolorInDepthY上面代码的值?

4

1 回答 1

0

colorInDepthX并且colorInDepthY是深度和彩色图像之间的映射,以便它们对齐。由于 Kinect 的摄像头彼此略微偏移,因此它们的视野并没有完美排列。

m_colorCoordinates在文件顶部定义如下:

m_colorCoordinates = new LONG[m_depthWidth*m_depthHeight*2];

这是一个表示二维图像的单维数组,它填充在您在问题中发布的代码块的正上方:

// Get of x, y coordinates for color in depth space
// This will allow us to later compensate for the differences in location, angle, etc between the depth and color cameras
m_pNuiSensor->NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution(
    cColorResolution,
    cDepthResolution,
    m_depthWidth*m_depthHeight,
    m_depthD16,
    m_depthWidth*m_depthHeight*2,
    m_colorCoordinates
    );

如评论中所述,这是运行 SDK 提供的计算,以将颜色和深度坐标相互映射。结果放在m_colorCoordinates.

colorInDepthX并且colorInDepthY只是m_colorCoordinates在当前循环周期中被执行的数组中的值。它们本身不是“计算的”,而只是指向m_colorCoordinates.

处理颜色和深度图像之间映射的函数在 MSDN 的 Kinect SDK 中进行了说明。这是一个直接链接:

http://msdn.microsoft.com/en-us/library/jj663856.aspx

于 2013-07-10T15:45:37.797 回答