本文整理汇总了C#中Matrix.Identity方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix.Identity方法的具体用法?C# Matrix.Identity怎么用?C# Matrix.Identity使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix
的用法示例。
在下文中一共展示了Matrix.Identity方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OptimizePose
public void OptimizePose()
{
UnifyPose();
// joint estimate of projector and camera pose
// minimize wrt T_CjW, T_WPk: Sum_ijk v_ijk [ p_k( T_WPk T_CjW x_i ) - y_ik ]^2
// cameras observe points x_i (in camera coords)
// point x_i is observed to project to point y_ik in projector k
// v_ijk === 1 if point i is observed by camera j and imaged by projector k
// p_k(x) projects point x in projector k; x in projector coordinates
// T_CjW camera j local coordinates to world coordinates
// T_WPk world to projector k coorindates
// efficient implementation: list of points x_ijk for which v_ijk != 0; store j, k with each point x_i
// solve for C_j, P_k; C_0 is not in the set of parameters
// parameters: for each projector and camera: 1 rotation + 1 translation = 6 parameters
// We leave T_C0W fixed, so have 6 * (numProjectors + numCameras - 1) parameters
int nParameters = 6 * (projectors.Count + cameras.Count - 1);
//double[] parameters = new double[nParameters];
var parameters = new Matrix(nParameters, 1);
// loop over room.cameras, room.projectors to form up parameters array
{
int pi = 0; // index into our parameter array
for (int i = 1; i < cameras.Count; i++) // skip first one, which is our root
{
var T = cameras[i].pose;
var R = new Matrix(3, 3);
var t = new Matrix(3, 1);
for (int ii = 0; ii < 3; ii++)
{
t[ii] = T[ii, 3];
for (int jj = 0; jj < 3; jj++)
R[ii, jj] = T[ii, jj];
}
var r = CameraMath.RotationVectorFromRotationMatrix(R);
for (int ii = 0; ii < 3; ii++)
parameters[pi++] = r[ii];
for (int ii = 0; ii < 3; ii++)
parameters[pi++] = t[ii];
}
for (int i = 0; i < projectors.Count; i++)
{
var T = projectors[i].pose;
var R = new Matrix(3, 3);
var t = new Matrix(3, 1);
for (int ii = 0; ii < 3; ii++)
{
t[ii] = T[ii, 3];
for (int jj = 0; jj < 3; jj++)
R[ii, jj] = T[ii, jj];
}
var r = CameraMath.RotationVectorFromRotationMatrix(R);
for (int ii = 0; ii < 3; ii++)
parameters[pi++] = r[ii];
for (int ii = 0; ii < 3; ii++)
parameters[pi++] = t[ii];
}
}
// count the number of values
// use only inliers from previous step
int nValues = 0;
foreach (var projector in projectors)
foreach (var camera in projector.calibrationPointSets.Keys)
nValues += projector.calibrationPointSets[camera].worldPointInliers.Count * 2; // count components
LevenbergMarquardt.Function optimize = delegate(Matrix p)
{
var fvec = new Matrix(nValues, 1);
// convert p to transforms etc.
// convert back to transforms and put back in our structures
int pi = 0; // index into our parameter array
for (int i = 1; i < cameras.Count; i++) // skip first one, which is our root
{
var r = new Matrix(3, 1);
r[0] = p[pi++];
r[1] = p[pi++];
r[2] = p[pi++];
var R = CameraMath.RotationMatrixFromRotationVector(r);
var t = new Matrix(3, 1);
t[0] = p[pi++];
t[1] = p[pi++];
t[2] = p[pi++];
var T = new Matrix(4, 4);
T.Identity();
for (int ii = 0; ii < 3; ii++)
{
for (int jj = 0; jj < 3; jj++)
//.........这里部分代码省略.........
示例2: CalibrateProjectorGroups
//.........这里部分代码省略.........
foreach (var pointSet in projector.calibrationPointSets.Values)
{
var worldPointInlierSet = new List<Matrix>();
var imagePointInlierSet = new List<System.Drawing.PointF>();
//var R = Vision.Orientation.Rodrigues(rotations[setIndex]);
var R = RotationMatrixFromRotationVector(rotations[setIndex]);
var t = translations[setIndex];
var p = new Matrix(3, 1);
for (int k = 0; k < pointSet.worldPoints.Count; k++)
{
p.Mult(R, pointSet.worldPoints[k]);
p.Add(t);
double u, v;
CameraMath.Project(cameraMatrix, distCoeffs, p[0], p[1], p[2], out u, out v);
double dx = pointSet.imagePoints[k].X - u;
double dy = pointSet.imagePoints[k].Y - v;
double thisError = Math.Sqrt((dx * dx) + (dy * dy));
if (thisError < 1.0f)
{
worldPointInlierSet.Add(pointSet.worldPoints[k]);
imagePointInlierSet.Add(pointSet.imagePoints[k]);
}
sumError += thisError * thisError;
pointsInSum++;
}
setIndex++;
// require that each view has a minimum number of inliers
enoughInliers = enoughInliers && (worldPointInlierSet.Count > 1000);
worldPointInlierSets.Add(worldPointInlierSet);
imagePointInlierSets.Add(imagePointInlierSet);
}
// if number of inliers > some threshold (should be for each subset)
if (enoughInliers) // should this threshold be a function of the number of cameras, a percentage?
{
var error2 = CalibrateCamera(worldPointInlierSets, imagePointInlierSets, cameraMatrix, ref rotations, ref translations);
Console.WriteLine("error with inliers = " + error2);
Console.Write("camera matrix = \n" + cameraMatrix);
numCompletedFits++;
// if err < besterr save model (save rotation and translation to calibrationPointSets, cameraMatrix and distortion coeffs to projector)
if (error < minError)
{
minError = error;
projector.cameraMatrix = cameraMatrix;
projector.lensDistortion = distCoeffs;
setIndex = 0;
foreach (var pointSet in projector.calibrationPointSets.Values)
{
// convert to 4x4 transform
var R = RotationMatrixFromRotationVector(rotations[setIndex]);
var t = translations[setIndex];
var T = new Matrix(4, 4);
T.Identity();
for (int ii = 0; ii < 3; ii++)
{
for (int jj = 0; jj < 3; jj++)
T[ii, jj] = R[ii, jj];
T[ii, 3] = t[ii];
}
pointSet.pose = T;
pointSet.worldPointInliers = worldPointInlierSets[setIndex];
pointSet.imagePointInliers = imagePointInlierSets[setIndex];
setIndex++;
}
}
}
}
if (numCompletedFits == 0)
throw new CalibrationFailedException("Unable to successfully calibrate projector: " + projector.name);
Console.WriteLine("final calibration:");
Console.Write("camera matrix = \n" + projector.cameraMatrix);
Console.Write("distortion = \n" + projector.lensDistortion);
Console.WriteLine("error = " + minError);
foreach (var camera in projector.calibrationPointSets.Keys)
{
Console.WriteLine("camera " + camera.name + " pose:");
Console.Write(projector.calibrationPointSets[camera].pose);
}
}
Console.WriteLine("elapsed time " + stopWatch.ElapsedMilliseconds);
}
示例3: CalibrateProjectorGroups
//.........这里部分代码省略.........
}
Console.WriteLine("{0}/{1} inliers", totalInliers, totalPoints);
// if number of inliers > some threshold (should be for each subset)
if (enoughInliers) // should this threshold be a function of the number of cameras, a percentage?
{
double error2;
if (fixIntrinsics)
error2 = CameraMath.CalibrateCameraExtrinsicsOnly(worldPointInlierSets, imagePointInlierSets, cameraMatrix, ref rotations, ref translations);
else
error2 = CameraMath.CalibrateCamera(worldPointInlierSets, imagePointInlierSets, cameraMatrix, ref rotations, ref translations);
Console.WriteLine("error with inliers = " + error2);
Console.Write("camera matrix = \n" + cameraMatrix);
numCompletedFits++;
// if reduced error save model (save rotation and translation to calibrationPointSets, cameraMatrix and distortion coeffs to projector)
if (error2 < minError)
{
minError = error2;
projector.cameraMatrix = cameraMatrix;
projector.lensDistortion = distCoeffs;
setIndex = 0;
foreach (var pointSet in projector.calibrationPointSets.Values)
{
// convert to 4x4 transform
var R = CameraMath.RotationMatrixFromRotationVector(rotations[setIndex]);
var t = translations[setIndex];
var T = new Matrix(4, 4);
T.Identity();
for (int ii = 0; ii < 3; ii++)
{
for (int jj = 0; jj < 3; jj++)
T[ii, jj] = R[ii, jj];
T[ii, 3] = t[ii];
}
pointSet.pose = T;
pointSet.worldPointInliers = worldPointInlierSets[setIndex];
pointSet.imagePointInliers = imagePointInlierSets[setIndex];
setIndex++;
}
}
}
}
if (numCompletedFits == 0)
throw new CalibrationFailedException("Unable to successfully calibrate projector: " + projector.name);
Console.WriteLine("final calibration:");
Console.Write("camera matrix = \n" + projector.cameraMatrix);
Console.Write("distortion = \n" + projector.lensDistortion);
Console.WriteLine("error = " + minError);
foreach (var camera in projector.calibrationPointSets.Keys)
{
Console.WriteLine("camera " + camera.name + " pose:");
Console.Write(projector.calibrationPointSets[camera].pose);
}
}
示例4: Identity
public static Matrix Identity(int m, int n)
{
var A = new Matrix(m, n);
A.Identity();
return A;
}