Question
How do I get the Height value of a point in an image coming from a Gocator?
Answer
The process of getting the height information for a given pixel is the same as for the Gocator itself, and this works for X, Y and Z. The function is:
WorldValue = PixelValue * Resolution + Offset
In the case of Height, you get
Height = ZPixel * ZResolution + ZOffset
In HexSight, the XY values can be gotten directly with the ImageToWorld function, which uses the image calibration to compute it. For the Height, though, you first need to get the ZOffset and ZResolution, and then you can compute the Z value. We have this snippet that you can use, in C#:
HSImage lImage = mApplicationControl.Database.get_Image("Acquisition", "Image"); if (lImage != null) { // Retrieve calibration information HSCalibration cal = lImage.Calibration; float zo = 0; float zr = 0; for (short i = 0; i < cal.ParameterCount; ++i) { string s = (string)cal.get_ParameterName(i).ToString(); if (s == "ZOffset") zo = cal.get_Parameter(i); if (s == "ZResolution") zr = cal.get_Parameter(i); } // Compute Height value for each pixel for (int y = 0; y < lImage.Height; ++y) { for (int x = 0; x < lImage.Width; ++x) { int z = lImage.get_Pixel(x, y); if (z != 0) { float X = x; float Y = y; cal.ImageToWorld(ref X, ref Y); float Z = z * zr + zo; // Do process } } } }
You may notice that the ZOffset is different in the HexSight calibration than in the Gocator itself. This is due to how the image is presented. In the Gocator, the image contains values as a 16bit signed value (-32768 to 32767), while in HexSight, the image is represented as a 16bit unsigned value (0 to 65535).
Comments
0 comments
Please sign in to leave a comment.