2014-02-11 52 views
1

我有兩個柵格。第一個對應雲端遮罩,即像素對應雲端時爲1,當不包含時爲0。第二是蔭罩,1,如果該像素被分類爲陰影,否則爲0。在圖像分析中將陰影與其來源聯繫起來

爲了減少與陰影分類相關聯的誤差,可以使用陰影必須被關聯到雲中的事實;在一定方向上每個雲的x米內必須有一個陰影(可以通過太陽角來檢索)。

關於如何實現這個關聯步驟的任何想法?

這裏是一個原始圖像快照,雲罩(白色),蔭罩(黑色)enter image description here

+0

你的目標是什麼?你想創建陰影面具嗎?因爲它聽起來像你從它開始。如果不是,那麼你想分類什麼? – Pace

+0

我試圖做一個陰影聯想到其雲來降低蔭罩的錯誤 – WAF

回答

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(日誌(N))。我所知道的是,當我需要它的時候,它對我很快奏效。