2011-04-05 108 views
2

我在找到相同校準工件的多個視圖中的相應點時遇到了問題。 下面您可以看到校準目標的示例圖像。排序2D座標

enter image description here enter image description here

我需要排序所有圓形標記的二維座標,並確保在所有視圖中的相應(相同)的標記物具有在標記矢量相同的索引。 任何人都可以給我一個線索如何處理這樣的事情? 非常感謝。

+0

那些是管道的開口? – 2011-04-06 18:27:19

+0

否。此目標僅用於圖像處理目的。 – Marcin 2011-04-07 05:50:17

回答

2

我不知道我完全明白你想要什麼,但我可以幫忙。

你的神器是不錯的,因爲它是一架飛機,所以你可以從一個圖像走向另一個圖像與單應。一旦你有了homography,你的問題或多或少地完成了。

我曾經寫了一個程序,這樣做:

  • 加載圖像(cv::imread()
  • 計算SURF功能(cv::surf()
  • 匹配的特徵在一起(使用最小二乘特徵之間)
  • 使用openCV的findHomography()CV_RANSAC

基本上,你會得到類似的東西:http://blogs.oregonstate.edu/hess/files/2010/10/sift_demo_screenshot1.jpg

而我認爲這是你想要的:你有一個轉換,匹配你的兩個圖像之間的標記。 (這種變形是一種單應性,比我給出的鏈接中的一束線要少得多,這是一個小矩陣,它可以「吞食」圖像1中標記的座標,並「回退」相應標記的座標在image2中(使用SIFT代替SURF,但它們幾乎完全相同)

+0

我認爲我的問題有點不同。我得到了計算圓形標記的二維像素座標並返回point2D矢量(標記位置)的程序。我需要的是對標記進行排序,並確保(例如)第一張圖像中的標記i = 5的標記與所有其他圖像中標記i = 5的標記相同。 – Marcin 2011-04-05 11:38:19

+0

太棒了!如果我理解正確,對於每個圖像,您都可以獲得一個'矢量',它們中的每一個代表圖像i中標記的二維座標。現在,對於每張圖片,您都有一個「矢量」,您是否想知道在索引i處它是否始終是相同的標記?我將給出2個圖像的方法:直接將'cv :: findHomography()'應用於這兩個向量。你現在有一個'H'矩陣。對於第一個圖像的每個Point2D(我們稱它爲'vec1 [i]'),你必須有'constant * vec2 [i]〜= H.vec1 [i]'。 (記得在每個'vec [i]''末尾添加1) – Fezvez 2011-04-08 09:01:02

1

您仍然可以使用類似的方法。與Fezvez將特徵檢測(圖像中的哪些點是有趣的)和特徵描述(關於該點的特徵)相結合的方法不同,您自己的代碼已經提供了一個檢測部分(圓心位於哪裏)。不同於Fezvez的方法。

現在您需要生成一組假定的匹配(猜測哪個集合對應哪個集合)。你可以在每個圓圈位置使用特徵描述符來做到這一點(可能有一個大窗口)。有關在特定位置提取描述符的示例,請參見此vl_sift section on custom frames。請注意,您可能需要將圖像重新歸一化以說明局部仿射變形。使用SIFT的距離比測試或其他系統的潛在其他距離度量。

一旦你找到了匹配,你就可以將它送入像OpenCV的findHomography這樣的強大的單應性求解器來拒絕異常值(由於噪音/其他問題不可避免地產生的無效匹配)。

或者,您可以手動建立矩形等角點的點對應關係,並將其提供給單應性求解器。

所有平面表面(如校準目標)的透視投影可以通過單應相關聯。任何你想在標記身份方面做的事都可以從變換中退出。