VisionPro中的每一幅图像都有自己的坐标空间树,即Coordinate Space Tree,坐标空间树由根空间(root space)与用户空间(user space )组成。在图像处理过程中,通过根空间与用户空间之间的坐标转换实现图像在不同坐标系下的转换,例如,当进行Blob分析时可能需要在根空间下,在进行尺寸测量时,可能需要将坐标空间转换到实际物理坐标系下。VisionPro中坐标空间树可以通过图像的CoordinateSpaceTree属性获取。
用户空间(user space)一定能通过一个或者多个空间变换得到根空间。当用户通过工具为图像创建新的坐标空间时会自动更新图像的坐标空间树,默认情况下后续工具在新的坐标空间下运行,例如,通过CogCalibCheckBoardTool进行处理后得到新的用户坐标系Checkerboard Calibration,默认情况下已新的坐标系为输出空间,也可以在工具中指定所要输出的坐标空间,如下图中红色矩形框所示。
注意:生成的用户坐标空间可以自己命名,但是同一副图像由不同工具进行处理得到新的user Sacpe名字一定不能相同。
当前工具正在使用的坐标空间叫做选中空间(Selected Sapce),工具进行的测量、识别、计算等返回的结果都是在选中空间坐标系下的。当然,VisionPro工具允许使用者在既有的坐标空间中进行选择,计算后得到的位置、距离等结果也可以转换到其他坐标空间中。如下图所示,每一个绿色的箭头都代表一个根空间到用户空间或者用户空间到用户空间坐标转换。Calibrated mm是基于根空间的坐标空间,Label(mm)坐标空间在软盘的标签边角位置以便于完成后续操作。
像素空间与根空间
根空间并不是我们所谓的图像像素空间,根空间是像素空间通过调整之后得到的,两者之间的转化关系VisionPro文档未进行详细说明。像素空间也不出现在坐标空间树中。
坐标空间树提供 获取在不同坐标系之间转换关系的方法,可以实现数据在不同坐标系之间的自由转换。图像的GetTransFrom方法可以获取两个坐标系之间的转换关系。
ICogTransform2D GetTransform(string toSpaceName,string fromSpaceName)
“.”表示当前选中的坐标空间;
“@”表示根空间。
“#”表示像素空间。
例如,下述代码将Fixtured(即SelectedSpaceName)坐标空间的圆心转换为checkboard Calibration坐标下的坐标值(该部分代码截取自项目中Block脚本)
1 //创建线性坐标转换对象
2 CogTransform2DLinear xform;
3 //通过当前Block的输入图像获取转换关系赋值给xform
4 xform = mImage.GetTransform("Checkerboard Calibration",mImage.SelectedSpaceName) as CogTransform2DLinear;
5 double checkBoardx = 0;
6 double checkBoardy = 0;
7 //运行FindCircle工具得到圆心坐标
8 mToolBlock.RunTool(mToolFindCirle0, ref message, ref result);
9 //通过转换关系将圆心坐标转换到checkboard Calibrated坐标空间
10 xform.MapPoint(mToolFindCirle0.Results.GetCircle().CenterX, mToolFindCirle0.Results.GetCircle().CenterY, out checkBoardx, out checkBoardy);
11 //为输出终端赋值
12 mToolBlock.Outputs["X0"].Value = checkBoardx;
13 mToolBlock.Outputs["Y0"].Value = checkBoardy;