是否可以在matlab中着色二进制图像的单个连通分量?

时间:2013-04-04 20:35:15

标签: matlab

我一直想知道你是否可以给我一些关于为二进制图像的单个连接组件添加颜色的建议, 这就是我所做的; 首先,为了使用matlab的bwlabel函数,我将我的RGB图像转换为二进制, 然后我写了一个程序来询问用户他/她想要的组件。 现在的问题是我们的TA已经要求我们将所选组件着色然后显示结果。 但我不知道即使它是否可能,如果它是如何做到这一点.. 感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您可以将RGB颜色空间用于此目的。由于您尚未提供任何样本数据,我将使用MATLAB中的bwlabel示例进行解释。

BW = logical([1 1 1 0 0 0 0 0
              1 1 1 0 1 1 0 0
              1 1 1 0 1 1 0 0
              1 1 1 0 0 0 1 0
              1 1 1 0 0 0 1 0
              1 1 1 0 0 0 1 0
              1 1 1 0 0 1 1 0
              1 1 1 0 0 0 0 0]);
L = bwlabel(BW,4);    %Result
imshow(L);

enter image description here

现在L将是:

 1     1     1     0     0     0     0     0
 1     1     1     0     2     2     0     0
 1     1     1     0     2     2     0     0
 1     1     1     0     0     0     3     0
 1     1     1     0     0     0     3     0
 1     1     1     0     0     0     3     0
 1     1     1     0     0     3     3     0
 1     1     1     0     0     0     0     0

假设我想分别对组件1,2和3使用红色,绿色和蓝色:

[m, n] = size(L);
result_image = zeros(m, n, 3);
result_image(:,:,1) = (L==1);
result_image(:,:,2) = (L==2);
result_image(:,:,3) = (L==3);
imshow(result_image);

enter image description here

如果你有另一个连接组件4(甚至更多),你可以使用类似的东西:

result_image(:,:,1) = result_image(:,:,1) + (L==4)*1;
result_image(:,:,2) = result_image(:,:,2) + (L==4)*0.5;
result_image(:,:,3) = result_image(:,:,3) + (L==4)*0;

对于不同的颜色,只需使用相乘的值(此处为1,0.5和0)即可。