资源共享分类
通信信号 图像语音 神经网络 智能优化 控制器 数值仿真 数学建模 其他专业

微信:HuangL1121
Q Q:1224848052
团队:嘉兴麦特莱博软件开发工作室
地址:嘉兴港区
 
通信信号
MATLAB代做|利用大津法(Ostu)计算阈值
来源:本站    日期:2019/8/7    浏览量:167  

功能描述:

    %利用大津法(Ostu)计算阈值  
    %{  
    大津法由大津于1979年提出,对图像Image,记t为前景与背景的分割阈值,前景点数占图像  
    比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。  
    图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,  
    当t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大时t即为分割的最佳阈值。  
    对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成  
    了整幅图像,而前景取值u0,概率为 w0,背景取值u1,概率为w1,总均值为u,根据方差的  
    定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差  
    别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类  
    间方差最大的分割意味着错分概率最小。  
    %}  
    %Matlab实现大津法计算阀值  
    function threshold = otsu(grayImage)  
    %取出最大灰度值,max只能找到每一列的最大值  
    maxGrayValue = max(max(grayImage));  
    %取出最小灰度值  
    minGrayValue = min(min(grayImage));  
    %求初始阀值  
    t = double(minGrayValue:maxGrayValue);  
    %图像大小  
    gsize = size(grayImage);  
    %图像像素总个数  
    muxsize = gsize(1)*gsize(2);  
    for k = 1:length(t)  
        %从最小灰度值到最大值的计算方法  
        tk = t(1,k);  
        %定义前景和背景像素数  
        iforeground = 0;  
        ibackground = 0;  
        %定义前景和背景的灰度总和  
        foreground = 0;  
        background = 0;  
        for i = 1:gsize(1)  
            for j = 1:gsize(2)  
                tmp = grayImage(i,j);  
                if(tmp >= tk)  
                    %前景灰度值  
                    iforeground = iforeground + 1;  
                    foreground = foreground + double(tmp);  
                else  
                    %背景灰度值  
                    ibackground = ibackground + 1;  
                    background = background + double(tmp);  
                end  
            end  
        end  
        w0 = iforeground / muxsize;  
        w1 = ibackground / muxsize;  
        u0 = foreground / iforeground;  
        u1 = background / ibackground;  
        t(2,k) = w0*w1*(u0-u1)*(u0-u1);  
    end  
    %遍历后寻找grayIamge的第二行的最大值  
    %第二行方差的最大值,忽略NaN  
    omax = max(t(2,:));  
    %方差最大值所对应的列号,find只能检查一行中的数,或一维数组  
    index = find(t(2,:) >= omax);  
    %从第一行取出灰度值作为阀值  
    t = t(1,index);  
    threshold = t;  

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

   上一篇: MATLAB代做|IEEE802.11 CSMA/CA AdHoc Network    下一篇:    
   相关阅读
· MATLAB代做|FPGA代做|simulink代做—— 2020/7/14
· MATLAB代做|FPGA代做|simulink代做—— 2020/5/30
· MATLAB代做|FPGA代做|simulink代做—— 2020/5/30
· MATLAB代做|FPGA代做|simulink代做—— 2020/2/1
· MATLAB代做|FPGA代做|simulink代做—— 2019/12/11
· MATLAB代做|FPGA代做|simulink代做—— 2019/12/11
· MATLAB代做|FPGA代做|simulink代做—— 2019/12/11
· Alexnet网络结构 2019/11/20
· MATLAB代做|FPGA代做|simulink代做—— 2019/9/15
· MATLAB代做|FPGA代做|simulink代做—— 2019/8/29
Copyright 2017-2024 © 嘉兴麦特莱博软件开发工作室
  • 网站备案号:浙ICP备18008591号-1