找到高于岩石水位的高度

时间:2011-01-19 13:14:39

标签: image-processing computer-vision

我目前正在帮助一位从事地球物理项目工作的朋友,我不是一个图像处理专业人士,但它玩起来很有趣 遇到这些问题。 =)

目的是估计从表面到顶部从水中伸出的小岩石的高度。

实验设备将安装在带有内置激光指示器的测距仪上。 “操作员”将指向岩石,按下触发器,该触发器将沿着岩石的照片记录一段距离 将在图像的中心。

可以假设设备始终保持在水面以上的固定距离。

我认为有很多问题需要克服:

  1. 照明条件

    • 根据一天中的时间等,岩石可能比水更亮或相反。
    • 有时岩石的颜色会非常接近水。
    • 阴影的位置将全天移动。
    • 根据水的粗糙程度,有时可能会在水中反射岩石。
  2. 多样性

    • 岩石形状不均匀。
    • 根据岩石类型,苔藓等的生长,改变岩石的外观。
  3. 幸运的是,测试数据并不缺乏。水中的岩石图片很容易获得。以下是一些示例图片: alt text 我在图像上运行了边缘检测器,尤其是在第四张图片中,对比度差,很难看到边缘: alt text 任何想法将不胜感激!

3 个答案:

答案 0 :(得分:4)

我不认为边缘检测是检测岩石的最佳方法。其他物体,如山脉甚至水中的反射都会产生边缘。

我建议您尝试使用像素分类方法从图像背景中分割出岩石:

  • 对于图像中的每个像素,从以该像素为中心的NxN邻域中提取一组图像描述符。
  • 选择一组图像并手动将像素标记为岩石或背景。
  • 使用带标签的像素和相应的图像描述符来训练分类器(例如朴素贝叶斯分类器)

由于岩石往往具有相似的纹理,我会使用纹理图像描述符来训练分类器。例如,您可以尝试从每个颜色通道(R,G,B)中提取一些统计测量值,如强度值的平均值和标准偏差。

答案 1 :(得分:2)

颜色分割找到岩石,与边缘检测一起找到顶部。

为了找到水位,我会尝试找到所有的水岩边界,然后地平线(如果可能的话)将平面安装到水面上。 这样你就不用担心岩石的反射了。

如果您知道相机与水之间的俯仰角以及相机是否水平放置(滚动),则会更容易。

PS。这比我想象的要困难得多 - 你不知道所有岩石的距离,因此很难适应飞机。

发生反射实际上是寻找水平的理想方式,在岩石边缘检测中寻找对称路径边缘并选择顶点?

答案 2 :(得分:2)

像素分类可能在这里起作用,但永远不会产生100%的准确度。数据的方差非常大,岩石有不同的颜色(也有“腐蚀”的照明)和不同的纹理。因此,还必须考虑全球信息。

您要处理的问题是前景提取。我知道有两种方法。

  1. 通过图形切割实现能量最小化,参见例如http://en.wikipedia.org/wiki/GrabCut(有论文和OpenCV实施的链接)。应该进行一些初始化(“种子”)(由用户或某些先验知识完成,例如岩石位于中心,而水位于外围)。输入的另一种变体是近似边界矩形。它在MS Office 2010前台提取工具中实现。 可能的前景/背景标记的能量函数强制前景类似于前景种子和平滑边界。因此,能量的最小值对应于良好的前景掩模。请注意,使用像素分类方法,应该预先标记许多图像以进行学习,然后自动完成分割,而使用此方法,应该在每个查询图像上选择种子(或者隐式选择它们)。

  2. Active contours a.k.a.蛇也要求一些用户互动。它们更像是Photoshop Magic Wand工具。他们也试图找到一个平滑的边界,但不考虑内部区域。

  3. 两种方法都可能存在反射问题(像素分类肯定会有)。如果是这种情况,您可以尝试找到近似的垂直对称,并删除下部(如果有)。您还可以要求用户在收集图形切割的统计数据时将反射标记为背景。