Как масштабировать изображение, чтобы оно соответствовало масштабированному скелету с помощью Kinect

У меня есть скелет, масштабированный до фиксированной высоты на экране (2/3 экрана), теперь я хочу масштабировать изображение (с вычитанием фона), чтобы оно соответствовало этому скелету. Я использую этот метод ниже, чтобы узнать целевое расстояние, чтобы получить фиксированную высоту на экране (независимо от того, насколько далеко или близко находится пользователь), затем я вычисляю вертикальное перемещение, чтобы получить скелет с суставами стопы в нижней части экрана. изображение.

void KinectClass::ScaleJoints(){

//Target Height in screen

double targetAdultHeightScreen = windowHeight*5/6;

double originalAdultDistance = players[0].hipCenter.z;

// Original Height in Screen
originalHeightScreenAdult = SkeletonToScreen(players[0].rightFoot, windowWidth, windowHeight).y - SkeletonToScreen(players[0].head, windowWidth, windowHeight).y;

// Target distance to get target height
AdultscaleDistance = originalHeightScreenAdult * originalAdultDistance/ targetAdultHeightScreen;

//New headJoint scaled to compute vertical translation
Vector4 headJointAdult = {players[0].head.x  ,players[0].head.y , AdultscaleDistance,players[0].head.w};

//Vertical translation
transAdult = windowHeight/6 - SkeletonToScreen(headJointAdult, windowWidth, windowHeight).y;

scaleRatioAdult = originalHeightScreenAdult/targetAdultHeightScreen;

}

Что-то вроде этого:

Чешуйчатый скелет

Теперь мне нужно масштабировать растровое изображение (теперь это размер экрана), чтобы мой скелет совпадал с изображением.

D2D1_SIZE_F screenSize = renderTarget_->GetSize();
//D2D1_RECT_F rec = D2D1::RectF(0,  0, screenSize.width, screenSize.height);

Проблема в том, что теперь мне нужно масштабировать изображение, чтобы оно соответствовало скелету, в котором есть не только пользователь, но и вся сцена (цветовой поток kinect).

Какие преобразования мне нужно применить к этому растровому изображению?


person Tolokobcn    schedule 11.05.2014    source источник


Ответы (1)


Ключом к такому преобразованию является использование следующей функции отображения для каждого сустава скелета:

public ColorImagePoint MapSkeletonPointToColorPoint(SkeletonPoint skeletonPoint, ColorImageFormat colorImageFormat);

После того, как вы перевели все соединения в цветовую плоскость, вы можете выполнить любое масштабирование цветового растрового изображения и просто выполнить точно такое же масштабирование для переведенных точек цвета скелета.

person o_c    schedule 27.05.2014