设置首页收藏本站在线聊天
授权版本:2024_09
开启左侧

求助: 如何抠取带脏污的规则区域

[复制链接]
freekun139com 发表于 2023-9-13 11:16:55 | 显示全部楼层 |阅读模式
当前通过灰度把手指区域抠出来,再分析手指上是否有缺陷
但是如果手指上缺陷比较严重,抠图的时候就产生了误差,缺陷区域可能丢失
比如图中最左侧的标志手指中间污染比较严重,在抠图时可能丢失污染区域从而形成漏检
对于类似产品,正确的处理方法是什么,如何定位出准确的检测区域,求大佬指点

污染产品示例

污染产品示例

目标检测区域

目标检测区域



奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
张满满 发表于 2023-9-13 11:43:02 | 显示全部楼层
处理一下
122.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
halcon2016 发表于 2023-9-13 13:59:13 | 显示全部楼层
可以利用匹配做个检测roi跟随或者图像补正,检测roi自己预定义好
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
1870909028 发表于 2023-9-13 14:15:53 | 显示全部楼层
缺口大的话,确实是用区域跟随效果更好
测试.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
qq614542951 发表于 2023-9-13 17:54:00 | 显示全部楼层
可以利用匹配做个检测roi跟随或者图像补正,检测roi自己预定义好
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-9-13 23:29:13 | 显示全部楼层
1870909028 发表于 2023-9-13 14:15
缺口大的话,确实是用区域跟随效果更好

感谢指导,您的思路受益匪浅
没搞过区域跟随,我学习一下再交流
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-9-14 10:38:15 | 显示全部楼层
read_image (Image, '不规则区域抠取.png')
get_image_size (Image, Width, Height)

********************************************************************************
dual_threshold (Image, Region, 500, 128, 100)
union1 (Region, RegionUnion)
opening_rectangle1 (RegionUnion, RegionOpening, 7, 1)
closing_rectangle1 (RegionOpening, RegionClosing, 200, 1)
opening_rectangle1 (RegionClosing, RegionOpening, 200, 3)
opening_circle (RegionOpening, RegionOpening1, 11)
connection (RegionOpening1, ConnectedRegions)
select_shape_std (ConnectedRegions, LightRegion, 'max_area', 70)
smallest_rectangle2 (LightRegion, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle1, Row, Column, Phi, Length1 + Width, Length2)
reduce_domain (Image, Rectangle1, ImageReduced)

*分割出手指区域
binary_threshold (ImageReduced, Region, 'max_separability', 'light', UsedThreshold)
opening_circle (Region, RegionOpening, 3.5)
fill_up (RegionOpening, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)
region_features (ConnectedRegions, 'width', Value)
tuple_median (Value, FinWidth)

********************************************************************************
*水平区域
select_shape (ConnectedRegions, HorRegions, 'ratio', 'and', 0, 1)
*竖直区域
select_shape (ConnectedRegions, SelectedRegions, 'ratio', 'and', 1, 99999)
find_neighbors (HorRegions, SelectedRegions, FinWidth, RegionIndex1, RegionIndex2)
select_obj (SelectedRegions, VerRegions, RegionIndex1)
*创建水平区域和竖直区域
smallest_rectangle1 (HorRegions, Row1H, Column1H, Row2H, Column2H)
smallest_rectangle1 (VerRegions, Row1V, Column1V, Row2V, Column2V)
gen_rectangle1 (RectangleH, Row1H, Column1H, Row2H, Column2V)
gen_rectangle1 (RectangleV, Row1V, Column1V, Row2V, Column2V)
*合并生成标志手指区域
union2 (RectangleH, RectangleV, MarkRegion)

*把垂直区域转换为矩形
shape_trans (SelectedRegions, RegionTrans, 'rectangle1')
union2 (MarkRegion, RegionTrans, RegionUnion)
connection (RegionUnion, ConnectedRegions)
sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column')


********************************************************************************
*使用第一根普通手指作为模板与ROI区域
select_obj (SortedRegions, ModelObject, 2)
reduce_domain (Image, ModelObject, ImageReduced1)
area_center (ModelObject, Area, Row1, Column1)
create_shape_model (ImageReduced1, 'auto', rad(-10), rad(20), 'auto', 'auto', 'use_polarity', 50, 30, ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
vector_angle_to_rigid (0, 0, 0, Row1, Column1, 0, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)

smallest_rectangle1 (ModelObject, Row11, Column11, Row21, Column21)
gen_rectangle1 (ROI, Row11-10, Column11-10, Row21+10, Column21+10)

********************************************************************************
*读取测试图像
read_image (Image1, '不规则区域抠取1.png')
*截取ROI进行匹配
reduce_domain (Image1, ROI, ImageReduced2)
find_shape_model (ImageReduced2, ModelID, rad(-10), rad(20), 0.75, 1, 0.5, 'least_squares', 0, 0.9, Row2, Column2, Angle2, Score)
*根据匹配结果计算跟随区域
gen_empty_obj (FllowRegions)
if (|Score| > 0)
    *跟随区域仿射变换矩阵的计算
    vector_angle_to_rigid (Row1, Column1, 0, Row2, Column2, -Angle2, HomMat2D1)
    count_obj (SortedRegions, Number)
    for Idx := 1 to Number by 1
        select_obj (SortedRegions, ObjectSelected, Idx)
        affine_trans_region (ObjectSelected, RegionAffineTrans, HomMat2D1, 'nearest_neighbor')
        concat_obj (FllowRegions, RegionAffineTrans, FllowRegions)
    endfor
endif

dev_display (Image1)
dev_display (FllowRegions)

不规则区域抠取1.png

不规则区域抠取1.png

区域跟随匹配效果.png

区域跟随匹配效果.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-9-14 10:57:27 | 显示全部楼层
halcon2016 发表于 2023-9-13 13:59
可以利用匹配做个检测roi跟随或者图像补正,检测roi自己预定义好

感谢指导,我尝试了下,效果还不错
感觉这个基本操作就是模板匹配,通过匹配部分组件计算出相关组件
如果形变不大,还是挺通用的,只要参考目标正常
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-9-14 11:08:05 | 显示全部楼层
qq614542951 发表于 2023-9-13 17:54
可以利用匹配做个检测roi跟随或者图像补正,检测roi自己预定义好

感谢指导,试了下ROI跟随效果还不错
想请教一下"图像补正"一般怎么操作,有示例不
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-9-14 11:09:43 | 显示全部楼层

感谢指导,直接分析不太适合我当前的场景,通用性不太好
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表