VisionPro学习笔记(5)——极轴展开工具PolarUnwrapTool
如果需要了解其他图像处理的文章,请移步小编的GitHub地址
传送门:请点击我
如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice
VisionPro有很多的示例和算子,这里展示一个基础的算子Polar Unwrap Tool。我自己的笔记不会按照顺序一一展示出来的,也许那个文章先OK,我会先release出来的。 其中大部分的图片和步骤都是VisionPro的官方文档,我这里只是自己的学习笔记,不做任何商用。
1,VisionPro 界面文档
极轴展开工具编辑控件为 PolarUnwrapTool API 提供图形用户界面,可用于将包含在定义区域内的图形部分变换为矩形图形。该工具生成一个输出图形,其中包含输入区域的变换部分。该编辑控件可用于指定采样模式,缩放因子和要使用的区域形状类型。
有关该编辑控件顶部按钮的说明,请参见主题控件参考。极轴展开工具编辑控件支持以下图像缓冲区:
- Current.InputImage 缓冲区包含该工具将分析的下一个图像以及输入区域的图形。
- LastRun.InputImage 缓冲区包含由极轴展开工具处理的最后一个图像以及您启用的任何图形。
- LastRun.OutputImage 缓冲区包含该工具生成的输出图像。
1,设置
使用设置选项卡选择要使用的采样模式和缩放因子。
使用以下参数配置工具如何展开输入图形
2,区域
使用区域选项卡选择输入区域的形状
使用以下参数配置输入区域
3,图形
使用图形选项卡指定该工具生成和显示的图形
使用图形选项卡的以下选项
2,工具原理——使用极轴展开工具展开圆形特征
极轴展开工具可展开图形的圆形或椭圆形部分以创建矩形图形
应用程序通常使用极轴展开工具来创建输入图像中径向排列的特征的直线排列。有关可与极轴展开工具一起使用的图像类型,请参阅主题视觉工具和支持的图像类型。
极轴展开工具通过以下步骤执行图形变换:
- 1,构造一个变换,将您指定的圆形或者椭圆形环状截面映射到矩形输出图形的边界
- 2,使用此变换将输出图形中像素的中心映射到输入图形中的相应点
- 3,在变换点处对输入图形中的像素进行采样,以计算输出图像中的像素值
2.1 预备知识-图像变换及其采样
1,图形变换
将一个图形变换为另一个图形的过程首先是在源图形中定义一个区域,并描述如何将该区域变换为矩形输出图像。例如,最简单的图像变换是通过指定输入图像的矩形部分和恒等变换来创建新的输出图像,如下图所示:
上图中所示的变换在所选区域中的像素和新图像中的像素之间具有一一对应关系。然而,其他变换并不那么简单。例如,如果提供的矩形输入区域相对于输入图像中的像素旋转,则不可能简单地转录像素值以创建无旋转的矩形输出图像,因为输出图像中的整个像素位置与输入图像中的整个像素位置之间不存在对应关系。
下图显示从旋转输入图像生成的输出图像:
没有直接对应关系的变换的其他示例包括极轴展开变换(如下图所示)和棋盘校准工具生成的非线性变换。
2,变换方法
变换图像的而过程可以分为以下步骤:
1,计算将输入区域映射到输出图像边界的数学变换。特定变换取决于需要执行的图像变换类型,下面是仿射变换,该变换选择输入图像中的矩形区域以生成输出图像。
2,使用此变换将输出图像中每个像素的中心点映射到其在输入图像中的相应位置,下图中的红色箭头显示输出图像左上角像素的中心到输入图像中相应位置的变换。
3,使用本主题后面介绍的采样方法之一,在变换点对输入图像中的像素值进行采样,并将该值指定给输出图像中的像素,该像素的中心在上一步中确定
3,采样方法
选择用于生成输出图像的采样方法确定变换后的输出图像中的像素值。如下图所示,采样点与输入图像中的像素不一致:
执行图像变换的视觉工具让您可选择采样方法。您应该试着使用这些方法,确定哪种方法可以在准确性和执行速度之间达到最佳平衡。
4,最近邻采样
最近邻采样法,如下图所示,将中心离采样点最近的像素的像素值作为采样像素的值:
最近邻采样比任何其他采样方法执行得更快,但它不会产生最准确的变换图像。
5,双线性插值
双线性插值采样方法通过对中心距采样点最近的四个像素点的值进行距离加权平均来计算采样值,如下图所示:
双线性插值产生比最近邻方法更准确的变换,因为它考虑了输入图像中更多像素的值。双线性插值使用以下公式计算采样值:
其中 a、b、c、d 是下图所示的四个距离,归一化使得像素中心之间的距离为 1,p1、p2、p3 和 p4 是下图所示的四个像素的值数字。
6,高精度
高精度采样方法类似于双线性插值,不同之处在于它在确定采样像素的值时考虑了额外的像素。
一般来说,高精度插值提供比双线性插值方法更高的采样精度,但执行速度较慢。
2.2 输入区域和变换
极轴展开工具可展开给定的 CircularAnnulusSection 或 EllipticalAnnulusSection 输入区域,以便变换图像的 x 轴始终对应于该区域的角度方向,而变换图像的 y 轴始终对应于该区域的径向方向。
RadialScale 和 AngleSpan 属性的值确定输出图像中 x 轴和 y 轴与输入区域中半径和角度的增减关系,如图所示:
2.3 输出图像尺寸(采样率)
输入区域中采样点的数量确定输出图像的像素大小。极轴展开工具会自动计算输出图像的大小,以便最大限度地减少图像畸变。对于圆形输入区域,默认的 x 轴大小是内外圆弧长度的平均值,默认 y 轴大小是内外半径的差值,如下图所示:
对于椭圆输入区域,默认的 x 轴大小是内外圆弧长度的平均值,默认 y 轴大小是最大和最小内外半径之差的平均值,如下所示数字:
您可以通过为 ScalingX 和 ScalingY 属性提供值来指定不同的输出图像大小。该工具将计算出的输出图像尺寸乘以您为这些缩放因子指定的值。
3,使用极轴展开工具
极轴展开工具支持最近邻采样和双线性插值。有关使用极轴展开工具的更多信息,请参阅下列各节:
3.1,变换和坐标空间
当在 8 位或 16 位灰度图像上运行极轴展开工具时,该工具会计算将指定的输入区域映射到矩形输出图像的高度非线性变换。该工具不会将此变换添加到输出图像的坐标空间树中。您应该将输出图像视为新采集的图像。它的当前选定空间总是根(“@”)空间,图像的像素空间(“#”)和根空间之间的变换总是恒等变换。
极轴展开工具不会让您直接使用这种非线性变换。但是,您可以使用 GetInputPointFromOutputPoint 和 GetOutputPointFromInputPoint 方法将各个点从输出图像映射到输入图像并返回。
8位和16位灰度图形的区别如下:
3.2 椭圆输入区
极轴展开工具可以使用圆形或椭圆形环形截面作为其输入区域。椭圆环形截面的常见用途是从采集图像时处于一定角度的圆形对象展开特征,如下图所示
3.3 展开超过360度
使用极轴展开工具可以展开多个整圆。可以通过指定大于 360° 或小于 –360° 的角度跨度来完成此操作。这种情况的一个应用是在事先不知道对象方向的情况下展开文本字符串。通过展开 720°,可以确保采集整个字符串的连续副本。
下图显示如何使用更大的角度跨度来确保输出图像中包含文本字符串的完整副本:
另一个常见的应用是检测圆形对象中的缺陷,其中对象的方向未知。如果仅将对象展开 360°,则在缺陷位于输出图像的一端的情况下,可能会遗漏缺陷。通过多展开 10° 到 30°,可以确保无论缺陷的位置如何,都会出现在输出图像中。
下图显示,当缺陷位于角度跨度的起点或终点时,如果指定 AngleSpan 为 360°,则使用斑点工具测量基于面积的缺陷的应用程序是如何失败的。通过将角度跨度增加到 380°,不再遗漏缺陷:
4,QuickBuild 示例
某些视觉应用程序要求您检查以圆弧或整圈打印的文本,例如轮胎或医药帽。例如,下图显示具有曲线文本的零件、要展开的文本区域和展开的文本,然后可以将其传递给 OCRMax 或 OCVMax 工具:
下例显示 QuickBuild 应用程序使用极轴展开工具生成打印在放大镜表面周围的文本输出图像,其中镜头从一个图像旋转到下一个图像,并且文本可能从展开的输出图像中的任何位置开始。
- 配置 QuickBuild 以采集带有圆形文本的零件的图像;来自相机或图像数据库。
- 使用查找圆工具定位零件,该工具会返回圆心处的 (x, y) 坐标,并可用于定位稍后使用的极轴展开工具。
- 将极轴展开工具添加到您的 QuickBuild 应用程序,并将您零件的输入图像传递给它。
- 右键单击极轴展开工具并选择添加引脚:
- 公开极轴展开区域中心的参数作为 QuickBuild 中的输入终端:
QuickBuild 现在显示下列输入终端:
- 将查找圆工具找到的圆的 (x,y) 坐标连接到极轴展开工具中心的 (x,y) 坐标:
- 使用极轴展开编辑控件的区域选项卡,使用交互图形圈住零件上的文本。
将角度跨度设置为 580 以确保输出图像中出现不间断的字符串。有关配置区域和设置超过 360 度的角度跨度的更多信息,请参考上面内容
- 运行极轴展开工具并确认生成的展开图像至少包含一个完整的字符串实例:
生成的输出图像可以传递给其他工具来分析字符串。例如下图显示了经过 OCRMax 工具分析后的字符串:
不经一番彻骨寒 怎得梅花扑鼻香