MATLAB中使用不同颜色显示连通区域

来源:互联网 发布:wind 社会责任数据 编辑:程序博客网 时间:2024/06/07 15:50

         最近在用MATLAB做点东西,涉及到前景目标检测。由于检测出来的连通域比较多,统一用白色线是比较单调,而且不容易看清楚,因此尝试将不同的连通域赋予不同颜色,代码如下:

         首先,要计算二值图像中的连通域,假设img1为输入二值图像,img2为按面积滤波后的图像,当然,如果二值图像较零散,可以用形态学滤波进行处理:

img2 =bwareaopen(img1,6,8);       %按照八连通规则,将面积小于6的连通区域滤除;

[L,num] = bwlabel(img2,8);      %计算img2的八连通区域,L为返回的带标记图像,尺寸与img2相同,num为连通区域数目;

PS:附上形态学滤波代码:

%        SE1=strel('square',3);

%         img_erode= imerode(img2,SE1,'same');

%        img_dilate=imdilate(img2,SE1,'same');

 

         然后,就要将不同的连通区域用不同的颜色标识出来:

[m,n] = size(img2);

          img_color = zeros(m,n,3);   % 显示图像,三通道;

          img_color_tmp =reshape(img_color,m*n,3);  % 拉成二维的,用于find函数,因为find找的是一维向量的下标;

%% 为了颜色显示更加丰富,我调用了4个颜色模块,每一个表示64种颜色;(可参考收藏的CSDN博客,有更多的颜色模板信息)

          color_map1 = colormap(cool(64));     % 颜色模块1

          color_map2 = colormap(hot(64));     %颜色模块2

          color_map3 = colormap(hsv(64));     % 颜色模块3

          color_map4 = colormap(pink(64));     % 颜色模块4

          color_map =[color_map1;color_map2;color_map3;color_map4];       % 将颜色模板拼接起来,构成一个256种颜色的color_map,我认为连通区域数目小于256

          power = floor(256/num);     % 加权,为了将颜色区分的更开,否则的话颜色太接近,显示不清楚;

              for i = 1:1:num

                  img_color_tmp(find(L == i),1)= color_map(i*power,1);

                  img_color_tmp(find(L == i),2)= color_map(i*power,2);

                  img_color_tmp(find(L == i),3)= color_map(i*power,3);

                  img_color =reshape(img_color_tmp, m, n, 3);

              end

      imagesc(img_color);  % 显示图像;

 

0 0
原创粉丝点击