LabVIEW Vision的画笔实现原理
文章来源:石鑫华视觉网时间:2022-07-27 12:25:14 点击:688
LabVIEW Vision的画笔实现原理
在NI的模板编辑器中,有一个画笔的点工具。可能利用画笔工具,在模板中设置忽略区域。这个画笔可以设置宽度、颜色等。如下图所示效果:
NI模板编辑器中的画笔效果
有些人问作者,这个效果在LabVIEW中该如何实现。这个在LabVIEW中,是没有办法简单实现的,不能用一个函数或一个属性、方法来实现这个功能,不像其它的矩形、椭圆(圆)、多边形、封闭的徒手画ROI工具一样,可以用Fill的方式来画这样的屏蔽区域。
LabVIEW中有点ROI、和徒手画的曲线ROI工具,可以利用这些ROI工具作为基础,然后通过一些方法扩展,来实现模板编辑器中类似的效果。Image控件的Point/Freehand ROI,都是一个像素,不能设置线宽,未封闭时,也就没有Fill填充功能。所以是得自己另外想办法来扩展点或线画的区域。
单击得到点,其实可以通过设置半径,得到一个圆,然后计算该圆内的所有点,得到ROI区域。如果是徒手画线的话,其实是可以由多个点来连续拟合。但是如果鼠标移动速度过快,那在获取鼠标最后点时,中间会丢失许多点的信息(参考说明视频),只能考虑使用点到点之间的连线来实现。但是,如何计算有宽度的点到点之间的连续,也是需要计算的,这个得开动自己的大脑;或者利用NI VISION找到其它能达到类似效果的方法来替换这样的计算。
画笔实现效果
不同颜色、不同宽度的画笔
点击时的效果
因为这里没有使用计算以点为中心、宽度为半径的圆周内的所有点的ROI,只是使用了替换方法,所以得到的效果与NI模板编辑器中有是差别的,这里得到的更类似于一个六边形,而NI模板编辑器中是一个圆。
解决了图像控件图像显示范围外点击时最后点被当成画笔区域的问题
对于鼠标移出图像显示区域后再点击,会将鼠标最后位置当成画笔的问题,这里重新设计了一下,加了一个范围的判断,基本上解决了该问题。但是,在实际使用中,又发现了另一个小问题:鼠标按下移动时,这时是会Overlay鼠标轨迹的,如果鼠标移出图像范围,则鼠标最后位置是不会变化的,Overlay也就没有变化,但是这时的徒手画ROI是会沿图像跟着鼠标方向画ROI的,这样就会造成覆盖效果和Mask效果有差异。如果鼠标移出又移进,则又会得到变化的鼠标位置,则效果又会变得一致。这个差异问题,暂时还没有想到什么好的解决办法,因为显示轨迹和Mask用的方法并不是一样的。
关于本画笔实现更多说明,请参考说明视频。说明视频:关注视频号/公众号“石鑫华视觉网”
开发环境:LabVIEW 2020 SP1+VDM 2020 SP1
免费测试EXE和付费开发VI下载地址:
LabVIEW Vision的画笔实现原理
http://pcmv.cn/thread-29106-1-1.html?fromuid=9
(出处: 机器视觉论坛)