read registration output
This commit is contained in:
@@ -90,7 +90,7 @@ namespace PointCloudWeb.Server.Models
|
|||||||
stringBuilder.Append("ply\n");
|
stringBuilder.Append("ply\n");
|
||||||
stringBuilder.Append("format ascii 1.0\n");
|
stringBuilder.Append("format ascii 1.0\n");
|
||||||
|
|
||||||
stringBuilder.Append($"element vertex COUNT_PLACEHOLDER {Points.Count}\n");
|
stringBuilder.Append("element vertex COUNT_PLACEHOLDER\n");
|
||||||
stringBuilder.Append("property float x\n");
|
stringBuilder.Append("property float x\n");
|
||||||
stringBuilder.Append("property float y\n");
|
stringBuilder.Append("property float y\n");
|
||||||
stringBuilder.Append("property float z\n");
|
stringBuilder.Append("property float z\n");
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Numerics;
|
||||||
using PointCloudWeb.Server.Models;
|
using PointCloudWeb.Server.Models;
|
||||||
|
using PointCloudWeb.Server.Utils;
|
||||||
|
|
||||||
|
// ReSharper disable PossibleMultipleEnumeration
|
||||||
|
|
||||||
namespace PointCloudWeb.Server.Services
|
namespace PointCloudWeb.Server.Services
|
||||||
{
|
{
|
||||||
@@ -13,92 +18,66 @@ namespace PointCloudWeb.Server.Services
|
|||||||
var sourceFileName = Globals.TempPath + $"/{source.Id}.ply";
|
var sourceFileName = Globals.TempPath + $"/{source.Id}.ply";
|
||||||
var targetFileName = Globals.TempPath + $"/{target.Id}.ply";
|
var targetFileName = Globals.TempPath + $"/{target.Id}.ply";
|
||||||
|
|
||||||
|
var outputFileName = Globals.TempPath + $"/{target.Id}.txt";
|
||||||
|
|
||||||
var maxPoints = 5_000;
|
var maxPoints = 5_000;
|
||||||
|
|
||||||
|
|
||||||
// var p = new Process();
|
|
||||||
// var info = new ProcessStartInfo
|
|
||||||
// {
|
|
||||||
// FileName = "cmd.exe",
|
|
||||||
// RedirectStandardInput = true,
|
|
||||||
// RedirectStandardOutput = true,
|
|
||||||
// UseShellExecute = false,
|
|
||||||
// Verb = "OPEN",
|
|
||||||
// CreateNoWindow = false,
|
|
||||||
// WindowStyle = ProcessWindowStyle.Normal
|
|
||||||
// };
|
|
||||||
// p.StartInfo = info;
|
|
||||||
// p.Start();
|
|
||||||
//
|
|
||||||
// using var sw = p.StandardInput;
|
|
||||||
// if (sw.BaseStream.CanWrite)
|
|
||||||
// {
|
|
||||||
// // sw.Write("wsl \n");
|
|
||||||
// // sw.Write("echo \"Test\" \n");
|
|
||||||
// // sw.Write("echo curl https://www.google.de \n");
|
|
||||||
// // sw.Write("exit \n");
|
|
||||||
// // sw.Write("exit \n");
|
|
||||||
//
|
|
||||||
// //sw.Write("wsl curl https://www.google.de & exit \n");
|
|
||||||
//
|
|
||||||
// sw.Write("wsl echo \"Test\" >> /mnt/c/Users/timwu/test.txt & exit \n");
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// var outputN = p.StandardOutput.ReadToEnd();
|
|
||||||
// Console.WriteLine(outputN[..Math.Min(outputN.Length, 100)]);
|
|
||||||
//
|
|
||||||
// p.WaitForExit();
|
|
||||||
//
|
|
||||||
// Console.WriteLine($"RegistrationExitCode: {p.ExitCode}");
|
|
||||||
|
|
||||||
source.WriteToPly(sourceFileName, maxPoints);
|
source.WriteToPly(sourceFileName, maxPoints);
|
||||||
target.WriteToPly(targetFileName, maxPoints);
|
target.WriteToPly(targetFileName, maxPoints);
|
||||||
|
|
||||||
// var teaserPp = new Process();
|
|
||||||
// teaserPp.StartInfo.FileName = "C:\\Windows\\System32\\wsl.exe";
|
|
||||||
// // teaserPp.StartInfo.FileName = "wsl";
|
|
||||||
// teaserPp.StartInfo.Arguments = "curl https://www.google.de";
|
|
||||||
// // teaserPp.StartInfo.Arguments = $"\"{sourceFileName}\" \"{targetFileName}\"";
|
|
||||||
// //teaserPp.StartInfo.Arguments = $" ls "; //{Globals.ToWslPath(Globals.TeaserPp)} ";// +
|
|
||||||
// //"\"/mnt/c/Users/timwu/source/repos/PointCloudWeb/PointCloudWeb.Server/Tools/TEASERpp/c4b9b7fc-0b97-4f52-ad1b-737aeca5ba97.ply\" " +
|
|
||||||
// //"\"/mnt/c/Users/timwu/source/repos/PointCloudWeb/PointCloudWeb.Server/Tools/TEASERpp/c620b175-ace8-42e5-bf29-55b6c99372bc.ply\" ";
|
|
||||||
//
|
|
||||||
// teaserPp.StartInfo.RedirectStandardOutput = true;
|
|
||||||
// teaserPp.Start();
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// var output = teaserPp.StandardOutput.ReadToEnd();
|
|
||||||
// Console.WriteLine(output[..Math.Min(output.Length, 100)]);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// teaserPp.WaitForExit();
|
|
||||||
//
|
|
||||||
// Console.WriteLine($"RegistrationExitCode: {teaserPp.ExitCode}");
|
|
||||||
|
|
||||||
|
|
||||||
var teaserPp = new Process();
|
var teaserPp = new Process();
|
||||||
teaserPp.StartInfo.FileName = "wsl";
|
teaserPp.StartInfo.FileName = "wsl";
|
||||||
teaserPp.StartInfo.Arguments =
|
teaserPp.StartInfo.Arguments =
|
||||||
$"{Globals.ToWslPath(Globals.TeaserPp)} " +
|
$"{Globals.ToWslPath(Globals.TeaserPp)} " +
|
||||||
"\"/mnt/c/Users/timwu/source/repos/PointCloudWeb/PointCloudWeb.Server/Tools/TEASERpp/c4b9b7fc-0b97-4f52-ad1b-737aeca5ba97.ply\" " +
|
$"\"{Globals.ToWslPath(outputFileName)}\" " +
|
||||||
"\"/mnt/c/Users/timwu/source/repos/PointCloudWeb/PointCloudWeb.Server/Tools/TEASERpp/c620b175-ace8-42e5-bf29-55b6c99372bc.ply\" ";
|
$"\"{Globals.ToWslPath(sourceFileName)}\" " +
|
||||||
|
$"\"{Globals.ToWslPath(targetFileName)}\" ";
|
||||||
|
|
||||||
// teaserPp.StartInfo.RedirectStandardOutput = true;
|
|
||||||
teaserPp.Start();
|
teaserPp.Start();
|
||||||
|
|
||||||
|
|
||||||
// var output = teaserPp.StandardOutput.ReadToEnd();
|
|
||||||
// Console.WriteLine(output[..Math.Min(output.Length, 100)]);
|
|
||||||
|
|
||||||
|
|
||||||
teaserPp.WaitForExit();
|
teaserPp.WaitForExit();
|
||||||
|
|
||||||
Console.WriteLine($"RegistrationExitCode: {teaserPp.ExitCode}");
|
//Console.WriteLine($"RegistrationExitCode: {teaserPp.ExitCode}");
|
||||||
|
|
||||||
var result = new RegistrationResult();
|
var result = new RegistrationResult();
|
||||||
|
|
||||||
|
// if (teaserPp.ExitCode != 0)
|
||||||
|
// return result;
|
||||||
|
|
||||||
|
var lines = File.ReadAllLines(outputFileName).ToList();
|
||||||
|
while (lines.Any(s => s.Contains(" ")))
|
||||||
|
lines = lines.Select(s =>
|
||||||
|
{
|
||||||
|
var newString = s.Replace(" ", " ");
|
||||||
|
if (newString.Length > 0 && newString[0] == ' ')
|
||||||
|
newString = newString.Remove(0, 1);
|
||||||
|
return newString;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
var rotationIndex = lines.FindIndex(s => s.Contains("Estimated rotation:"));
|
||||||
|
var translationIndex = lines.FindIndex(s => s.Contains("Estimated translation:"));
|
||||||
|
|
||||||
|
var ci = CultureInfo.InvariantCulture;
|
||||||
|
|
||||||
|
var rotationMatrix = Matrix4x4.Identity;
|
||||||
|
rotationMatrix.M11 = float.Parse(lines[rotationIndex + 1].Split(' ')[0], ci);
|
||||||
|
rotationMatrix.M12 = float.Parse(lines[rotationIndex + 1].Split(' ')[1], ci);
|
||||||
|
rotationMatrix.M13 = float.Parse(lines[rotationIndex + 1].Split(' ')[2], ci);
|
||||||
|
rotationMatrix.M21 = float.Parse(lines[rotationIndex + 2].Split(' ')[0], ci);
|
||||||
|
rotationMatrix.M22 = float.Parse(lines[rotationIndex + 2].Split(' ')[1], ci);
|
||||||
|
rotationMatrix.M23 = float.Parse(lines[rotationIndex + 2].Split(' ')[2], ci);
|
||||||
|
rotationMatrix.M31 = float.Parse(lines[rotationIndex + 3].Split(' ')[0], ci);
|
||||||
|
rotationMatrix.M32 = float.Parse(lines[rotationIndex + 3].Split(' ')[1], ci);
|
||||||
|
rotationMatrix.M33 = float.Parse(lines[rotationIndex + 3].Split(' ')[2], ci);
|
||||||
|
|
||||||
|
result.Rotation = MatrixUtils.RotationMatrixToAngles(rotationMatrix);
|
||||||
|
|
||||||
|
var transformation = Vector3.Zero;
|
||||||
|
transformation.X = float.Parse(lines[translationIndex + 1], ci);
|
||||||
|
transformation.Y = float.Parse(lines[translationIndex + 2], ci);
|
||||||
|
transformation.Z = float.Parse(lines[translationIndex + 3], ci);
|
||||||
|
|
||||||
|
result.Transformation = transformation;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Numerics;
|
||||||
|
|
||||||
|
namespace PointCloudWeb.Server.Utils
|
||||||
|
{
|
||||||
|
public class MatrixUtils
|
||||||
|
{
|
||||||
|
public static Vector3 RotationMatrixToAngles(Matrix4x4 m)
|
||||||
|
{
|
||||||
|
var result = Vector3.Zero;
|
||||||
|
|
||||||
|
result.X = (float)Math.Atan2(m.M32, m.M33);
|
||||||
|
result.Y = (float)Math.Atan2(-m.M31, Math.Sqrt(m.M32 * m.M32 + m.M33 * m.M33));
|
||||||
|
result.Z = (float)Math.Atan2(m.M21, m.M11);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ inline double getAngularError(Eigen::Matrix3d R_exp, Eigen::Matrix3d R_est)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
std::ofstream out("/mnt/c/Users/timwu/source/repos/PointCloudWeb/PointCloudWeb.Server/Tools/TEASERpp/build/out.txt");
|
std::ofstream out(argv[1]);
|
||||||
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
|
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
|
||||||
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
|
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
|
||||||
|
|
||||||
@@ -34,8 +34,8 @@ int main(int argc, char **argv)
|
|||||||
for (int i = 0; i < argc; ++i)
|
for (int i = 0; i < argc; ++i)
|
||||||
std::cout << argv[i] << "\n";
|
std::cout << argv[i] << "\n";
|
||||||
|
|
||||||
auto src_fileName = argv[1];
|
auto src_fileName = argv[2];
|
||||||
auto tgt_fileName = argv[2];
|
auto tgt_fileName = argv[3];
|
||||||
|
|
||||||
// Load the .ply file
|
// Load the .ply file
|
||||||
teaser::PLYReader reader;
|
teaser::PLYReader reader;
|
||||||
|
|||||||
Reference in New Issue
Block a user