//private void Stitch() //{ // AccordStitchForm accordStitch = new AccordStitchForm(); // accordStitch.ShowDialog(); // pointsLeft = accordStitch.PointsLeft; // pointsRight = accordStitch.PointsRight; //} public void ShowICPResults(List <Vertex> myVerticesTarget, List <Vertex> myVerticesSource, List <Vertex> myTransformPoints, bool changeColor) { this.OpenGLControl.RemoveAllModels(); //target in green List <float[]> myColors = PointCloudUtils.CreateColorList(myVerticesTarget.Count, 0, 255, 0, 255); if (myVerticesTarget != null) { if (changeColor) { Vertices.SetColorToList(myVerticesTarget, myColors); } this.OpenGLControl.ShowPointCloud("ICP Target", myVerticesTarget); } if (myVerticesSource != null) { //source in white myColors = PointCloudUtils.CreateColorList(myVerticesSource.Count, 255, 255, 255, 255); if (changeColor) { Vertices.SetColorToList(myVerticesSource, myColors); } this.OpenGLControl.ShowPointCloud("ICP To be matched", myVerticesSource); } if (myTransformPoints != null) { //transformed in red myColors = PointCloudUtils.CreateColorList(myTransformPoints.Count, 255, 0, 0, 255); Vertices.SetColorToList(myTransformPoints, myColors); this.OpenGLControl.ShowPointCloud("ICP Solution", myTransformPoints); } }
private List <Vertex> ICPOnPoints_WithSubset_PointsData(List <List <Vertex> > PointsDataList, List <System.Drawing.Point> pointsLeft, List <System.Drawing.Point> pointsRight) { List <Vertex> myPointsTarget = PointsDataList[0]; List <Vertex> mypointsSource = PointsDataList[1]; if (PointsDataList.Count > 1) { if (pointsLeft != null) { List <Vertex> mySubsetLeft = PointCloudUtils.CreateVerticesFromDrawingPoints_IncludingCheck(pointsLeft, PointsDataList[0], pointsRight); List <Vertex> mySubsetRight = PointCloudUtils.CreateVerticesFromDrawingPoints_IncludingCheck(pointsRight, PointsDataList[1], pointsLeft); if (mySubsetLeft.Count == mySubsetRight.Count) { List <Vertex> myPointsTransformed = ICPOnPoints_WithSubset(myPointsTarget, mypointsSource, mySubsetLeft, mySubsetRight); return(myPointsTransformed); } else { MessageBox.Show("Error in identifying stitched points "); } } } return(null); }
public void ShowPointCloud(byte[] mycolorInfo, ushort[] depthInfo, int width, int height) { List <Vector3d> myVectors = Vertices.ConvertToVector3DList_FromArray(depthInfo, width, height); List <float[]> myColors = PointCloudUtils.CreateColorInfo(mycolorInfo, depthInfo, width, height); this.lastPointCloud = myVectors; this.lastColors = myColors; this.OpenGLControl.ShowPointCloud("Color Point Cloud", myVectors, myColors); }
public void TransformPointCloud_SaveObjFile() { //open a file DepthMetaData DepthMetaData = new DepthMetaData(); byte[] colorInfo = null; DepthMetaData.ReadDepthWithColor_OBJ(path, "KinectFace1.obj", ref DepthMetaData.FrameData, ref colorInfo); List <Vector3d> myVectors = Vertices.ConvertToVector3DList_FromArray(DepthMetaData.FrameData, DepthMetaData.XResDefault, DepthMetaData.YResDefault); List <float[]> myColorsFloats = PointCloudUtils.CreateColorInfo(colorInfo, DepthMetaData.FrameData, DepthMetaData.XResDefault, DepthMetaData.YResDefault); List <Vertex> myVertexList = Model3D.CreateVertexList(myVectors, myColorsFloats); VertexUtils.ScaleByFactor(myVertexList, 0.9); VertexUtils.RotateVertices30Degrees(myVertexList); VertexUtils.TranslateVertices(myVertexList, 10, 3, 5); Model3D.Save_ListVertices_Obj(myVertexList, path, "transformed.obj"); }