2013-05-01 53 views
3

我正在開發一個簡單的使用C++和OpenCV的「激光線」掃描儀。到目前爲止,我可以以1像素的精度檢測激光線的中心,所以我有一個可能的「子像素」功能/算法的起點。 (激光線約爲15-20像素寬)用亞像素精度檢測激光線的中心

現在我有興趣將這個細化爲亞像素精度。我知道OpenCV有一些 子像素檢測功能,但據我所知這些只是用於檢測 的角落。

如果有人有任何建議,我想聽聽他們。

有些信息;

  • 系統:QT框架,C++,OpenCV庫

  • 攝像機; 單色(無色),配備紅色濾鏡

  • 圖像分辨率; 2560 x 1920

  • 注意:只有1張圖像將被分析爲激光線。

+0

什麼限制你一個像素的精度? – juanchopanza 2013-05-01 07:44:57

+0

我想輸出一系列描述激光線掃描的(真實世界)coördinates。最終它將被用於測量目的。爲了保證最高的精度,我需要確定亞像素精度中激光線的中心。 – phreak 2013-05-01 08:10:52

+0

我明白這一點。不清楚的是問題是什麼。 – juanchopanza 2013-05-02 04:13:28

回答

6

有,我已具有良好的效果使用兩種基本方法:

  • 容易:在一個幀中,閾值和找到包含激光條紋的圖像的區域中,然後安裝一個拋物線在每個圖像行周圍的亮度最大值附近的一個小間隔(5-7像素,取決於你的聚焦程度)的原始像素強度。你的配件程序必須有一個robartifier,因爲異常值可能,例如近景區域有明顯的鏡面反射。

  • 如果攝像機的幀率足夠高(或光束移動得足夠緩慢),會更難但更精確:Curless的spacetime analysis

搜索「subpixel laser fitting」會返回幾個最近的結果。在實際應用中,應密切關注飽和度:曝光時間(或鏡頭光圈)應確保即使光束撞擊物體表面的最亮部分,傳感器也不會飽和。在信號被飽和度限幅的區域內搜索峯值顯然是毫無意義的。

聚焦(和景深)是需要注意的其他領域 - 物體表面的光束模糊圖像會產生偏斜的峯值。

+0

謝謝,我會研究一下! 目前正在嘗試使用高斯擬合函數來確定子像素級別上激光線的質心。我仍然對建議tho感興趣;).. – phreak 2013-05-02 06:15:38

+1

如果它符合您的請求,您應該upvote /接受答案。謝謝 – 2013-05-05 21:00:01