资源简介
目前有很多阈值分割的程序,但是大部分需要自己手动设置阈值,这样就导致分割精度不高,此程序可以自动求取最佳阈值,分割效果很好。
代码片段和文件信息
J=imread(‘2.jpg‘);
I=rgb2gray(J)
subplot(131)imshow(I);
title(‘原始图像‘)
%下面使用MATLAB函数计算阈值
level=graythresh(I);
%用大津法计算全局图像I的阈值
BW=im2bw(Ilevel);
%阈值分割
subplot(132)imshow(BW)
title(‘graythresh 计算阈值‘)
disp(strcat(‘graythresh计算灰度阈值:‘num2str(uint8(level*255))))
%下面的MATLAB程序实现简化计算值
iMax=max(max(I));
iMin=min(min(I));
%计算最大和最小值
T=double(iMin:iMax);
iSize=size(I);
muxSize=iSize(1)*iSize(2);
for i=1:length(T)
%从最小灰度值到最大值分别计算方差
TK=T(1i);
iForeground=0;
iBackground=0;
%定义前景和背景数
ForegroundSum=0;
BackgroundSum=0;
%定义前景和背景灰度总和
for j=1:iSize(1)
for k=1:iSize(2)
tmpData=I(jk);
if(tmpData>=TK)
%前景像素点的计算
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmpData);
else
%背景像素点的计算
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmpData);
end
end
end
%计算前景和背景的比例和平均灰度值
%这里存在一个0分母的情况导致告警解决方法很简单但不影响结果请读者改进
w0=iForeground/muxSize;
w1=iBackground/muxSize;
u0=ForegroundSum/iForeground;
u1=BackgroundSum/iBackground;
T(2i)=w0*w1*(u0-u1)*(u0-u1);
%第二行为计算的方差
end
oMax=max(T(2:));
%第二行方差的最大值略NaN
idx=find(T(2:)>=oMax);
%方差最大值所对应列号
T=uint8(T(1idx));
%从第一行取出灰度值作为阈值
disp(strcat(‘简化大津法计算灰度阈值:‘num2str(T)))
BW=im2bw(Idouble(T)/255);
%阈值分割
subplot(133)imshow(BW)
title(‘简化大津法计算阈值‘)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1872 2008-11-13 18:14 goodotsu.m
----------- --------- ---------- ----- ----
1872 1
- 上一篇:pn序列产生matlab程序
- 下一篇:算术编码matlab
相关资源
- k-means自适应聚类算法
- 差分进化自适应的参数优化、模式识
- OSTU阈值 图像边缘增强算法 MATLAB
- 模糊自适应控制MATLAB实现
- 自适应pid控制器设计及其在matlab中的
- 单神经元自适应PID控制器的研究及M
- 自适应均衡技术的研究及MATLAB的仿真
- 灰度图像的二维Otsu自动阈值分割法
- 基于LMS和RLS的自适应滤波器的应用仿
- 线性阵列自适应波束形成,干扰抑制
- LMS算法自适应波束形成
- 一阶惯性延迟系统的PID自整定
- 自适应控制系统的设计与仿真
- 自适应NLMS算法
- 自适应滤波器
- 自适应MPC算法
- 自适应中值滤波算法matlab
- 变步长的LMS自适应滤波算法matlab程序
- 基于OSTU的阈值分割算法研究
- 一维最大熵阈值分割
-
自适应MPC的simuli
nk - RBF神经网络自适应控制MATLAB仿真程序
- matlab 自适应增强算法
- 基于归一化LMS算法自适应均衡器的S
- Normalshrink阈值去噪matlab代码
- Matlab分块Otsu阈值分割
- Matlab二维Otsu阈值分割
- RLS自适应噪声对消算法源代码
- 各种自适应算法的matlab仿真
- 自适应遗传算法matlab代码
评论
共有 条评论