2017-01-18 122 views
1

我一直在努力使用OpenCV/Python來檢測水的邊緣,我得到的結果相當不準確,並且沒有健壯性。 這是我迄今取得: Original Image, output image準確地使用OpenCV和Python查找水邊

Canny Edge detection

什麼我目前做的是設置一些變量(高斯模糊的水平,用於Canny邊緣檢測西格瑪,最大偏差其中測量的水平可以在每個點之間改變),執行「自動」Canny邊緣檢測(其中中值像素強度被測量並用於形成下邊界和上邊界),然後從左下角向上移動以找到第一個'白色'像素。這是以幀的整個長度的五倍x間隔完成的。

點的平均y值是計算出來的。然後對每個點進行測試,看看它是否偏離平均像素太遠,偏差限制設置得較早。然後剩餘的點以藍線的形式繪製在圖像上。繪製像素的平均值記錄在每一幀。

30幀後,計算平均值的平均值並繪製爲紅線,然後將其假定爲「真實」水面高度。

有沒有人有更好的方式來做到這一點的任何想法?什麼會讓水的邊緣更突出?這種方法適用於我錄製的大多數素材,但效果不佳。

在此先感謝。

回答

2

我有一個類似的問題的工作,我希望這些建議能幫助你以某種方式:

  • 試圖限制您的搜索區域:你可以在這裏的水位應該是假設?請考慮正確檢測水位。假設在下一幀中水位會不斷下降/增加是否安全?它會慢慢改變嗎?裁剪您的圖像以便僅考慮可以安全地假定水位存在的區域。
  • 更改色彩空間:你可以嘗試其他顏色空間,如HSV工作纔能有亮度與色度分離
  • Hough變換的直線檢測:嘗試使用這種算法來搜索特定的水平圖像中的線條或其他形狀。
  • 圖像失真:如有必要,嘗試糾正圖像以糾正曲線,或使用反向透視映射(IPM)取消透視。

你也可以考慮改變邊緣檢測算法。

+0

類似的情況,但在一個不同的學科 - 我也使用中值濾波器來消除「熱點像素」失真。 –