在matlab中将图像的蒙版部分写入不同的矩阵

时间:2014-02-26 06:00:25

标签: matlab image-processing

我屏蔽了图像的两部分。我想将两个屏蔽部分写成一个单独的矩阵。代码如下所示。

 Image1=double(imread('obtained_output.jpg'));
 Image2=double(imread('reference_output.jpg')); 
[M,N]=size(Image1);
subplot(2, 2, 1);
imshow(uint8(Image1));
mask = zeros(M, N);
mask(1:120, 1:100) = 1;
mask(180:300,1:100)=1;
subplot(2, 2, 2);
imshow((mask));
subplot(2,2,3);
obtained_mask=Image1.*mask;
imshow(uint8(obtained_mask));
subplot(2,2,4);
 reference_mask=Image2.*mask;
 imshow(uint8(reference_mask));

任何人都可以帮助我找到解决方案。我想要对蒙面部分进行连接。但是没有明确的想法

1 个答案:

答案 0 :(得分:0)

二进制图像中的多个独立区域可以用bwconncomp(黑/白连接组件)分隔:

>> CC = bwconncomp(mask)
CC = 
    Connectivity: 8
       ImageSize: [320 320]
      NumObjects: 2
    PixelIdxList: {[12000x1 double]  [12100x1 double]}

表示您有NumObjects=2个区域,其中非零像素位置存储在PixelIdxList的每个单元格中。使用此数据为每个不同的区域制作单独的逻辑掩码。使用labelmatrix

L = labelmatrix(CC);
mask1 = L==1;
mask2 = L==2;

或者手动,如果您愿意:

mask1 = false(size(mask));
mask1(CC.PixelIdxList{1}) = true;
mask2 = false(size(mask));
mask2(CC.PixelIdxList{2}) = true;

注意:bwconncomp是执行此操作的新方法,尽管函数bwlabel仍然可用,这也可以为您提供这些掩码(内存效率更低)。