最大类间方差法原理及代码实现(matlab详细过程版)

在这里插入图片描述

本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。

在这里插入图片描述

一、算法原理

1、原理概述

  假设原始图像中像素总数为 K K K,对应灰度级为 i i i的像素点数量为 k i k_i ki,灰度级数量为 L L L i i i的取值范围为 [ 0 , L − 1 ] [0,L-1] [0,L1],由此可得灰度级为 i i i的像素点出现的概率为:
P i = k i / K , i = 0 , 1 , 2 , … , L − 1 (1) P_i=k_i/K, i=0,1,2,…,L-1 \tag{1} Pi=ki/K,i=0,1,2,,L1(1)
  通过最优阈值 t t t将像素点分割成前、后景,其中灰度值为 [ 0 , t ] [0,t] [0,t]的部分被分割成前景 Q 0 Q_0 Q0,灰度值为 ( t , L − 1 ] (t,L-1] (t,L1]的像素点被分割成后景 Q 1 Q_1 Q1,同时,前景类概率 ω 0 ω_0 ω0与后景类概率 ω 1 ω_1 ω1分别为:
ω 0 ( t ) = Σ i = 0 t P i (2) ω_0(t)=Σ_{i =0}^tP_i \tag{2} ω0(t)=Σi=0tPi(2)
ω 1 ( t ) = 1 − ω 0 ( t ) (3) ω_1(t)=1-ω_0(t) \tag{3} ω1(t)=1ω0(t)(3)
  图像平均灰度级 μ t μ_t μt、前景平均灰度值 μ 0 μ_0 μ0、后景平均灰度值 μ 1 μ_1 μ1分别为:
μ t = Σ i = 0 L − 1 i P i (4) μ_t =Σ_{i =0}^{L -1}iP_i \tag{4} μt=Σi=0L1iPi(4)
μ 0 = Σ i = 0 t i P i / ω 0 (5) μ_0 =Σ_{i =0}^tiP_i /ω_0\tag{5} μ0=Σi=0tiPi/ω0(5)
μ t = Σ i = t + 1 L − 1 i P i / ω 1 (6) μ_t =Σ_{i =t +1}^{L -1}iP_i /ω_1\tag{6} μt=Σi=t+1L1iPi/ω1(6)
  由此可得 Q 0 Q_0 Q0 Q 1 Q_1 Q1间的类间方差 σ 2 σ^2 σ2为:
σ 2 = ω 0 ω 1 ( μ 0 − μ 1 ) 2 (7) σ^2 =ω_0ω_1( μ_0 -μ_1)^2\tag{7} σ2=ω0ω1(μ0μ1)2(7)
  求得使类间方差最大的像素值 t t t即为最优阈值,据此便可对原始图像进行二值分割处理

2、参考文献

[1] 黄艳国,钟勇,饶泽浩. 基于优化最大类间方差法阈值分割与滑动窗口法的车道偏离预警 [J]. 汽车技术, 2023, (06): 9-16.

二、代码实现

clc;
clear;

%% -------------------------------读取图像---------------------------------
img = imread("Y.png");
figure;
imshow(img);
title("原始图像");
hold on;
%% -----------------------------将图像灰度化-------------------------------
grayImg = rgb2gray(img);
figure;
imshow(grayImg);
title("灰度图像");
hold on;
%% -----------------------------OTSU二值化---------------------------------
threshold = OtsuProcess(grayImg);
grayImg(grayImg<=threshold) = 0;
figure;
imshow(grayImg);
title("二值化");
hold off


function[optimal_threshold] = OtsuProcess(img)
    [row, col] = size(img);
    K = row * col;                  % 像素总数为K
    t = -1;
    for i=0:255                     % 对应灰度级i,灰度级数量L=255
        Q0 = sum(sum(img<i));       % 前景Q0
        Q1 = K - Q0;                % 后景Q1
        w0 = Q0 / K;                % 前景类概率w0
        w1 = 1 - w0;                % 后景类概率w1
        u0 = sum(img(img<i)) / Q0;  % 前景平均灰度值μ0
        u1 = sum(img(img>=i)) / Q1; % 后景平均灰度值μ1
        g = w0* w1* (u0 - u1)^ 2;   % Q0与Q1间的类间方差σ2
        if g > t                    % 求得使类间方差最大的像素值t即最优阈值
            t = g;
            optimal_threshold = i;
        end
    end
end


三、结果展示

在这里插入图片描述

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值