Halcon处理光照或明暗度不均匀的图像,提取目标区域
2023-12-14 18:48:37
参考链接:http://t.csdnimg.cn/D2b6U
先介绍一下本文的例子,要提取一张图片中的目标区域,但是目标一半亮一半暗有阴影,影响对有效区域的提取。
考虑到可以先做暗部提亮,再做接下来的处理。
如果直接做阈值,可能很难选中合适的阈值或范围:
下面是直接对原图做阈值的效果:
因为需要做区域提取,所以下面先选取ROI区域,只需要看暗部提亮的可以参考更下文。
read_image (Image, 'D:/APP/Imgs_project/dogdi.jpg')
* rgb1_to_gray (Image, Image)
gen_rectangle1 (Rectangle1, 440, 518, 670, 838)
reduce_domain (Image, Rectangle1, ImageReduced2)
get_image_size (ImageReduced2, Width, Height)
dev_open_window_fit_image (ImageReduced2, 0, 0, -1, -1, WindowHandle)
decompose3(ImageReduced2, image_R, image_G, image_B)
* 直方图均衡化
equ_histo_image (image_B, ImageEquHisto3)
*均值滤波
mean_image (ImageEquHisto3, ImageMean, 3, 3)
当然,可以根据自己图像特征选择合适的单通道图继续处理,上文中B通道的效果比较好,就选择了B的单通道图。
此时目标所在区域灰度比原图均匀,可以进行下一步提取区域,这里是第一种方法。
*1.全局阈值
threshold(ImageMean,Region,128,255)
fill_up(Region,RegionFillUp1)
connection (RegionFillUp1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 300, 99999)
union1 (SelectedRegions, RegionUnion1)
这里直接阈值分割出区域,阈值范围可以自行调节,效果如下:
第二种方法,这里是使用阈值提取轮廓再筛选,转成区域
*2.选取阈值作为分界线
threshold_sub_pix (ImageMean, Border, 165)
select_shape_xld (Border, SelectedXLD, 'contlength', 'and', 10, 2000)
gen_region_contour_xld (SelectedXLD, Region, 'filled')
select_shape (Region, Selecteddog, 'area', 'and', 150, 99999)
union1 (Selecteddog, RegionUnion)
效果如下:
还有动态阈值的,具体过程遇到有些瓶颈,有提取区域处理过程比较顺利的可以互相沟通。
dyn_threshold (ImageEquHisto3, ImageMean, RegionDynThresh, 20, 'light')
生活真是心累,下班,结束。
文章来源:https://blog.csdn.net/qq_45813590/article/details/134998470
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!