在图像分析中将阴影与其源关联

时间:2014-02-11 21:41:17

标签: python gdal ogr

我有两个栅格。第一个对应于云掩模,即当像素对应于云时为1的图像,而当对应于云时为0。第二个是阴影遮罩,如果像素被分类为阴影则为1,否则为0.

为了减少与阴影分类相关的错误,可以使用阴影必须与云相关联的事实;在某个方向上每个云的x米内必须有一个阴影(可以通过太阳角度来检索)。

有关如何实施此关联步骤的任何想法?

以下是原始图像的快照,云蒙版(白色)和阴影蒙版(黑色)enter image description here

1 个答案:

答案 0 :(得分:1)

我已经看到这是通过队列完成的。基本上伪代码看起来像:

points = new list()
queue = new queue()
for x,y in image_coordinates:
  if is_cloud(x,y):
    point = new point(x=x, y=y, distance=0, cloud_x=x, cloud_y=y)
    queue.push(point)
  else:
    point = new point(x=x, y=y, distance=null, could_x=null, cloud_y=null)
  points.push(point)

while(!queue.is_empty()):
  point = queue.pop()
  for neighbor in point.neighbors():
    if angle_is_correct(point.cloud_x, point.cloud_y, neighbor.point.x, neighbor.point.y):
      if neighbor.is_direct(): //N,S,E,W
        new_distance = point.distance + 1
      else: //NE, SE, SW, NW
        new_distance = point.distance + SQRT_2
      if neighbor.point.distance == null or neighbor.point.distance > new_distance:
        neighbor.point.distance = new_distance
        neighbor.point.cloud_x = point.cloud_x
        neighbor.point.cloud_y = point.cloud_y
      queue.push(neighbor.point)

当跑步结束时,点将是x,y坐标列表,它们到最近的云的距离,以及最近的云的x,y坐标(您可能不需要)。您应该使用angle_is_correct函数确保仅考虑方向正确的云。如果距离超过最大距离,您也可以进一步优化它以停止向队列添加点。

我不完全确定算法的复杂性,但我怀疑有人可以设计证明这是O(n)或O(log(n))。我所知道的是,当我需要它时,它对我很有用。