19

私は Kinect センサーを使用しており、深度とカラー フレームを調整して、互いに「適合する」画像として保存できるようにしています。私は msdn フォーラムと Kinect SDK のささやかなドキュメントに多くの時間を費やしてきましたが、どこにも行き着きません。

この回答に基づく: Kinect: Converting from RGB Coordinates to Depth Coordinates

私は次の関数を持っています。depthDatacolorDataはから取得されNUI_LOCKED_RECT.pBitsmappedDataは深度座標にマッピングされた新しいカラー フレームを含む出力です。

bool mapColorFrameToDepthFrame(unsigned char *depthData, unsigned char* colorData, unsigned char* mappedData)
{
    INuiCoordinateMapper* coordMapper;

    // Get coordinate mapper
    m_pSensor->NuiGetCoordinateMapper(&coordMapper);

    NUI_DEPTH_IMAGE_POINT* depthPoints = new NUI_DEPTH_IMAGE_POINT[640 * 480];

    HRESULT result = coordMapper->MapColorFrameToDepthFrame(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, NUI_IMAGE_RESOLUTION_640x480, 640 * 480, reinterpret_cast<NUI_DEPTH_IMAGE_PIXEL*>(depthData), 640 * 480, depthPoints);
    if (FAILED(result))
    {
        return false;
    }    

    int pos = 0;
    int* colorRun = reinterpret_cast<int*>(colorData);
    int* mappedRun = reinterpret_cast<int*>(mappedData);

    // For each pixel of new color frame
    for (int i = 0; i < 640 * 480; ++i)
    {
        // Find the corresponding pixel in original color frame from depthPoints
        pos = (depthPoints[i].y * 640) + depthPoints[i].x;

        // Set pixel value if it's within frame boundaries
        if (pos < 640 * 480)
        {
            mappedRun[i] = colorRun[pos];
        }
    }

    return true;
}

このコードを実行したときに得られるのは、depthFrame に情報がなかったすべてのピクセルが削除された (白の) 変更されていないカラー フレームだけです。

4

5 に答える 5

2

OpenNI フレームワークでは、オプション呼び出し登録があります。

IMAGE_REGISTRATION_DEPTH_TO_IMAGE – 深度画像は、RGB 画像と同じ見た目の視点を持つように変換されます。

OpenNI 2.0 と Nite 2.0 は、Kinect 情報をキャプチャするのに非常にうまく機能し、多くのチュートリアルがあります。

これを見ることができます:

Kinect と OpenNI

OpenNi の SimplerViewer には、Depth と Color をマージする例があります。それを見て試してみてください。

于 2013-04-19T20:40:12.267 に答える
0

これはあなたが望んでいる簡単な答えではないかもしれませんが、この変換はofxKinectNuiopenFrameworks のアドオン(こちらを参照)内で正常に行われます。

ここで定義された関数ofxKinectNuiへのデリゲートのように見えます。GetColorPixelCoordinatesFromDepthPixel

于 2013-06-10T16:49:53.990 に答える
-1

まず、デバイスを調整する必要があります。つまり、RGB と IR センサーを調整してから、RGB と IR の間の変換を見つける必要があります。この情報がわかれば、関数を適用できます。

RGBPoint = RotationMatrix * DepthPoint + TranslationVector

詳細については、OpenCV または ROS プロジェクトを確認してください。

外部キャリブレーション

本質的なキャリブレーション

于 2014-08-06T07:55:22.840 に答える