【图像融合】基于改进模糊聚类算法实现侧扫声呐图像分割matlab代码

1 简介

当前图像分割技术越来越受到人们的重视.很多研究者针对图像分割技术设计出了不计其数的方法.图像分割技术已经涉及到许多范畴,并且逐渐成为了许多领域的基础技术之一.图像分割技术在当今时代具有极其重要的地位,研究如何提高它的运算结果仍然十分具有价值. 很多事物自身存在模糊性,传统的聚类方法多是硬划分,不能够理想的处理这类事物的问题.在图像分割领域内的众多方法中,有一类以模糊聚类技术为基础的方法,能够较好地分析处理客观事物内在的模糊性,因而逐步作为了运用最普遍的分割方法和研究热点课题之一.模糊聚类分析是典型的软划分方法,它能够很好地处理事物内在的模糊性,因此,比传统的聚类分析更适合现实中的事物处理.在模糊聚类分析的众多方法中,具有代表性的应用最普及的一类是FCM算法及它的系列改进算法.虽然FCM算法应用最普遍,但是它本身也存在一定的问题,因此近年来研究人员不断对其进行改进,提出了很多改进算法,一个比较典型的改进算法是BEMD-FCM算法​

2 部分代码

function dst=GFCM(src,rows,cols)
  v=zeros(5,5);%1个原点分类+4个阶次GMRF纹理图像
  src_d=double(src);
  GMRF_src(:,:,1)=src_d;
  [GMRF_src(:,:,2)]=GmrfPara_1Order_Estimat(src_d,rows,cols);
%   GMRF_srci(:,:,2)=GMRF_src(:,:,2)/256;
%   figure,imshow(GMRF_srci(:,:,2));
  [GMRF_src(:,:,3)]=GmrfPara_2Order_Estimat(src_d,rows,cols);
%   GMRF_srci(:,:,3)=GMRF_src(:,:,3)/256;
%   figure,imshow(GMRF_srci(:,:,3));
  [GMRF_src(:,:,4)]=GmrfPara_3Order_Estimat(src_d,rows,cols);
%   GMRF_srci(:,:,4)=GMRF_src(:,:,4)/256;
%   figure,imshow(GMRF_srci(:,:,4));
  [GMRF_src(:,:,5)]=GmrfPara_4Order_Estimat(src_d,rows,cols);
%   GMRF_srci(:,:,5)=GMRF_src(:,:,5)/256;
%   figure,imshow(GMRF_srci(:,:,5));
%   [GMRF_src(:,:,5)]=GmrfPara_5Order_Estimat(src_d,rows,cols);
%   GMRF_srci(:,:,5)=GMRF_src(:,:,5)/256;
%   figure,imshow(GMRF_srci(:,:,5));
  for k=1:1:5
      src_2=reshape(GMRF_src(:,:,k),rows*cols,1);
      [src_3]=sort(src_2);
      v(k,1)=round(src_3(1));
      v(k,5)=round(src_3(rows*cols));
      v(k,3)=round(mean(src_3));
      v(k,2)=round((src_3(1)+mean(src_3))/2);
      v(k,4)=round((src_3(rows*cols)+mean(src_3))/2);
  end
  U=zeros(rows,cols,5); 
  v_new=zeros(5,5);
  %初始分类
  for i=1:1:rows
      for j=1:1:cols
          d=zeros(1,5);%测度
          for k1=1:1:5 %5个聚类
              for k2=1:1:5 %5个层
                  d(k1)=d(k1)+(double(GMRF_src(i,j,k2))-v(k2,k1));
              end
              %
              if d(k1)==0
                  d(k1)=0.1;
              end               
          end
          %
          d_sum=0.0;
          for k1=1:1:5
              d_sum=d_sum+25/(d(k1)^2);
          end
          for k1=1:1:5
              U(i,j,k1)=(25/(d(k1))^2)/d_sum;
          end
      end
  end
  u1_sum=zeros(1,5);
  u2_sum=zeros(5,5);%(层数,聚类数)
  for i=1:1:rows
      for j=1:1:cols
          for k1=1:1:5
              u1_sum(k1)=u1_sum(k1)+U(i,j,k1)^2;
              for k2=1:1:5
                  u2_sum(k2,k1)=u2_sum(k2,k1)+U(i,j,k1)^2*double(GMRF_src(i,j,k2));
              end
          end
      end
  end
  for k1=1:1:5
      for k2=1:1:5
          v_new(k2,k1)=round(u2_sum(k2,k1)/u1_sum(k1));
      end
  end
  %迭代循环
  while ~(abs(v(1,1)-v_new(1,1))<0.5&&abs(v(1,2)-v_new(1,2))<0.5&&...
          abs(v(1,3)-v_new(1,3))<0.5&&abs(v(1,4)-v_new(1,4))<0.5&&...
          abs(v(1,5)-v_new(1,5))<0.5)&&...
          ~(abs(v(2,1)-v_new(2,1))<0.5&&abs(v(2,2)-v_new(2,2))<0.5&&...
          abs(v(2,3)-v_new(2,3))<0.5&&abs(v(2,4)-v_new(2,4))<0.5&&...
          abs(v(2,5)-v_new(2,5))<0.5)&&...
          ~(abs(v(3,1)-v_new(3,1))<0.5&&abs(v(3,2)-v_new(3,2))<0.5&&...
          abs(v(3,3)-v_new(3,3))<0.5&&abs(v(3,4)-v_new(3,4))<0.5&&...
          abs(v(3,5)-v_new(3,5))<0.5)&&...
          ~(abs(v(4,1)-v_new(4,1))<0.5&&abs(v(4,2)-v_new(4,2))<0.5&&...
          abs(v(4,3)-v_new(4,3))<0.5&&abs(v(4,4)-v_new(4,4))<0.5&&...
          abs(v(4,5)-v_new(4,5))<0.5)&&...
          ~(abs(v(5,1)-v_new(5,1))<0.5&&abs(v(5,2)-v_new(5,2))<0.5&&...
          abs(v(5,3)-v_new(5,3))<0.5&&abs(v(5,4)-v_new(5,4))<0.5&&...
          abs(v(5,5)-v_new(5,5))<0.5)
      for k1=1:1:5
          for k2=1:1:5
              v(k2,k1)=v_new(k2,k1);
          end
      end
      %
      for i=1:1:rows
          for j=1:1:cols
              d=zeros(1,5);%测度
              for k1=1:1:5 %5个聚类
                  for k2=1:1:5 %5个层
                      d(k1)=d(k1)+(double(GMRF_src(i,j,k2))-v(k2,k1));
                  end
                  %
                  if d(k1)==0
                     d(k1)=0.1;
                  end               
              end
              %
              d_sum=0.0;
              for k1=1:1:5
                  d_sum=d_sum+25/(d(k1)^2);
              end
              for k1=1:1:5
                  U(i,j,k1)=(25/(d(k1)^2))/d_sum;
              end
          end
      end
      %
      u1_sum=zeros(1,5);
      u2_sum=zeros(5,5);%(层数,聚类数)
      for i=1:1:rows
          for j=1:1:cols
              for k1=1:1:5
                  u1_sum(k1)=u1_sum(k1)+U(i,j,k1)^2;
                  for k2=1:1:5
                      u2_sum(k2,k1)=u2_sum(k2,k1)+U(i,j,k1)^2*double(GMRF_src(i,j,k2));
                  end
              end
          end
      end
      for k1=1:1:5
          for k2=1:1:5
              v_new(k2,k1)=round(u2_sum(k2,k1)/u1_sum(k1));
          end
      end
  end
  %输出
  dst=zeros(rows,cols);
  for i=1:1:rows
      for j=1:1:cols
          for k=1:1:5
              u_(k)=U(i,j,k);
          end
          [U_,U_num]=sort(u_);
          if U_num(5)==1
             dst(i,j)=0;
          elseif U_num(5)==5
             dst(i,j)=1;
          else
             dst(i,j)=0.6;
          end
      end
  end
end

3 仿真结果

【图像融合】基于改进模糊聚类算法实现侧扫声呐图像分割matlab代码

4 参考文献

[1]盛蕴霞, 霍冠英, and 刘静. "基于超像素聚类的侧扫声呐图像分割算法." 计算机工程 44.6(2018):8.

[2] Harikiran J ,  Phanendar K ,  Kumar R K , et al. Fuzzy C-means with Bi-dimensional Empirical Mode Decomposition for Segmentation of Microarray Image[C]// IJCSI Press. IJCSI Press, 2012:427-433.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

上一篇:HTTP响应状态码


下一篇:养猪日记 2022.2.24