Blob分析---check_blister.hdev(胶囊检测)

目录

一、程序源码分析

1、关闭窗口,读取原始胶囊图片(三通道),按给定的纵横比打开窗口

2、这里的目的是把图案里面的腔室切割出来,对后续的胶囊处理更加方便

3、这一段目的是找出五行三列的胶囊腔室

4、这一部分是将找到的胶囊区域合并

5、通过循环读取每一张图像,然后找出每张图像中的胶囊的区域

二、相关算子

1、access_channel(MultiChannelImage : Image : Channel : )

2、orientation_region(Regions : : : Phi)

3、vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)

4、affine_trans_image(Image : ImageAffineTrans : HomMat2D, Interpolation, AdaptImageSize : )

5、gen_empty_obj( : EmptyObject : : )

6、gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )

7、concat_obj(Objects1, Objects2 : ObjectsConcat : : )

8、affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )

9、decompose3(MultiChannelImage : Image1, Image2, Image3 : : )

10、var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )


一、程序源码分析

* 这个示例演示了制药行业的一个应用程序,任务是检查自动填充胶囊的内容。
* 第一个图像(参考)用于定位泡孔形状内的腔室作为参考模型,然后使用该模型沿此参考形状重新排列后续图像。利用Blob分析对每个腔体的内容进行分割,最后根据一些形状特征进行分类。

1、关闭窗口,读取原始胶囊图片(三通道),按给定的纵横比打开窗口

  • 该图像作为后续图像读取,位置变换的参考

dev_close_window ()
dev_update_off ()
read_image (ImageOrig, 'blister/blister_reference')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
dev_display(ImageOrig)

*设置显示的字体,设置填充方式为边缘填充,设置线宽为3
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)

原图​​​​

2、这里的目的是把图案里面的腔室切割出来,对后续的胶囊处理更加方便

*原图是彩色图像,提取第一通道图像
access_channel (ImageOrig, Image1, 1)
*阈值选取较亮的区域
threshold (Image1, Region, 90, 255)
*根据凸性补充区域
shape_trans (Region, Blister, 'convex')
*获得整个大区域的角度、中心点坐标、面积
orientation_region (Blister, Phi)
area_center (Blister, Area1, Row, Column)
*从点和角度计算刚性仿射变换(得到这个区域到0角度位置的仿射矩阵)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
*根据仿射矩阵把原图变换过
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')

参考图像仿射变换后

3、这一段目的是找出五行三列的胶囊腔室

*创建一个空对象元组,类的实例化,防止空引用异常
gen_empty_obj (Chambers)
*通过循环遍历图像中的胶囊,(88,163)是第一个胶囊腔室的中心坐标,70、150是行、列方向相邻腔室之间的间距
for I := 0 to 4 by 1
    Row := 88 + I * 70 
    for J := 0 to 2 by 1
        Column := 163 + J * 150

        *得到正常药品所处区域的矩形
        gen_rectangle2 (Rectangle, Row, Column, 0, 64, 30)
        concat_obj (Chambers, Rectangle, Chambers)
    endfor
endfor
stop()

分割出来胶囊的腔室

4、这一部分是将找到的胶囊区域合并

*根据仿射矩阵把原图中的药品区域(就是上述的形状变换后的凸包区域)变换过去,其实就是找到ROI区域
affine_trans_region (Blister, Blister, HomMat2D, 'nearest_neighbor')
*差分大区域和每个药品的矩形小区域​​​​​​​
difference (Blister, Chambers, Pattern)
*每个药品的矩形小区域联合起来
union1 (Chambers, ChambersUnion)

所有腔室合并

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盾山狂热粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值