CogCaliperTool

关于visionpro工具的博客偏少,以下是本人自己查阅visionpro官方文档完成的(注意标红的计分函数模式):

本主题介绍Caliper工具,这是一种视觉工具,可在图像的定义明确的区域内提供快速准确的图案检测和定位。

卡尺工具概述

卡尺工具是一种视觉工具,用于测量图像中物体的宽度、边缘或特征的位置以及成对边缘的位置和间距。卡尺工具与其他视觉工具的不同之处在于,它要求您知道要测量或定位的特征或边的大致位置和特征。卡尺工具通常用于开发有关对象内特征精确位置的详细信息。它不适合开发有关对象或特征形状的信息。Caliper工具使用边缘模式方法定位图像中的边缘或边缘对,其中使用简单的一维内核检测边缘峰值。

确定图像中感兴趣的边缘或边对的位置和方向后,执行以下步骤来应用Caliper工具:

1、 指定包含感兴趣的边或边对的投影区域。

2、选择过滤器大小和对比度阈值  

3、定义描述感兴趣的边或边对的边模型。

4、定义用于对图像中的候选边缘图案进行评分的评分方法。

5、应用卡尺工具并解释结果。 

使用“卡尺”工具的第一步是在图像中指定要应用该工具的投影区域。Caliper工具依赖于精心定义的投影区域,仅将边缘信息与图像的一小部分隔离开来。可以通过以下任一方式为“卡尺”工具指定投影区域:

1、 提供仿射矩形和仿射采样参数

2、 定义投影区域的位置、大小以及倾斜和旋转角度

通常,投影区域包含具有感兴趣特征的图像部分。投影操作对投影区域中的所有信息求和,从而增强平行于投影光线的边的强度,并减少噪声的影响。

图1显示了投影如何突出二维图像中的边缘信息。请注意,边缘的强度在投影图像中比在初始图像中更强,图1用投影强调边缘信息 。

Projection region:投影区域

Projection direction:投影方向

Edges of interest:感兴趣的边缘

卡尺工具生成投影图像后,将使用边缘模式定位边缘。 

边缘模式  

本节介绍“卡尺”工具如何在边缘模式下检测边缘。

过滤Caliper工具使用投影区域生成包含感兴趣边缘的图像部分的一维表示。该一维投影图像不仅包含感兴趣的边缘,还包含由原始图像中的噪声和不需要的信息引起的其他边缘。将滤波器应用于一维投影图像增加了感兴趣的边缘的强度,同时减少了图像噪声。Caliper工具通过使用滤波器算子对一维投影图像进行卷积来执行滤波。滤波算子是算术算子块,其被顺序地应用于一维投影图像内的像素块以产生滤波图像中的像素值。

图2展示了一个简单的三元滤波器运算符的示例。在这种情况下,滤波器算子减去每个像素的左邻居的值,并将每个像素的右邻居的值相加,以产生滤波图像中的像素值。

图2:过滤投影图像 

 过滤后的图像在视觉上不再类似于输入图像。然而,它确实有一个重要的新特性:滤波像素值的图表显示,值中的峰值,无论是正的还是负的,都对应于初始图像中边缘的位置。Caliper工具使用过滤图像中的这些峰值来确定原始图像中边缘的位置。除了产生具有与输入图像中的边缘相对应的峰值的图像之外,图像滤波还从输入图像中去除噪声和伪边缘。图3展示了一个示例,其中图像包含两个真实边缘以及由边缘周围像素值变化引起的伪边缘。当将大小为1的滤波器应用于图像时,感兴趣的边缘和伪边缘都在滤波的投影图像中表现为峰值。

图3:过滤器大小为1的过滤 

图4显示了应用宽度为2的过滤器的效果。与感兴趣的边缘相对应的峰值更宽,并且图3中的大多数杂散峰值不再存在于滤波投影图像中。 

图4:过滤器大小为2的过滤  

边缘模式评分  

一旦定位了原始图像中的边缘,Caliper工具就会为图像中的每个潜在边缘图案计算一个分数。图像中每个边缘图案的分数是根据图像中的边缘图案与您定义的理想边缘图案之间的相似性计算的。图像中的边缘图案被称为边缘图案候选者,而理想的边缘图案则被称为边界模型。可以定义包含单个边或一对边的边模型。

通过执行以下步骤,可以控制“卡尺”工具用于对候选边缘图案进行评分的方法:

1、 定义描述要搜索的边或边对的边模型。

2、 定义一个或多个评分方法,该方法定义如何评估边缘模式候选者与边缘模型的相似性。

边缘模型是对希望在图像中看到的边缘图案的描述。边缘模型包括边缘间距、位置和极性(暗到亮或亮到暗)。对于图像中的每个候选边缘图案,Caliper工具会计算一个分数。在计算每条边的总体分数时,可以指定如何精确评估每条边的属性,例如位置、强度或极性。该工具根据您提供的评分方法为每个候选边缘模式的每个属性计算一个单独的值,然后通过组合各个分数来计算每个候选边缘图案的总体分数。 

卡尺工具结果卡尺工具返回图像中所有候选边缘图案的总体分数和位置,这些候选边缘图案获得的分数高于您提供的最低验收分数。您也可以从Caliper工具请求中间结果,例如投影图像、过滤图像和图像中所有单个边缘峰值的列表。 

指定投影区域 

 指定投影时,可以在输入图像中定义矩形或平行四边形区域。您应该定义这个矩形区域,以便

1 、图像中感兴趣的边缘平行于投影方向。

2、 投影区域包围尽可能多的边缘,同时包围尽可能少的附加区域。

可以通过提供仿射矩形来定义投影区域。

指定仿射矩形和采样参数  

可以将投影区域指定为仿射矩形和仿射矩形采样参数。投影方向被定义为平行于仿射矩形的Po-Py侧,并且由仿射采样参数指定的Po-Px划分的数量定义了投影区域中的样本数量。图5显示了仿射矩形和仿射矩形采样参数如何确定投影区域。

图5:由仿射矩形和采样参数定义的投影区域  

指定仿射矩形  

通过向函数调用或对象构造函数提供定义矩形所需的所有参数,可以指定仿射矩形。图6显示了构造函数或函数调用如何使用指定的参数来构造仿射矩形。

图6:创建仿射矩形。  

仿射矩形采样 

用于对图像内的仿射矩形进行采样的定义包括仿射矩形的定义和将其划分成的仿射像素的数量。仿射像素被设置为与正被采样的图像中的像素的大小相同。表示输入图像客户端坐标系的对齐正交变换的仿射矩形可以用于创建仿射样本,而不需要执行复杂的处理。如果仿射矩形没有,则必须应用某种采样来生成采样图像。图9说明了这个问题。

图9:正交和非正交仿射采样矩形

Affine samping rectangle:仿射采样矩阵

 

 通过对像素网格进行采样以产生采样图像,解决了在对未与输入图像的像素网格对齐的仿射矩形进行采样时确定像素值的问题。Caliper工具支持双线性插值采样。 

双线性插值 

双线性插值考虑仿射采样矩形中最靠近每个仿射像素中心的四个像素的值。计算四个像素的值的距离加权平均值并将其用于仿射像素的值。图10显示了如何计算双线性插值。

图10:双线性插值 

unrotated pixel grid:未旋转的像素网格

Affine rectangle grid:仿射矩阵网格

Affine pixel being computed:被计算的仿射像素

 

插值仿射像素的值使用以下公式计算:

其中a、b、c和d是图10中所示的四个距离,归一化后像素中心之间的距离为1。p1、p2、p3和p4是图10中所示的四个像素的值。图12显示了双线性插值将如何生成如图9所示的仿射采样图像。仿射像素的中心显示为灰十字,用于计算每个仿射像素的四个像素被重边界包围。

图12:计算插值样本图像

interpolation computation:插值计算

 

计算出的插值像素值四舍五入到最接近的整数值。  

 剪裁的投影 

当投影被旋转或偏斜时,投影区域可以延伸到图像的边界之外,特别是当投影区域的大小接近图像时。图13显示了延伸到图像外部的投影区域;剪切的区域显示为灰色。

图13:剪裁投影 

如果检测到剪裁,“卡尺”工具会自动调整投影区域。Caliper工具在计算投影图像时通过计算权重图像来检测剪裁。权重图像是一维图像,其中每个像素被设置为来自输入图像的对投影图像中的对应像素有贡献的像素的数量。图14显示了如何计算权重图像。

图14:基于权重图像的自动剪裁  

卡尺工具调整投影图像的大小,以便不包括权重为零的像素。当Caliper工具生成过滤后的图像并执行峰值检测时,它会根据对每个投影图像像素有贡献的源图像像素数自动对投影图像进行归一化。 

边缘模式边缘检测  

指定过滤器 

“Caliper”工具指定的过滤器大小和类型控制该工具如何从输入图像中去除噪波,以及如何突出图像中的感兴趣峰值。 

过滤器大小

您应该指定一个与输入图像中的边缘大小紧密匹配的过滤器大小。边缘的大小是边缘宽度的像素数。边缘可以是尖锐的,在这种情况下,边缘只跨越一个或两个像素,或者边缘可以是钝的,在那种情况下,它们可能跨越多个像素。图15展示了锐边和钝边的示例;该图示出了在不同放大倍率下的两种类型的边缘。

图15:锐边和钝边 

当指定的过滤器大小接近边缘大小时,“卡尺”工具会在过滤器图像中产生更强的边缘峰值。如果指定的过滤器大小过大或过小,则过滤器图像将包含较宽、较低的峰值。图16说明了将不同尺寸的过滤器应用于尖锐和钝边的效果。

图16:滤波器大小和边缘大小对峰值大小的影响  

图16显示,滤波器大小与图像中感兴趣边缘的大小匹配得越紧密,滤波图像中所需的峰值就越尖锐,杂散峰值就越少。 

滤波器类型

Caliper工具支持近似高斯分布一阶导数负值的滤波器内核。这个内核提供了比传统的盒式滤波器更好的平滑。指定滤波器的半宽度,其中半宽度等于高斯分布西格玛的四倍。图17说明了如何指定过滤器的宽度。

图17:高斯滤波器的滤波器大小  

滤波器本身是通过取高斯曲线一阶导数的负值来构建的,如图18所示。

图18:构建过滤器  

峰值检测或对比度阈值

卡尺工具用于定义最小峰值高度或对比度阀值。任何低于最小峰值高度的峰值都将被排除在结果之外。这允许您将对图像中边缘的分析限制为仅限于特定大小的边缘。将对比度阈值指定为边两侧之间的标准化像素值之差。  

边缘模式评分 (卡尺工具这部分需要认真理解

卡尺工具过滤投影图像并生成超过对比度的边缘峰值列表,该工具将计算图像中每个候选边缘图案的分数。该分数使您的应用程序可以确定图像中的哪些候选边缘模式代表由您的边缘模型定义的实际感兴趣的边缘模式的实例。Caliper工具根据您提供的一组评分标准,通过将候选边缘模式与边缘模型进行比较来计算每个候选边缘模式的分数。这些标准被称为评分方法。 

评分方法包括两个部分:

1、 一种评分方法类型,用于定义要评估的边的测量值。

2、一个评分函数,用于定义原始测量值和将为评分方法生成的映射分数之间的关系。

您可以定义多种评分方法。Caliper工具将所有评分方法应用于图像中的每个候选边缘图案,并返回每个候选边缘模式的总体评分。通过定义适当的评分方法,可以确保得分最高的边缘模式候选者将是感兴趣的边缘模式。 

边缘模型

若要评估图像中的候选边缘模式是否与您要查找的边缘模式匹配,必须定义一个描述感兴趣的边缘模式的模型。通过指定模型中每条边的极性(亮到暗或暗到亮)和位置来定义边模型。可以指定边相对于模型原点的位置。使用“卡尺”工具可以定义具有单个边或一对边的边模型。表1描述了具有一对对称边的边模型。模型的原点位于两条边的中心。 

图19显示了表1中描述的边缘模型的理想化图形表示。请注意,模型原点的位置由边位置的值表示。

图19:边缘模型的理想化表示  

评分方法类型Caliper工具根据候选边缘模式与边缘模型的不同程度来对候选边缘模式进行评分。您可以指定该工具用于评估此差异的特定度量。可以指定的度量类型称为评分方法类型。可用的评分方法类型有 :

1、Position (位置)
2、Size (尺寸)
3、Contrast (对比度)
4、Straddle (跨度)

当该工具将评分方法类型应用于边缘模式候选者时,结果是原始分数。对于不同的评分方法类型,原始评分是不同的。以下各节介绍了评分方法类型及其原始评分。

位置评分方法

您可以根据候选边缘填充图案相对于为此“井径仪”工具指定的投影区域中心的位置,对该边缘填充图案进行评分。该位置定义为候选边缘图案内的中心和模型原点之间的距离。 

如果您希望感兴趣的边缘与投影区域的中心相距特定距离,则可以定义绝对位置评分方法,原始评分将表示为像素的绝对距离。

如果使用的是边对模型,并且希望考虑候选边图案和投影区域中心之间的位置相对于模型大小的变化,则可以定义相对位置评分方法。在这种情况下,原始分数将被归一化,因此值为1.0意味着距离等于模型的大小。 

尺寸评分方法

如果使用边对模型,可以根据边之间的宽度对候选边模式进行评分。边缘模式候选者的宽度随边缘模型的边缘之间的宽度而变化。您可以将大小评分方法定义为绝对值,在这种情况下,原始分数将作为像素的绝对大小差返回。如果您想考虑相对于模型大小的大小差异,可以定义一种相对大小的评分方法。在这种情况下,原始分数将被归一化,因此值为1.0意味着大小差等于模型的大小。 

对比度评分方法

您可以根据边缘模式候选者的对比度对边缘模式候选者进行评分。边缘的对比度用像素值的变化除以边缘的像素大小来表示。对比度评分方法的原始评分被归一化,使得1.0的值等于256的对比度(对比度的最大可能值)。如果指定边对模型,则原始分数是两条边的对比度的平均值。

跨区评分方法

如果使用边对模型,可以根据两条边是否位于投影区域中心的任一侧来对候选边对进行评分。这种类型的评分方法可用于找到由一对边缘定义的物体,这些边缘预计位于投影区域的中心下方。如果投影区域的中心被边缘跨坐,则原始分数返回为1.0,如果投影区域中心没有被边缘跨坐,则原始得分返回为0.0。  

评分功能

对于每种评分方法,所选的评分方法类型都会生成一个原始分数。通过定义评分函数,可以控制此原始分数对边缘模式候选者的总体分数的影响。评分函数将原始分数映射到映射的分数。将边缘模式候选者的每种评分方法的映射的分数进行组合,以形成该边缘图案候选者的总体分数。通过指定输入值和输出值的高低来定义评分函数。图20显示了一个评分函数。

图20:评分功能 

通过定义xc、x1、x0、y1和y0的值来定义评分函数。卡尺工具使用您定义的评分功能将原始分数映射到映射的分数,如下所示。x0以上的原始分数被映射到y0的分数。低于xc的原始分数被映射到0的分数。xc和x1之间的原始分数被映射到y1的分数。x1和x0之间的原始分数被线性映射到y1和y0之间的分数范围。为y0和y1定义的值必须介于0.0和1.0之间。可以为xc、x1和x0指定任何值,包括负值。如果您希望原始分数小于零,则可以为xc、x1和x0中的一个或多个点指定负值。 

图20所示的评分函数适用于原始分数越高应产生映射分数越高的情况,例如边缘对比度越大应产生越高分数的对比度评分方法。在其他情况下,例如边缘图案候选者被期望在投影区域的中心处或附近的位置评分方法,较高的原始分数应导致较低的映射分数。在这种情况下,您可以为x1指定一个大于x0的值,为xc指定一个小于x0的数值。图21显示了适用于原始分数越高,映射分数越低的情况的评分函数。 

图21:x1大于x0的评分函数  

虽然每个卡尺工具可以指定任意数量的几何评分方法,但每个评分方法只能指定一个评分函数。 

定义双面评分

函数如果使用的是边对模型,并且指定了双面大小的评分方法类型,则可以定义一个评分函数,该函数对小于边模型的候选边模式与大于边模型的备选边模式进行不同的评分。这种类型的评分函数称为双侧评分函数。图22显示了一个双边评分函数的示例,该函数对比边缘模型大的边缘模式候选者比对更小的边缘模式候选项更宽容。如果候选边缘模式与边缘模型大小完全相同,则原始分数将为0.0;如果边缘模式候选者小于边缘模型,则原始分数将小于0;如果候选边缘模式大于边缘模型,则原始分数将大于0。  

如果指定双面评分函数,则会对原始分数进行归一化,从而使比边缘模型小等于边缘模型大小的候选边缘模式获得-1.0的原始分数,而比边缘模型大等于边缘模型尺寸的候选边缘图案获得1.0的原始分数。

图22:双侧评分功能 

图22显示了一个双侧评分函数,y1和y1h的值不同,但y0和y0h的值相同。虽然可以为y0和y0h指定不同的值,但所得的评分函数在x0b处包含不连续性。图23显示了一个评分函数,其中y0h不同于y0。

图23:另一个双侧评分函数  

还可以为值范围之外的原始分值获得更高分数的情况指定双侧评分函数。图24显示了这种类型的双侧评分函数的一个示例。

图24:中心输出值低的双侧评分功能  

计算边缘模式候选者的总分 

 对于每个候选边缘图案,一旦Caliper工具计算出每个评分方法的原始分数并应用该评分方法的评分函数,它就会计算出候选边缘图案的总体分数。Caliper工具通过取映射的分数的乘积的第N个根来计算候选边缘图案的总体分数。例如,如果定义了四种评分方法,则Caliper工具会将这四种评分相乘,并取结果的4次根式。请注意,如果任何单个评分函数产生的值为0,则边缘模式候选者的总得分也将为0。图25显示了计算边缘模式候选者的分数的总体过程。

图25:为边缘模式候选者打分 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/425968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPU 硬件与 CUDA 程序开发工具

GPU 硬件简介 从十多年前起,GPU 的浮点数运算峰值就比同时期的 CPU 高一个量级;GPU 的内存带宽峰值也比同时期的 CPU 高一个量级。 CPU 和 GPU 的显著区别是:一个典型的 CPU 拥有少数几个快速的计算核心,而一个典型的 GPU 拥有几…

考研复试类比社团招新,无所谓“公平”,导师选谁都是他的权力

这篇文章是抖音和b站上上传的同名视频的原文稿件,感兴趣的csdn用户可以关注我的抖音和b站账号(GeekPower极客力量)。同时这篇文章也为视频观众提供方便,可以更加冷静地分析和思考。文章同时在知乎发表。 我考研一战的时候计算机考…

Linux网络编程—— IO多路复用

Linux网络编程—— IO多路复用 1. I/O 多路复用(I/O多路转接)1.1 常见的几种I/O模型 2. select3. poll4. epoll :star: 1. I/O 多路复用(I/O多路转接) I/O 多路复用 使得程序能 同时监听 多个文件描述符,能够提高程序的…

kafka消费者重平衡是什么?怎么避免?

消费者重平衡是指主题下的分区怎么分配给消费者的过程。下面这个图可以看出该过程:原来有2个消费者,3个分区,其中一个消费者肯定就的处理2个分区了。那么当新加入消费者时,则每个消费者就只处理一个分区了。处理这个分区过程的叫协…

【HTML5】浏览器不能显示字体报错Failed to decode downloaded font问题解决

把网上的项目中字体通过链接保存下来在本地上使用,在本地服务器上运行站点发现,用Chrome浏览器访问的时候,出现错误提示不能正常显示字体,怎么解决呢,看看怎么搞。 文章目录 发现问题提示警告提示错误 字体检查打开文件…

分布式ID生成系统之雪花算法详解

在当今的云计算和微服务架构盛行的时代,分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化,对数据一致性和唯一性的要求也越来越高,尤其是在全局唯一标识符(ID)的生成上。因此,分…

【鸿蒙开发】第十五章 ArkTS基础类库-并发

1 简述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,OpenHarmony系统提供了异步并发和多线程并发两种处理策略,ArkTS支持异步并发和多线程并发。并发能力在多…

FRM模型十四:FRA估值

什么是FRA FRA(Forward rate agrreement)远期利率协议,是一种场外衍生品。FRA在0时刻确定,在未来时刻进行交易的协议。例如FRA3,6表示双方约定在3个月后以Rk的利率水平借款3个月。 应用场景:某公司未来3个月有融资需…

Django官网项目

项目准备 使用VSCODE做IDE。 检查Python版本。 sudo apt install sudo apt update python3 --version创建项目路径,创建虚拟环境,创建项目 路径 \mysite 进入路径,运行VSCODE 运行 "code ." 创建虚拟环境。 选择 >python: c…

CommandLineRunner的使用

背景 在项目启动时需要做一些数据预加载或者某些操作,需要怎么办呢,方法其实有好几种,这里主要讲一下SpringBoot提供的CommandLineRunner接口的使用。一、案例说明以及实现 1.实现CommandLineRunner接口 定义一个类实现CommandLineRunner接…

PyTorch-卷积神经网络

卷积神经网络 基本结构 首先解释一下什么是卷积,这个卷积当然不是数学上的卷积,这里的卷积其实表示的是一个三维的权重,这么解释起来可能不太理解,我们先看看卷积网络的基本结构。 通过上面的图我们清楚地了解到卷积网络和一般网…

剪辑调色软件有哪些 会声会影视频剪辑软件 会声会影和剪映

视频调色做不好,可能不是操作的问题,而是剪辑软件没选对。大师级的画面感,就要用大师级的视频剪辑软件。不用费时费力苦心钻研,也无须死记硬背各种参数的软件,才是真正适合自己的剪辑调色软件。有关剪辑调色软件有哪些…

节省时间,创造价值:人工智能在工作中的实际应用

AI时代的工作流程:智能化操作,创新不止步 在当前的人工智能技术领域,无论是国内研发还是国际上的先进大型模型,本质上均采用了GPT,即生成式预训练Transformer模型。该模型的核心能力在于基于已学习的知识库生成回答。其…

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题: 用Java语言创建的Spring Boot项目中,如何传递数组呢?? 在这个思路中,其实,Java作为一个后端开发的语言,没必要着重于如何传入,我们主要做的便是对传入的数组数据进行处理即可…

李沐动手学习深度学习——3.3练习

欢迎讨论 1. 如果将小批量的总损失替换为小批量损失的平均值,需要如何更改学习率? 找到相关的函数介绍nn.MSELoss 默认api nn.MSELoss中是小批量损失的平均值,所以学习率为0.03 拿到对应的batch loss细节如下: 当学习率为0.0…

TOMCAT的安装与基本信息

一、TOMCAT简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为&#xff0c…

在Jupyter-lab中使用RDKit画分子2D图

在Jupyter-lab中使用RDKit画分子2D图 在做完分子对接后,想看看筛选后的分子的结构。因此想利用Jupyter-lab来画分子的2D图。 1. 安装Jupyter-lab与RDKit 系统:Win11已安装conda RDKit 是一个功能强大、灵活易用的化学信息学工具包,广泛应…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。 比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作,也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下: /*** 缓存接口&#xff0…

力扣周赛387

第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…