失败笔记本-HALCON篇-006
项目场景:
今天跟着大佬学习基础Blob分析,Blob主要用于对图像中的连通区域(即Blob)进行检测和分析。其基本思想是通过灰度值标识图像中相关联的物体(前景)的像素,并将这些像素分割成不同的连通域。halcon入门教程7_基础Blob分析
主要通过blob分析选中和求出下图中名片的角度,利用旋转将图像矫正:
1.选中中间的上黑下白名片
步骤
在这个图片中,名片的颜色有黑色有白色,这样是不能通过简单的灰度阈值来二值化的。大佬的解决思路是通过RGB三通道分量来做阈值:
- 首先打开图片,halcon做二值化的方便之处在于可以用直方图工具直观的看到选中的region
- 分别调节三个通道的阈值,可能在1通道下可以选中名片上半部分黑色region,可能在2通道下可以选中名片下半部分白色的region
- 然后再把两个region合并到一起
- 如果有和名片外的region联通,则用一次腐蚀
- 最后就是connnection
代码如下:
read_image (Image, 'D:/WORKSPACE/HALCON/基础blob分析/001.png')
access_channel (Image, ImageChannel1, 1)
threshold (ImageChannel1, Regions, 0, 68)
access_channel (Image, ImageChannel2, 2)
threshold (ImageChannel2, Regions1, 191, 254)
gen_empty_region (EmptyRegion)
union2 (Regions, Regions1, EmptyRegion)
erosion_circle (EmptyRegion, RegionErosion, 5.0)
connection (RegionErosion, ConnectedRegions)
效果如下:
2.筛选区域
步骤
- 在这一步中,学到了一个小技巧,select_shape()算子中的参数是可以设置为数组的,可以同时实现不同筛选规则的筛选,这个非常nice啊。
- 将不规则的region修正
代码如下:
select_shape (ConnectedRegions, SelectedRegions, ['area','row','column'], 'and', [0,168,166], [14620,480,540])
union1 (SelectedRegions, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'convex')
shape_trans (RegionTrans, RegionTrans1, 'rectangle2')
reduce_domain (ImageChannel2, RegionTrans1, ImageReduced)
效果如下:
3.旋转
步骤
- 先求出region的角度
- 然后旋转
- 这里要注意算子中角度的单位是弧度还是角度,有必要的时候要用deg()算子转换。
代码如下:
orientation_region (RegionTrans, Phi)
orientation_region (RegionTrans1, Phi1)
rotate_image (Image, ImageRotate, (360-deg(Phi1)), 'constant')
效果如下:
哈哈哈,我截的图是被扭曲过的,名片不是矩形,变成平行四边形了。
总结:
在006中,用到了以下新算子:
access_channel ()
orientation_region ()
rotate_image ()