最大类间方差寻找最佳阈值实现图像的分割——MATLAB
2019-08-20 15:42
1876 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33668060/article/details/99844850
最大类间方差寻找最佳阈值实现图像的分割
顾名思义,该方法是使用最大类间方差实现图像分割中最佳阈值的寻找。
为什么最大类间方差能实现分割阈值的寻找?
答:从统计学的意义上讲,方差是表征数据分布不均衡的统计量,方差越大,说明数据间的差别越明显。假设现在有一组数据A,找一个合适中间值K,将A分成A1和A2两组,如果A1和A2两者之间的方差越大,这说明两组数据之间的区分越明显。我们在进行图像分割时,就是期望能找到一个这样的阈值K,使图像中的目标和背景分割开来,使背景和目标比较明显。
实现步骤:
- 求取输入图像I的直方图H以及整体灰度平均值U。根据直方图,求取每个灰度级所占的概率P(i);
- 设定K值,一般采用for循环(K=0:255),根据K值将图像分成两部分A和B,分别求取A的期望和B的期望,以及A和B概率P(A)、P(B)。
- 最后,通过公式 求取每个阈值K(0~255)下的方差,取其中的最大的 所对应的K为整体的最佳阈值。
MATLAB实现过程:
采用MATLAB中自带的rice.png作为原始图像。
[code]close all; clear all; clc I = imread('rice.png'); figure;imshow(I); [m,n] = size(I); H = imhist(I); %I的直方图结果 figure;imhist(I) %求出每个灰度下的概率 for a=1:size(H,1) P(a,1) = H(a,1)/(m*n); end % 总体平均值 u = sum(sum(I))/(m*n); % 循环K值,并将每个K值分割后的图像分别保存在Pa和Pb两个矩阵中, % 将每种概率下对应的灰度值保存在Ua和Ub中。 for k=0:255 i = 1; j = 1; for b=1:size(H,1) % b代表灰度级 if b<=k %判断灰度小于等于阈值的情况,将其概率和灰度分别保存在Pa和Ua中 Pa(k+1,i) = P(b,1); Ua(k+1,i) = b*H(b,1); i = i+1; else %判断灰度大于阈值的情况,将其概率和灰度分别保存在Pb和Ub中 Pb(k+1,j) = P(b,1); Ub(k+1,j) = b*H(b,1); j = j+1; end end end aa=sum(Pa,2); %分割图像A中的概率,每一行代表一种K值得情况 bb=sum(Pb,2); %分割图像B中的概率,每一行代表一种K值得情况 UA = sum(Ua,2)/(size(Ua,1)*size(Ua,2)); %计算A的整体均值 UB = sum(Ub,2)/(size(Ub,1)*size(Ub,2)); %计算B的整体均值 sigma = aa.*(UA-u).^2 + bb.*(UB-u).^2; %计算总方差 t = max(sigma); %求取所有方差中的最大值 %计算最大值方差所对应的K中 for x=1:256 if sigma(x) == max(sigma) k = x; end end %根据所求得的阈值k,将图像分割成二值图像 for i=1:m for j=1:n if I(i,j) < k J(i,j) = 0; else J(i,j) = 1; end end end figure;imshow(J,[])
处理结果
原图:
处理后的图像:
总结,从处理结果上来看该结果效果不好,该阈值不是最佳阈值。具体原因我也没找出来,以后找出来了再进行补充吧。
在MATLAB中im2bw()函数就是采用这种方法进行处理的,但im2bw()函数的处理结果比上面的结果好。
相关文章推荐
- 大津法(最大类间方差、自适应阈值)图像分割
- matlab基于遗传算法的最大熵值法的双阈值图像分割
- matlab练习程序(最大类间方差二值化图像)
- 迭代法求取阈值进行图像分割——MATLAB
- 大津(Ostu)阈值分割方法在matlab中的实现
- 图像处理算法基础(十)---大津法求最佳分割阈值
- 已知背景和物体的均值方差,求最佳分割阈值
- 图像分割中阈值的自动选取的研究及其算法实现
- 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
- Matlab 图像分割 (阈值处理)
- 自动选择阈值--最大类间方差法(OTSU)原理及matlab实现
- 模式识别经典算法——FCM图像聚类分割(最简matlab实现)
- Vlad 寻找相似图像,算法matlab实现
- matlab实现分水岭算法处理图像分割
- 数字图像处理,二维图像小波阈值去噪的C++实现(matlab验证)
- 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
- MATLAB实现最大类间方差算法
- K-Means 基于matlab+opencv 实现图像分割-灰度
- 二维最大类间方差(otsu)matlab实现源码
- 图像分割中阈值的自动选取的研究及其算法实现