本文简单介绍一种实现以下效果,在原图上绘制彩色标注框的方法。
刚接触halcon时候,一直在找一种可以把缺陷区域用彩色方框框选出来的方法,但是没有找到相关的方法,在自己学习几天halcon之后产生了一个简单的想法,可以作为初步的实现方式使用,后续如果有更好的方法再改进。
假设我们找出的缺陷区域为FaultRegion,那么,主要以下6步。
详细代码
* 复制三张图片
copy_image (Image, ImageR)
copy_image (Image, ImageG)
copy_image (Image, ImageB)
* 找出最小外接矩形,分别绘制两个矩形,做差
smallest_rectangle2 (FaultRegion, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle1, Row, Column, Phi, Length1+30, Length2+30)
gen_rectangle2 (Rectangle2, Row, Column, Phi, Length1+25, Length2+25)
difference (Rectangle1, Rectangle2, RegionDifference)
* 绘制在原图上
overpaint_region (ImageR, RegionDifference, 255, 'fill')
overpaint_region (ImageG, RegionDifference, 0, 'fill')
overpaint_region (ImageB, RegionDifference, 0, 'fill')
* 合成
compose3 (ImageR, ImageG, ImageB, OutImage)
思路解析:因为halcon内置在图像上绘制区域的算子只能绘制基础的灰阶颜色,无法明显的看出标注框,且标注框的宽度不可选,使用不太方便。所以,本文首先解决第一个问题就是,颜色的问题,可以将图像复制三份,在每个图像上分别绘制不同灰阶值的标注框,合成之后,原图其他部分保持不变,只有绘制的标注框部分会由于三种不同像素的叠加儿显示出彩色;然后再解决第二个问题:无法设宽度的问题,本文采用两个外接矩形做差的方式,通过控制两个矩形框的大小,可以随意更改标注框的大小以及宽度。
copy_image (Image, ImageR) 复制图像,其中,Image为输入图像,ImageR 为输出图像
smallest_rectangle2 (FaultRegion, Row, Column, Phi, Length1, Length2) 找出最小外接矩形的参数,其中:
FaultRegion 为带查找的区域;
Row, Column 分别为最小外接矩形的中心点的y, x
Phi 为外接矩形的角度;
Length1, Length2 为外接矩形的宽、高;
gen_rectangle2 (Rectangle1, Row, Column, Phi, Length1+30, Length2+30) 生成最小外接矩形
一般是smallest_rectangle2 (FaultRegion, Row, Column, Phi, Length1, Length2)的后置算子
其中参数的含义与smallest_rectangle2 算子相同;
difference (Rectangle1, Rectangle2, RegionDifference) 实现两个区域做差
Rectangle1 大区域
Rectangle2小区域
RegionDifference 做差后区域
overpaint_region (ImageR, RegionDifference, 255, 'fill') 将某一区域绘制在图像上
ImageR 为待绘制图像
RegionDifference 为待绘制区域
255 为灰阶值
’fill‘为绘制方式,这种方式是填充绘制,还有另外一种方式是只绘制边框,不推荐
compose3 (ImageR, ImageG, ImageB, OutImage) 合成三个通道的图像
ImageR, ImageG, ImageB 分别为输入的三个通道图片
OutImage 为合成之后的输出图像
图像处理最主要的地方在于实现的思路,本文简单介绍一种可实现的思路,经过测试,这个方案在实际工程应用种,占用的时间非常少,是一种可以实际使用的方案。当然,实际情况,可能绘制的标注框会有非常多,远不止一个,此时,可以将所有的区域进行并集运算,然后一次性绘制在原图上,这样节约了每次绘制的时间,而且也只需要合成一次,效率也更加的高。