表面检测


9

如何从图像中分割出大面积的灰色(从白色到黑色)?(如果您在opencv中知道这一点,则可以通过说出在opencv中的操作来回答)。例如给出此图片:

在此处输入图片说明

您会看到这是一个很大的灰色区域,可以与其他区域清楚地区分开。如果该区域可以具有任何灰色阴影并且必须实时工作,那么如何分割该区域

提前谢谢。


我看到几个明显可区分的灰色区域。您能显示您想要的结果吗?
belisarius博士2011年

我想要的结果是中间灰色矩形的右上角和左上角的坐标以及左下角的坐标
Olivier_s_j

您能否告诉我们有关环境以及您将需要处理的图像中的潜在差异的其他信息?目标将始终位于图像的中间吗?是否还会有其他可能大小相同的灰色矩形?如果它们显示为相同的灰色阴影怎么办?我们还有其他可以用来识别它的东西吗?它的顶部总是有小的“ T”形吗?
justis 2011年

嗨,目标永远不会一直在图片的中间。目标始终是某种矩形。(它也可以只是一堵墙)。如果有多个矩形,则也应将其检测出来,但它们应较大。小面积可以丢弃。如果它们全部显示为相同的灰色,则应该全部检测它们,但是发生这种情况的机会很小。可以检测到的唯一真实属性是,表面在整个表面上将具有相同的灰色(或多或少),并且是矩形。每次
都不

Answers:


9

使用分水岭算法或图形切割,您将对灰色区域进行合理的分割。分水岭在opencv中可用,但尚未有图形切割。(顺便说一下,这是Kinect的深度图吗?)


1
opencv中的分水岭功能需要一个8位3通道图像作为输入。我的深度图是一个8位1图像。任何想法如何解决这个问题?
Olivier_s_j 2011年

/ *获取图像属性/ width = src-> width; height = src-> height; /为灰度版本创建新图像* / IplImage * dst = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1); cvCvtColor(src,dst,CV_RGB2GRAY);
NAV

另一个问题,我只是在其他图像中使用了分水岭函数(仅来自opencv的示例)。但它们始于彩色图像和二进制图像。我只有1张图片... grascale图片。任何关于掩码应该是什么的想法(第二个输入变量)?
Olivier_s_j 2011年

4

在Mathematica中,您可以执行以下操作:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

在此处输入图片说明

可能您可以将此代码转换为任何图像处理库。


嗨,看起来不错。但是我没有mathematica。但是我猜你是根据这张图片的灰度使用阈值的?也许您可以在代码中提供一些信息?Thx
Olivier_s_j 2011年

1
@Ojt对于每个命令,您可以阅读“ reference.wolfram.com/mathematica/ref/xxx.html ”以获取描述。例如reference.wolfram.com/mathematica/ref/...
博士贝利萨留

好吧,我按照你的建议做了。但是似乎您正在使用Binarize将阈值设置为给定值。就我而言,这是不可能的。由于的大面积区域可能具有不同的灰色阴影。(例如,中间表面可能是非常浅的灰色)。然后阈值将不起作用。
Olivier_s_j 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.