我屏蔽了图像的两部分。我想将两个屏蔽部分写成一个单独的矩阵。代码如下所示。
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));
任何人都可以帮助我找到解决方案。我想要对蒙面部分进行连接。但是没有明确的想法
答案 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
仍然可用,这也可以为您提供这些掩码(内存效率更低)。