鱼群轨迹质心提取

close all;
clear all;
clc;
DIR='G:\1213\';%图片文件夹路径,最后必须加\
source=dir(strcat(DIR,'*.jpg'));
filenum=size(source,1);        %图片个数
p=0;
for k = 2: 70    %需要读取哪个图片到多少个图片,修改这两个数字
    p=p+1;
    fname = strcat(DIR, strcat('normal',num2str(k)), '.jpg');%图片名称数字前面的字母“normal”,不正常的改为“abnormal”
    img = imread(fname);%读取图片
    [m,n]=size(img); %查看图像的大小

   
   img=rgb2hsv(img);%rgb转hsv
   img1=img(:,:,2);%取色调层
   figure(1);imshow(img1);

   level=graythresh(img1);  %%求二值化的阈值
   bw=im2bw(img1,level);    %%二值化图像
   [m,n]=size(bw); %查看图像的大小


    disk = strel('disk',1); %形态修正
    bw=imdilate(imerode(bw,disk),disk);

    I_bw=bwareaopen(bw,55); %删除二值图像BW中面积小于P的对象。默认情况下conn使用8邻域
    [L,num]=bwlabel(I_bw,8);%bwlabel标注二值图像I_bw中的目标物体,返回标识矩阵L和I_bw中目标物体的数量num,8表示连通数.
    plot_x=zeros(1,num);%%zeros(m,n)产生m×n的全0矩阵.用于记录质心位置的横坐标
    plot_y=zeros(1,num);%zeros(m,n)产生m×n的全0矩阵.用于记录质心位置的纵坐标
 
   for k=1:num  %%num个区域依次统计质心位置    
       sum_x=0;    sum_y=0;    area=0; %初始化
       for i=1:m   
           for j=1:n 
               if L(i,j)==k     
                  sum_x=sum_x+i;  %计算第K区域的横坐标总和
                  sum_y=sum_y+j;  %计算第K区域的纵坐标总和 
                  area=area+1;    %计算第K区域的由多少个坐标点表示
               end
           end
       end
      plot_x(k)=fix(sum_x/area);  %计算第K区域的质心横坐标
      plot_y(k)=fix(sum_y/area);%计算第K区域的质心纵坐标
   end
   %-----------------------------------------------
      part1(p)={;plot_y};
      part2(p)={;plot_x};
      c(p)=size(part1{p},2);
      
       if c(p)<3
          part1{p}=part1{p-1};
          part2{p}=part2{p-1};
       end
      d(p)=size(part1{p},2); 
      part3=part1';%每幅图每条鱼y方向的值
      part4=part2';%每幅图每条鱼y方向的值
      xx(p)=floor(mean(part4{p}));%x方向的平均值
      yy(p)=floor(mean(part3{p}));%y方向的平均值
      c(p)=size(part3{p},1);
       if ((c(p)<3)&&(p>1))
        part3{p}=part3{p-1};
      end
   %------------------------------------------
   figure(2);imshow(I_bw);%显示取反后的二值图像(背景为黑色),并在图上标注质心点位置
  hold on 
  plot(yy ,xx, 'r-');  
      
end
figure(3);plot(yy ,m-xx, 'b-')
axis([0 n 0 m])
grid on
grid on;set(gca,'GridLineStyle',':','GridColor','k','GridAlpha',1);%画虚线方格
saveas(gcf,['C:\Users\清风\Desktop\鱼群轨迹测试\','22','.jpg']);%'C:\Users\清风\Desktop\鱼群轨迹测试\'生成的轨迹图片保存路径,最后需加\,'normal'图片名称,可修改


原始图像

鱼群轨迹质心提取_第1张图片

提取色调层

鱼群轨迹质心提取_第2张图片

二值化

鱼群轨迹质心提取_第3张图片

形态修正

鱼群轨迹质心提取_第4张图片

单条鱼质心提取

鱼群轨迹质心提取_第5张图片

最后轨迹

鱼群轨迹质心提取_第6张图片

 

你可能感兴趣的:(鱼群轨迹质心提取)