阈值分割算子之OSTU算法

本文详细介绍了基于图像阈值分割的算法原理及其实现过程,通过对比不同方法,深入探讨了如何通过计算图像的灰度直方图来确定最佳阈值,实现图像的二值化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、原理参考:https://www.cnblogs.com/guopengfei/p/4759569.html

2、公式推导:

      

3、同halcon的binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold3)算子。

    具体实现如下:

gray_histo (Region, Image, AbsoluteHisto, RelativeHisto)
get_image_size (Image, Width, Height)
TotalSize:=Width*Height
intensity (Region, Image, avgValue, Deviation)//avgValue图像总平均灰度
MaxDiff:=0.0
Diff:=0.0 //方差
Thre:=0
delta_max:=0
for i := 0 to 255 by 1
    w0:=0.0
    u0:=0.0
    w1:=0.0
    u1:=0.0
    uo_temp:=0
    u1_temp:=0
    delta_temp:=0
    **背景部分
    for j:=0 to i by 1      
        w0:=w0+AbsoluteHisto[j]
        uo_temp:=uo_temp+j*AbsoluteHisto[j]
    endfor
    **前景部分
    w1:=TotalSize-w0
    u1_temp:=avgValue*TotalSize-uo_temp
    **计算两类的平均灰度
    if(w0==0 or w1==0)
        u0:=0
        u1:=0
    else
        u0:=uo_temp/w0   
        u1:=u1_temp/w1 
    endif 
    **依次找到最大类间方差下的阈值
    delta_temp:=w0*w1*pow((u0-u1),2)
    if(delta_temp>delta_max)
        delta_max := delta_temp
        Thre:=i
    endif  
endfor
return ()

优化后的代码实现如下:

gray_histo (Region, Image, AbsoluteHisto, RelativeHisto)
intensity (Region, Image, avgValue, Deviation)//avgValue图像总平均灰度
wk:=0.0 //分开后前景像素点数占图像的比例
uk:=0.0 //分开后前景像素数的平均灰度值
MaxDiff:=0.0
Diff:=0.0 //方差
Thre:=0
for Index := 0 to 255 by 1
    wk:=wk+RelativeHisto[Index]
    uk:=uk+RelativeHisto[Index]*Index
    if(wk<=0.0 or wk>=1.0)
        Diff:=0
    else
        Diff:=(avgValue*wk-uk)*(avgValue*wk-uk )/(wk*(1-wk))
    endif
    if(Diff>MaxDiff)
        MaxDiff:=Diff
        Thre:=Index
    endif
endfor
return ()

  

 

转载于:https://www.cnblogs.com/baiyy-daheng/p/11421537.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值