如何确定属于对象内外边界的点?

时间:2013-06-30 09:56:49

标签: python image matlab

我在图像中有一个对象。我想确定属于内部边界,外部边界和没有边界的对象本身的点。

示例图片如下所示

enter image description here

对象之间的中间区域也是背景。

该对象仅由黑色像素组成。

我们想确定

  1. 外部点的坐标
  2. 内点的坐标
  3. 属于对象但不属于边界的点的坐标。
  4. 感谢

4 个答案:

答案 0 :(得分:3)

一种可能的策略:

  1. 洪水将外部填充到某种颜色,比如红色。
  2. 任何触摸红色像素的黑色像素都是外部边框像素。
  3. 触摸白色像素的任何黑色像素都是内部边框像素。
  4. 所有其他黑色像素都在物体内部。
  5. 可以在单次扫描图像的同时评估点2-4。

    如果您想要快速执行此操作,可以将OpenGL与评估片段着色器一起使用。但这有点多了。

答案 1 :(得分:1)

在matlab中

l = bwlabel( img, 4 ); % label white regions using 4-connect neighbors
[or oc] = find( (l == 0) & imdilate( l == 1, strel('disk',1,0) ) ); % outer boundary
[ir ic] = find( (l == 0) & imdilate( l == 2, strel('disk',1,0) ) ); % inner boundary

答案 2 :(得分:0)

我在这里发布了一些flood-fill algorithm。希望这可以提供帮助。

答案 3 :(得分:0)

我没有尝试过,但尝试通过以下方式进行伪边缘检测:

filter=[0 -1 0 ; -1 4 -1 ; 0 -1 0];
newImage=conv2(yourImage,filter);

它假设仅保留(或主要)外部和内部的egdes。之后,如果你将执行yourImage-newImage,你将获得不是边缘的abject的内部像素。

我认为它可以完成一些工作,让你进一步找到解决方案。