迭代法求取阈值进行图像分割——MATLAB
2019-08-20 17:31
1971 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33668060/article/details/99862626
@迭代法求取阈值进行图像分割
迭代法求取阈值进行图像分割
它的主要思想是:图像分割后的两部分A和B的均值和基本保持稳定。也就是说,随着迭代的进行,取 [mean(A)+mean(B)]/2 最终的收敛值作为分割阈值。
在这里有一点需要注意:
为了提高收敛速度,初始阈值T0的选择要稍微注意些。当目标与背景的面积相当时,可以将初始阈值T0设置为整个图像的平均灰度值;当目标与背景的面积相差较大时,更好地选择是将初始阈值T0设置为最大灰度值和最小灰度值的中间值。
迭代算法:
- 选择一个初始阈值T0;
- 根据阈值T0将图像分为A和B两部分。分别求出A和B的平均灰度值A_average和B_average。
- 计算 T1= (A_average+B_average)/2 ,比较 abs(T1-T0)<1(或更小值),若果成立,则停止迭代,此时的T1就是分割阈值;否则,将T1赋值给T0(T0=T1),继续从第二步开始。
算法实现:
A = imread('rice.png'); figure; subplot(121);imshow(A);title('原图') T = mean2(A); %取均值作为初始阈值 done = false; %定义跳出循环的量 i = 0; % while循环进行迭代 while ~done r1 = find(A<=T); %小于阈值的部分 r2 = find(A>T); %大于阈值的部分 Tnew = (mean(A(r1)) + mean(A(r2))) / 2; %计算分割后两部分的阈值均值的均值 done = abs(Tnew - T) < 1; %判断迭代是否收敛 T = Tnew; %如不收敛,则将分割后的均值的均值作为新的阈值进行循环计算 i = i+1; end A(r1) = 0; %将小于阈值的部分赋值为0 A(r2) = 1; %将大于阈值的部分赋值为1 这两步是将图像转换成二值图像 subplot(122);imshow(A,[]);title('迭代处理后')
处理结果:
该算法实现的处理结果,还是比较理想的。
相关文章推荐
- 动态阈值进行图像分割——MATLAB
- 图像分割自适应阈值的求取
- Matlab 图像分割 (阈值处理)
- Matlab实现通过图像分块的可变阈值处理,使用Otsu方法进行二值化
- matlab基于遗传算法的最大熵值法的双阈值图像分割
- Matlab图像处理学习笔记(九):获取叠加物体的数量并进行分割
- 《数字图像处理》——图像分割之阈值阈值——双峰法
- 图像分割阈值选取技术综述
- 基于PCNN的图像分割的matlab实现 推荐
- matlab下利用K-Means进行图像分类
- 基于FCM的灰度图像的分割, matlab免费源码
- 不采用MATLAB中的几何变换函数对图像进行旋转
- K-means算法进行简单的图像"语义"分割,java
- windows下进行FCN图像训练分割
- 一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
- 图像分割 处理 matlab源码
- 数字图像处理 - 图像分割 - 阈值处理
- 图像分割中阈值的自动选取的研究及其算法实现
- keras版FCN网络进行图像语义分割--使用VOC2012数据
- OpenCV2编程手册笔记之 5.5分水岭算法对图像进行分割