• 大小: 958B
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: Matlab
  • 标签: 自适应  阈值  

资源简介

目前有很多阈值分割的程序,但是大部分需要自己手动设置阈值,这样就导致分割精度不高,此程序可以自动求取最佳阈值,分割效果很好。

资源截图

代码片段和文件信息

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


评论

共有 条评论