ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Halcon OSTU算法

2021-12-17 16:34:25  阅读:211  来源: 互联网

标签:阈值 方差 Halcon 算法 灰度 threshold Otsu OSTU 像素点


Halcon 中的全局阈值分割算子 binary_threshold 中,Method = 'max_separability' 指的就是Otsu法(最大类间方差法,有时也称之为大津算法)。
Otsu 算法也叫全局最优阈值处理,使用聚类思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找一个合适的灰度级别来划分。 所以可以在二值化的时候采用otsu算法来自动选取阈值进行二值化。otsu算法被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响。因此,使类间方差最大的分割意味着错分概率最小。

设t为设定的阈值。

wo: 分开后 前景像素点数占图像的比例

uo: 分开后 前景像素点的平均灰度

w1:分开后 被景像素点数占图像的比例

u1: 分开后 被景像素点的平均灰度

u=w0*u0 + w1*u1 :图像总平均灰度


从L个灰度级遍历t,使得t为某个值的时候,前景和背景的方差最大, 则 这个 t 值便是我们要求得的阈值。

其中,方差的计算公式如下:

g=wo * (uo - u) * (uo - u) + w1 * (u1 - u) * (u1 - u)

[ 此公式计算量较大,可以采用: g = wo * w1 * (uo - u1) * (uo - u1) ]

基本的计算步骤如上面讲的那样,然后我们在Haclon中自己来实现代码:
get_image_size (srcImage, Width, Height)
* 最大方差初始化为0
otu:=[]
MaxVariance := 0.0
* 自动计算的最佳阈值
BsetThreshold := []
* 前景区域的灰度均值
Mean0 := []
* 背景区域的灰度均值
Mean1 := []
* 图像像素点总个数
PixelSum := Width * Height
tuple_real (PixelSum, PixelSum)
* 前景区域的像素点个数
Area0 := []
* 背景区域的像素点个数
Area1 := []
for ImgThreshold := 1 to 255 by 1
dev_display (srcImage)
* 区域分割
threshold (srcImage, Region, ImgThreshold, 255)
* 获得前景区域像素个数
area_center (Region, Area0, Row, Column)
* 获得前景区域均值和方差
intensity (Region, srcImage, Mean0, Deviation)
* 获得背景区域像素个数、均值和方差
difference (srcImage, Region, RegionDifference)
area_center (RegionDifference, Area1, Row1, Column1)
intensity (RegionDifference, srcImage, Mean1, Deviation1)
* 计算类间方差
Otsu := Area0/PixelSum * Area1/PixelSum * pow(Mean0-Mean1,2)
* 获取最大类间方差最佳阈值
otu:=[otu,Otsu]
if (Otsu > MaxVariance)
MaxVariance := Otsu
BestThreshold := ImgThreshold
endif
endfor
我在Halcon中对代码进行了封装,生成了一个.hdvp外部函数 threshold_Otsu(Image : Region : LightDark : UsedThreshold) ,可以直接调用使用,调用方法如下所示:

read_image (Image, 'particle')
threshold_Otsu (Image, Region1, 'Light', UsedThreshold1)
binary_threshold (Image, Region2, 'max_separability', 'light', UsedThreshold2)
看一下最终的实现效果:

 

(1)使用 threshold_Otsu 自动阈值分割后的图像

 

 

 

(2)使用 binary_threshold 自动阈值分割后的图像

从图像上看结果与 Halcon 中算子的实现效果一样,看一下输出的自动计算出的阈值:

 

 

标签:阈值,方差,Halcon,算法,灰度,threshold,Otsu,OSTU,像素点
来源: https://www.cnblogs.com/zyouliang/p/15702779.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有