• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 2 次
    发布日期: 2023-02-06
  • 语言: Matlab
  • 标签:

资源简介

通过求差分曲线,利用阈值分割算法对图像进行自动多阈值分割

资源截图

代码片段和文件信息

function auto_thresh(imLSH)
% im=imread(‘rice.tif‘);
% a=imread(‘mytu.tif‘);
% im=rgb2gray(a);
count=imhist(im);
u=diff(count);%  Difference and approximate derivative.求差分曲线
% for i=1:255
%     u(i)=count(i+1)-count(i); 
% end
k=1;
for i=1:254         %找出差分曲线由负到正的过零点的位置(谷底位置)
    if u(i)<0
        if u(i+1)<0      
            i=i+1;
        elseif u(i+1)>0
               d(k)=i+0.5;                
               k=k+1;
        elseif u(i+1)==0
               for j=1:50
                   if (i+j<255&u(i+j)==0&u(i+j+1)>0)                      
                       d(k)=i+0.5*j+0.5;                
                       k=k+1;
                       break;
                   else 
                       break;
                   end
               end
           end
       end
  end
  D=diff(d);
%   for i=1:k-2
%       D(i)=d(i+1)-d(i);     %求各小峰的峰宽
%   end
  dd=uint8(D);
  count1=imhist(dd);            %统计峰宽度的直方图
  DD=find(count1);            
  kd=size(DD);
  n=round(0.7*(kd(1)-1)*2);        %求出平滑窗口的尺寸
  imm=wiener2(im[nn]);    %平滑原始直方图
  p=imhist(imm);
  
% 由平滑直方图确定区域类数(加入判断独立峰的三条准则)
%  for i=1:255
%     p1(i)=p(i)-p(i+1);     %求差分曲线
%     p2(i)=p(i+1)-p(i);
%  end
p2=diff(p);
p1=-p2;
k1=1;
for i=1:254               %找出差分曲线由负到正的过零点的位置(峰点位置)
    if p1(i)<0
        if p1(i+1)<0      
            i=i+1;
        elseif p1(i+1)>0
               dp(k1)=i+0.5;                
               k1=k1+1;
        elseif p1(i+1)==0
               j=2;
               while (j<20&i+j<256)
                   if p1(i+j)==0
                       j=j+1;
                   elseif p1(i+j)>0              
                       dp(k1)=i+0.5*(j-1)+0.5;                
                       k1=k1+1;
                       break;
                   else
                       break;
                  

评论

共有 条评论