Halcon图像分割

auto_threshold(Image : Regions : Sigma : )
* 对单通道图像做自动阈值(灰度直方图确定)分割
Sigma:灰度直方图高斯光滑核(标准差),光滑消除噪声,并且分割区域
binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
* 使用二值阈值进行图像分割,用于背景色与前景色色差较为分明的图像,自动选取Sigma值进行高斯光滑处理,光滑直到灰度直方图只有一个最小值,这个最小值就是阈值;
Method:分割方法,只适用于具有双峰直方图的图像。
    smooth_histo方法提供了与bin_threshold操作符相同的功能。
    max_separability方法倾向于为UsedThreshold确定较小的值。此外,它对距离光谱其余部分很远的柱状图中孤立的薄峰不太敏感,而且通常比smooth_his更快
LightDark:提取前景色还是背景色 'light' 'dark'
char_threshold(Image, HistoRegion : Characters : Sigma, Percent : Threshold)
* 为提取字符执行阈值分割,适用于不是很明显的出现极小值的情况(色差相对小)
Image:用于提取字符的图像
HistoRegion:要提取字符所在的Region,可以和Image一样
Percent:灰度直方图中的灰度差的百分比

此方法关键在于找到灰度直方图中的最大值,在最大值的左侧寻找关键阈值,Threshold所对应的灰度值频率不能大于最大值频率乘以(100.0-Persent)
histogram[Threshold]*100.0 < histogram[maximum]*(100.0-Percent)
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
* 动态局部阈值分割图像,根据像素周围的情况来决定阈值 OrigImage:单通道原图像 ThresholdImage:用于对比局部阈值的图像,通常是原始图像的平滑版本(如mean_image、binomial_filter、gauss_filter等) RegionDynThresh:阈值分割后获得的区域 Offset:原图像与对比图像的像素值偏移量 LightDark:决定选取暗边界还是亮边界以及相似边界
'light' OrigImage >= ThresholdImage + Offset
'dark' OrigImage <= ThresholdImage - Offset
'equal' ThresholdImage - Offset <= OrigImage <= ThresholdImage + Offset
'not_equal' ThresholdImage - Offset > OrigImage or OrigImage > ThresholdImage + Offset
dual_threshold(Image : RegionCrossings : MinSize, MinGray, Threshold : )
* 通过阈值分割有符号图像(灰度值有正负之分),通常前面伴随着如diff_of_gauss,sub_image等这样的算子使用
fast_threshold(Image : Region : MinGray, MaxGray, MinSize : )
* 使用全局阈值对图像进行快速阈值化
MinSize 要提取的对象的最小大小
在支持SSE2指令集的多核计算机上,threshold很可能比fast_threshold更快。只有在这些特性不可用的情况下,才可能首选fast_threshold而不是threshold,例如在嵌入式平台上
某些情况下fast_threshold的效果比threshold效果好
hysteresis_threshold(Image : RegionHysteresis : Low, High, MaxLength : )
* 对图像执行一个滞后阈值操作(由Canny引入)。在图像上执行一个滞后阈值操作(由Canny引入)。输入图像中灰度值大于或等于High的所有点立即被接受(“安全”点)。
相反,所有灰度值小于Low的点立即被拒绝。如果“潜在”点的路径连接到“安全”点,则接受在两个阈值之间有灰度值的“潜在”点,这些“潜在”点的长度最多为MaxLength点。

 

通过sub_image对两帧图像做差,得到图三的图像,其中中亮部分小车灰度值大于零,暗部分小车灰度值小于零,使用dual_threshold进行分割得到图四。

dev_close_window ()
read_image (Traffic1, 'traffic1')
read_image (Traffic2, 'traffic2')
get_image_size (Traffic1, Width, Height)
dev_open_window (0, 0, 2 * Width, 2 * Height, 'black', WindowHandle)
convert_image_type (Traffic1, ImageConverted1, 'int2')
convert_image_type (Traffic2, ImageConverted2, 'int2')
sub_image (ImageConverted1, ImageConverted2, ImageSub, 1, 0)
dual_threshold (ImageSub, RegionDiff, 500, 20, 10)
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
* 根据掩膜局部均值和标准差来做与会分割
MaskWidth,MaskHeight:掩膜大小,在此区域求均值方差
StdDevScale:标准差因子
AbsThreshold:像素值与均值对比的最差值

StdDevScale>=0,则
v(x,y) = max(StdDevScale * d(x,y), AbsThreshold)
如果参数StdDevScale<0,则
v(x,y) = min(StdDevScale * d(x,y), AbsThreshold)

LightDark = 'light' 获得亮边界
Image(x,y) >= mean(x,y) + v(x,y)

LightDark = 'dark' 获得暗边界
Image(x,y) < mean(x,y) - v(x,y)

 

posted @ 2019-08-13 21:31  Z大山  阅读(4164)  评论(0编辑  收藏  举报