Skip to content

Commit

Permalink
Samples: Update C# public samples
Browse files Browse the repository at this point in the history
This commit:

- Adds L100 cmaera model to CaptureHDRCompleteSettings.cs
- Improve intrinsic sample to show the difference between fixed and
  estimated intrinsics. See
  https://support.zivid.com/en/latest/reference-articles/camera-intrinsics.html
  for more information.
  • Loading branch information
chrisasc committed Apr 3, 2023
1 parent aa712a5 commit ad99a08
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ static Tuple<double[], int[], double[]> GetExposureValues(Zivid.NET.Camera camer
double[] gain = { 1.0, 1.0, 2.0 };
return Tuple.Create<double[], int[], double[]>(aperture, exposureTime, gain);
}
if(camera.Info.Model == Zivid.NET.CameraInfo.ModelOption.ZividTwo)
if (camera.Info.Model == Zivid.NET.CameraInfo.ModelOption.ZividTwo
|| camera.Info.Model == Zivid.NET.CameraInfo.ModelOption.ZividTwoL100)
{
double[] aperture = { 5.66, 2.38, 1.8 };
int[] exposureTime = { 1677, 5000, 100000 };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Read intrinsic parameters from the Zivid camera (OpenCV model).
Read intrinsic parameters from the Zivid camera (OpenCV model) or estimate them from the point cloud.
Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.
*/
Expand All @@ -8,6 +8,48 @@ Read intrinsic parameters from the Zivid camera (OpenCV model).

class Program
{
static void PrintParameterDelta(String label, Double fixedValue, Double estimatedValue)
{
var delta = fixedValue - estimatedValue;
if (delta != 0)
{
var deltaInPercentage = (100 * delta) / fixedValue;
Console.WriteLine($"{label,6:s}: {delta,6:f2} ({deltaInPercentage,6:f2}% )");
}
}

static void PrintIntrinsicParametersDelta(
Zivid.NET.CameraIntrinsics fixedIntrinsics,
Zivid.NET.CameraIntrinsics estimatedIntrinsics)
{
PrintParameterDelta("CX", fixedIntrinsics.CameraMatrix.CX, estimatedIntrinsics.CameraMatrix.CX);
PrintParameterDelta("CY", fixedIntrinsics.CameraMatrix.CY, estimatedIntrinsics.CameraMatrix.CY);
PrintParameterDelta("FX", fixedIntrinsics.CameraMatrix.FX, estimatedIntrinsics.CameraMatrix.FX);
PrintParameterDelta("FY", fixedIntrinsics.CameraMatrix.FY, estimatedIntrinsics.CameraMatrix.FY);

PrintParameterDelta("K1", fixedIntrinsics.Distortion.K1, estimatedIntrinsics.Distortion.K1);
PrintParameterDelta("K2", fixedIntrinsics.Distortion.K2, estimatedIntrinsics.Distortion.K2);
PrintParameterDelta("K3", fixedIntrinsics.Distortion.K3, estimatedIntrinsics.Distortion.K3);
PrintParameterDelta("P1", fixedIntrinsics.Distortion.P1, estimatedIntrinsics.Distortion.P1);
PrintParameterDelta("P2", fixedIntrinsics.Distortion.P2, estimatedIntrinsics.Distortion.P2);
}

static void PrintIntrinsicParameters(Zivid.NET.CameraIntrinsics intrinsics)
{
Console.WriteLine("Separated camera intrinsic parameters:");

Console.WriteLine($" CX = {intrinsics.CameraMatrix.CX,-7:f2}");
Console.WriteLine($" CY = {intrinsics.CameraMatrix.CY,-7:f2}");
Console.WriteLine($" FX = {intrinsics.CameraMatrix.FX,-7:f2}");
Console.WriteLine($" FY = {intrinsics.CameraMatrix.FY,-7:f2}");

Console.WriteLine($" K1 = {intrinsics.Distortion.K1,-7:f4}");
Console.WriteLine($" K2 = {intrinsics.Distortion.K2,-7:f4}");
Console.WriteLine($" K3 = {intrinsics.Distortion.K3,-7:f4}");
Console.WriteLine($" P1 = {intrinsics.Distortion.P1,-7:f4}");
Console.WriteLine($" P2 = {intrinsics.Distortion.P2,-7:f4}");
}

static int Main()
{
try
Expand All @@ -22,22 +64,24 @@ static int Main()

Console.WriteLine(intrinsics.ToString());

Console.WriteLine("Separated camera intrinsic parameters:");

Console.WriteLine(" CX = " + intrinsics.CameraMatrix.CX.ToString());
Console.WriteLine(" CY = " + intrinsics.CameraMatrix.CY.ToString());
Console.WriteLine(" FX = " + intrinsics.CameraMatrix.FX.ToString());
Console.WriteLine(" FY = " + intrinsics.CameraMatrix.FY.ToString());

Console.WriteLine(" K1 = " + intrinsics.Distortion.K1.ToString());
Console.WriteLine(" K2 = " + intrinsics.Distortion.K2.ToString());
Console.WriteLine(" K3 = " + intrinsics.Distortion.K3.ToString());
Console.WriteLine(" P1 = " + intrinsics.Distortion.P1.ToString());
Console.WriteLine(" P2 = " + intrinsics.Distortion.P2.ToString());

var intrinsicsFile = "Intrinsics.yml";
Console.WriteLine("Saving camera intrinsics to file: " + intrinsicsFile);
intrinsics.Save(intrinsicsFile);

PrintIntrinsicParameters(intrinsics);

Console.WriteLine("\nDifference between fixed intrinsics and estimated intrinsics for different apertures and temperatures:");

foreach (var aperture in new double[] { 11.31, 5.66, 2.83 })
{
var settings = new Zivid.NET.Settings();
settings.Acquisitions.Add(new Zivid.NET.Settings.Acquisition { Aperture = aperture });
var frame = camera.Capture(settings);
var estimatedIntrinsics = Zivid.NET.Experimental.Calibration.Calibrator.EstimateIntrinsics(frame);
var temperature = frame.State.Temperature.Lens;
Console.WriteLine($"\nAperture: {aperture,5:f2}, Lens Temperature: {temperature,5:f2}°C");
PrintIntrinsicParametersDelta(intrinsics, estimatedIntrinsics);
}
}
catch(Exception ex)
{
Expand Down

0 comments on commit ad99a08

Please sign in to comment.