Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何在蒙版图像中检测到缺失的对象并将其从原始图像中移除?_Image_Matlab_Image Processing_Mask - Fatal编程技术网

Image 如何在蒙版图像中检测到缺失的对象并将其从原始图像中移除?

Image 如何在蒙版图像中检测到缺失的对象并将其从原始图像中移除?,image,matlab,image-processing,mask,Image,Matlab,Image Processing,Mask,下面是两幅图像:图像1是原始图像的二值图像,而图像2是“遮罩”图像。图2是我为分割目的提取的斑点的中心部分(细胞核) 图1: 图2: 我的问题是,图像2中的一个斑点被移除(移除斑点上的灰色箭头指向),如何让原始图像知道缺少的对象,从而在图像1中完全移除整个斑点(提及的斑点用灰色箭头指向)?这就像“这里没有细胞核,所以你不需要”这样的移除。图2是图1的某种“种子”图像 两幅图像中的斑点大小不同,图1中的斑点是细胞,图2中的斑点实际上是这些细胞的细胞核 我在两幅图像上都使用了bwconcomp,

下面是两幅图像:图像1是原始图像的二值图像,而图像2是“遮罩”图像。图2是我为分割目的提取的斑点的中心部分(细胞核)

图1:

图2:

我的问题是,图像2中的一个斑点被移除(移除斑点上的灰色箭头指向),如何让原始图像知道缺少的对象,从而在图像1中完全移除整个斑点(提及的斑点用灰色箭头指向)?这就像“这里没有细胞核,所以你不需要”这样的移除。图2是图1的某种“种子”图像

两幅图像中的斑点大小不同,图1中的斑点是细胞,图2中的斑点实际上是这些细胞的细胞核

我在两幅图像上都使用了
bwconcomp
,两幅图像中的
NumObjects
是不同的(当然是不同的)。我如何使用这些信息从那里开始

请帮我一把。非常感谢


(我使用的是MATLAB R2013a)

幸亏有了逻辑索引,这很简单

%# label image 1
lblOne = bwlabel(image1);

%# identify labels overlapping with the seed
%# ">0" not needed if image2 is of class logical
labelsInSeed = lblOne(image2>0); 

%# remove all labels not overlappign with the seed from image 1
%# ensure we're not accidentially pick up label 0 (the background)
image1cleanedUp = ismember(lblOne, labelsInSeed(labelsInSeed>0));

请注意,这种方法可能会在图像1上隐式执行“BWAREOPEN”,因为它可能不会拾取单元外围的孤立像素。如果您不希望发生这种情况,请事先使用
imclose

幸亏有了逻辑索引,这一点非常简单

%# label image 1
lblOne = bwlabel(image1);

%# identify labels overlapping with the seed
%# ">0" not needed if image2 is of class logical
labelsInSeed = lblOne(image2>0); 

%# remove all labels not overlappign with the seed from image 1
%# ensure we're not accidentially pick up label 0 (the background)
image1cleanedUp = ismember(lblOne, labelsInSeed(labelsInSeed>0));

请注意,这种方法可能会在图像1上隐式执行“BWAREOPEN”,因为它可能不会拾取单元外围的孤立像素。如果您不希望发生这种情况,请事先使用
imclose

大声思考-计算图像2中所有对象的质心点(如果您愿意,可以将坐标四舍五入),然后查看这些点中的哪些“落在对象内”(即,该像素为白色)在图1中-当您碰到不属于的质心点时,只需在图1中填充该区域并将其绘制为黑色即可。(如果您有图像处理工具箱)。谢谢!是的,我确实这么想,比如把它们当作原始图像的种子,但我不知道如何将它们放入代码中。我也不知道如何构建这个算法的细节,那又怎样呢?是什么阻止你去发现。。。或者至少尝试一些事情直到成功?阅读文档并在谷歌中查找不清楚的内容。试想犯错是学习过程的一部分。谢谢你的建设性意见,我很抱歉,如果我似乎是懒惰愚蠢的人,只旨在获得代码而不尝试。在我把问题发到这里之前,我已经搜索了所有我能找到的答案。我至少需要一个开始。大声想一想-你如何计算图像2中所有对象的质心点(如果你喜欢,你可以对坐标进行舍入),并查看图像1中这些点中的哪些“落在对象内部”(即,该像素为白色)-当你碰到不属于对象的质心点时,只需在图1中将该区域填充为黑色即可。(如果您有图像处理工具箱)。谢谢!是的,我确实这么想,比如把它们当作原始图像的种子,但我不知道如何将它们放入代码中。我也不知道如何构建这个算法的细节,那又怎样呢?是什么阻止你去发现。。。或者至少尝试一些事情直到成功?阅读文档并在谷歌中查找不清楚的内容。试想犯错是学习过程的一部分。谢谢你的建设性意见,我很抱歉,如果我似乎是懒惰愚蠢的人,只旨在获得代码而不尝试。在我把问题发到这里之前,我已经搜索了所有我能找到的答案。我至少需要一个开始。非常感谢!!它的工作奇迹!我想我还需要给Image2贴上标签。我已经用分水岭和BWAREOPEN事先清理了图像,所以这个过程只是去除不需要的斑点,而不做其他事情。谢谢你的建议!非常感谢你!!它的工作奇迹!我想我还需要给Image2贴上标签。我已经用分水岭和BWAREOPEN事先清理了图像,所以这个过程只是去除不需要的斑点,而不做其他事情。谢谢你的建议!