ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-01-08 15:03:59  阅读:147  来源: 互联网

标签:src rows end 图像 GMRF cols k1 聚类 侧扫


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 仿真结果

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仿真,有科研问题可私信交流。

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

标签:src,rows,end,图像,GMRF,cols,k1,聚类,侧扫
来源: https://blog.csdn.net/qq_59747472/article/details/122380522

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有