2014-11-04 73 views
0

我正在試驗kinect,但是我在縮放時遇到了一些問題。下面是來自kinect-kcb的代碼,雖然面部跟蹤適用於「網格」,但我在爲自己的類返回縮放值時遇到問題。下面的代碼返回一個正確的旋轉和平移,它的功能是完美的,但是這個尺度只能在很長一段時間內返回1(儘管網格尺寸明顯變化),然後慢慢變小0.98 ...等,但顯然不是正確的縮放值。Kinect在C++中的縮放

float scale; 
float rotation[ 3 ]; 
float translation[ 3 ]; 
hr = mResult->Get3DPose(&scale, rotation, translation); 
if (SUCCEEDED(hr)) { 
    Vec3f r(rotation[ 0 ], rotation[ 1 ], rotation[ 2 ]); 
    Vec3f t(translation[ 0 ], translation[ 1 ], translation[ 2 ]); 

    face.mPoseMatrix.translate(t); 
    face.mPoseMatrix.rotate(r); 
    face.mPoseMatrix.translate(-t); 
    face.mPoseMatrix.translate(t); 
    face.mPoseMatrix.scale(Vec3f::one() * scale); 
} 

此比例值被重複使用thoughout的代碼,但似乎沒有足夠經常改變(例如功能 - 不按順序):

hr = mModel->Get3DShape(shapeUnits, numShapeUnits, animationUnits, numAnimationUnits, scale, rotation, translation, pts, numVertices); 

hr = mModel->GetProjectedShape(&mConfigColor, mSensorData.ZoomFactor, viewOffset, shapeUnits, numShapeUnits, animationUnits, 
          numAnimationUnits, scale, rotation, translation, pts, numVertices); 

Kinect的具有功能FaceModel.Scale( ),但是這隻會返回一個常數值,我假設它是3D模型的初始縮放值,然後我假設上面的縮放值會隨着用戶離攝影機越來越近而改變。

+0

所以即時猜測你的目標是使用比例值來嘗試和判斷距相機的距離? – ldgorman 2014-11-05 11:58:18

+0

我最終發現了三維模型的z值(希望有一個更好的方法)。謝謝你的幫助 :)。 – user1546650 2014-11-05 14:41:07

回答

1

方法IFTResult::Get3DPose除了別的以外,給你的臉比例尺值。如果它等於1.0,那麼臉部比例等於加載的3D模型(所以不需要做什麼?)。

如果重新加載3d模型時,面值不等於1.0,那麼您需要在模型上進行工作。

你試過輸出一些關於IFTResult :: Get3DPose分配給pScale的調試信息嗎?

它也有可能是系統未能跟蹤,你可以用IFTResult::GetStatus來檢查。

這可能是你所追求的是face rectangle的大小。這將隨着圖像主體的接近而縮放。

Heres相關代碼項目鏈接。

+0

嗨,謝謝你的迴應。這就是我一直在做的事情。我必須小心理解,但即使模型正在改變大小,然後跳轉到0.984683一段時間,即使模型繼續快速改變大小等,pScale輸出1.0也是如此。它似乎沒有像預期的那樣行爲?我的調試看起來像pScale = 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,9.8 ...,9.8,...,9.8 ... ,9.8儘管經常移動的用戶。 – user1546650 2014-11-04 16:29:54

+0

是否有可能您對面部矩形的大小感興趣,我認爲我們一直在討論的比例值與3D幾何有關 – ldgorman 2014-11-04 16:34:05

+0

我很擔心這一點。我想我知道你的意思。我認爲最好的方法就是手動計算它。感謝您的幫助:)。 – user1546650 2014-11-04 16:57:37