Halcon 重叠区域 显示汉字 图像分割

一 如何填充区域之间的GAP或分割重叠区域

在这里插入图片描述

read_image(Image,'fabrik')

*区域生长法将图像分割成相同强度的区域,并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域,
*仅使用其中心点的灰度值。 如果灰度值差小于等于公差,则将矩形合并到一个区域。

regiongrowing(Image,Regions,1,1,3,1000)

gen_empty_region(NoPixel)

expand_region(Regions,NoPixel,RegionExpanded1,'maximal','image')

dev_display(Image)

dev_set_draw('margin')

dev_set_colored(6)

dev_display(RegionExpanded1)

stop()


二 如何在窗口上显示汉字

dev_close_window()

read_image(image,'particle')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width,Height,'black',WindowID)

dev_set_draw('margin')

dev_set_color('green')

threshold(image,Region,128,255)

connection(Region,ConnectedRegions)

select_shape_std(ConnectedRegions,SelectedRegions,'max_area',70)

area_center(SelectedRegions,Area,Row,Column)

dev_display(image)

dev_display(SelectedRegions)

set_tposition (WindowID, Height/2,0)

write_string (WindowID, '面积最大区域的行坐标:'+Row+' 面积最大区域的列坐标: '+Column)

三 图像分割之地形学操作1.分水岭介绍

1 分水玲介绍

传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是地质学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其周边区域称为集水盆地,而集水盆地的边界则形成分水岭。
在这里插入图片描述

2 相关概念

局部极小值点:该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是最小值点。

3 分水玲原理

假设我们在盆地的最小值点,打一个洞,然后往盆地里面注水,并阻止两个盆地的水汇集,我们会在两个盆地的水汇集的时刻,在交接的边缘线上(也即分水岭线),建一个坝,来阻止两个盆地的水汇集成一片水域。这样图像就被分成2个像素集,一个是注水盆地像素集,一个是分水岭线像素集。

dev_close_window()

read_image(image,'particle')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width/2,Height/2,'black',WindowID)

dev_set_draw('margin')

dev_set_colored(12)

dev_clear_window()

*高斯滤波
gauss_filter(image,ImageGauss,9)

*图像反选
invert_image(ImageGauss,ImageInvert)

*从图像里提取分水玲和盆地
*第一个输入参数:输入图像
*第二个输出参数:分割后的盆地区域
*第三个输出参数:分割后的分水岭区域
watersheds(ImageInvert,Basins,Watersheds)

dev_display(image)

dev_display(Basins)


在这里插入图片描述

四 图像分割之阈值操作一

1 auto_threshold自动阈值

dev_close_window()

read_image(image,'egypt1')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width, Height, 'black', WindowHandle)

dev_clear_window()

*根据图像的灰度直方图来确定阈值,这里的Sigma是高斯滤波器,用于直方图的平滑
Sigma:=4

auto_threshold(image,Regions,Sigma)

在这里插入图片描述
在这里插入图片描述

2 binary_threshold二值化阈值

dev_close_window ()

read_image (image, 'egypt1')

get_image_size (image, Width, Height)

dev_open_window (0, 0, Width, Height, 'black', WindowID)

dev_clear_window ()




*使用二值化阈值分割图像
*如果LightDark =“light”,则选择灰度值大于或等于最佳阈值的所有像素。
*如果LightDark =“dark”,则选择灰度值小于的最佳阈值de 所有像素。
*通过选择Method ='max_separability',可以调用灰度直方图的自动阈值。
*该算法首先计算图像的直方图,然后使用统计矩来找到将像素划分为前景和背景的最佳阈值,
*并使这两个类之间的可分离性最大化。 此方法仅适用于字节和uint2图像。
binary_threshold (image, RegionMaxSeparabilityLight, 'max_separability', 'dark', UsedThreshold)

在这里插入图片描述

3 char_threshold字符提取

dev_close_window()

read_image(image,'alpha1')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width,Height,'black', WindowHandle)

dev_clear_window()


*阈值分割提取字符,主要应用是在明亮的纸上分割黑色字符单通道图像
*第一个输入参数:图像
*第二个输入参数:要计算直方图的区域
*第三个输出参数:分割的字符区域
*第四个输入参数:直方图高斯平滑的Sigma
*第五个输入参数:灰度值差异的百分比
*第理工输出参数:输出计算出的阈值
char_threshold(image,image,Characters,6,95,Threshold)

在这里插入图片描述
在这里插入图片描述

4 dual_threshold分割

*读取一张图像
read_image(Traffic1,'traffic1')

*读取一张图片
read_image(Traffic2,'traffic2')

*将图像由byte类型转化为int2类型
convert_image_type(Traffic1,ImageConverted1,'int2')

*将图像由byte类型转换为int2类型
convert_image_type(Traffic2,ImageConverted2,'int2')

*将两个图像相减
sub_image(ImageConverted1,ImageConverted2,ImageSub,1,0)

*将有符号图像分割为正负两个区域
*第一个输入参数:图像
*第二个输出参数:分割后的正负区域
*第三个输入参数:最小区域大小
*第四个输入参数:最小灰度值大小
*第五个输入参数:阈值
dual_threshold(ImageSub,RegionDiff,500,20,10)

在这里插入图片描述

五 图像分割之阈值操作二

1 dyn_threshold局部阈值

dev_close_window()

read_image(image,'egypt1')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width,Height,'black',WindowID)

dev_clear_window()

mean_image(image,ImageMean,9,9)

*用局部阈值来分割图像
*第一个输入参数:原始图像
*第二个输入参数:滤波后的图像
*第三个输出参数:分割后的区域
*第四个输入参数:补偿值,范围在540之间比较有用
*第五个输入参数:提取区域的类型,是亮的区域,或暗的区域,或相似区域
dyn_threshold(image,ImageMean,RegionDynThresh,15,'not_equal')

在这里插入图片描述
在这里插入图片描述

2 threshold固定阈值

dev_close_window()

read_image(image,'egypt1')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width/2,Height/2,'black',WindowID)

dev_clear_window()

*用全局阈值分割图像,试用图像亮度均匀的场合
*第一个输入参数:输入图像
*第二个输出参数:分割后的区域
*第三个输入参数:阈值下限
*第四个输入参数:阈值上限
threshold(image,Region,0,150)

在这里插入图片描述
在这里插入图片描述

3 var_threshold局部阈值

dev_close_window()

read_image(image,'label_01')

get_image_size(image,Width,Height)

dev_open_window(0,0,Width/2,Height/2,'black', WindowHandle)

dev_clear_window()

*通过局部平均值和标准偏差进行阈值图像。试用场合不均匀的照明或噪声的图像
*第一个输入参数:输入图像
*第二个输出参数:分割后的区域
*第三个输入参数:均值和标准差的掩码宽度
*第四个输入参数:均值和标准差的掩码高度
*第五个输入参数:标准差因子
*第六个输入参数:最小灰度值和均值之差
*第七个输入参数:提取区域的类型,是亮的区域,或暗的区域,或相似区域,或不相似区域
var_threshold(image,Region,15,15,1.0,40,'dark')

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值