2016-12-01 70 views
1

所以我有這樣的形象: Cross算法找到灰度圖像的跨

它看起來像一個小圖像,但實際上它來自一個攝像頭,一個大的分辨率,這意味着該矩陣圖像將是大尺寸的。 我需要做的是以儘可能最快的方式找到十字架。
我試圖掃描所有的矩陣,並找到白線,但我想聽到你的消息,也許你有更好更快的解決方案來解決這個問題。
請記住,這個圖像來自一個攝像頭,所以這可能看起來像一個常規的情況下,但實際上很多東西可能會發生,如交叉不在中心,交叉移動等
非常感謝你,並有一個美好的一天。

- 版本-
我很抱歉沒有回答問題。我是一名學生,不幸的是我的日程表很瘋狂..我會盡我所能在線。
您的問題的答案是:
原始圖像的全尺寸是多少?最大圖像大小爲:寬度:1936像素,高度:1216 px。但是,由於我們爲用戶設計程序,因此用戶可以根據自己的喜好來管理分辨率。
你在使用什麼操作系統? Windows 7/8/10
什麼語言/工具集?我正在用C#編寫。我被給了一個相機的API,我需要使用這個API來計算我從相機獲得的圖像。
你有GPU嗎?我這麼認爲..
多核CPU?嗯..我不這麼認爲..
最後兩個問題與我的問題有什麼關係?我問,因爲我是新來的..




問另一個問題:
+由於交叉的位置定義的用戶,也可以是任何地方在屏幕上。它也可以根本不顯示,因爲用戶可以忘記打開相機或其他東西。所以基本上,任何事情都可能發生。
此外,相機本身可能會損壞或不完美,並且一些意想不到的事情可能會出現在屏幕上,如隨機白色像素或類似的東西。
+關於十字線的最小寬度 - 我其實不知道..它來自相機,所以它基本上很輕。我依賴於用戶以及他們使用的是什麼設備。所以我想在這種情況下最小值是1 px。
我的意思是「找到十字架」是: 我需要以最快的方式找到圖像中十字中心,就像測量設備一樣。

現在算法正在掃描屏幕上圖片給出的像素矩陣,並在每行中找到行中的最大值。
然後,在計算它在哪裏,做一些數學吧..
但問題本身是讓十字架的中心位置以最快的方式,同時保持計算的準確性。 我們不想丟失數據,因爲程序可以在非常敏感的環境中使用。
我希望我做的事情更清楚..



再次,抱歉耽擱,感謝你的幫助。

+0

原始圖像的全尺寸是多少?你在使用什麼操作系統?什麼語言/工具集?你有沒有GPU?多核CPU? –

+1

有關您期望收到的圖像的更多細節肯定不會受到傷害。例如,實際的分辨率,即使是近似的。無論你是否可以指望十字架到達圖像邊緣,就像這個在3個地方所做的那樣,至少十字形線條的寬度將達到多少像素,通過「找到十字架」你究竟意味着什麼 - 你尋求找到交匯點?你是否想找到一個不接觸圖像邊界的十字的邊框?在需要儘快找到答案的任務中,這些都是相當重要的。 – enhzflep

+0

如何回答5天前您提出的一些問題,以便人們可以更好地幫助您?如果您沒有足夠的信譽點添加評論,請點擊原始問題下的「修改」,並添加額外的詳細信息/說明。 –

回答

1

一切都取決於真實的圖像質量。對於給定的示例,足以在每行和每列中找到最亮的像素,併爲線建立最小二乘逼近,或計算圖像矩。

如果存在任意對象並且存在一些噪聲,則可以嘗試Hough變換以確定線

+0

是的,其實我想過霍夫變換,但想先檢查其他人的建議。謝謝。 – kidneyThief

0

圖像處理在計算上是昂貴的。 關注質量,根據您提供的示例,首先應考慮的是對圖像應用高通濾波。它會使找到十字架更容易,更難以陷入錯誤的檢測。 如果您正在尋找一本很好的參考書,那麼您可以從Rafael Gonzalez那裏找到一本名爲「數字圖像處理」的書,其中涵蓋了您需要了解的所有基本知識。

+0

謝謝。我會看看。 – kidneyThief

0

更新回答

你的CPU是多核心(並且具有GPU)的問題是至關重要的 - 它不夠好不知道。

  • 如果您的相機需要50ms才能獲取圖像並且不進行處理,則可以每秒處理20幀。

  • 如果您花費50ms獲取一幀,然後50ms處理它,那麼您現在只能每秒處理10幀。然而,如果你有一個多核CPU並且編寫多線程代碼,你可以在50ms內獲得一個幀,並且在下一幀到來之前有3個其他線程/內核每個處理50ms的處理,所以突然間,您可以每幀進行150毫秒的額外處理,並且仍然保持不加處理的幀率。

上述內容也適用於您的GPU。

看看我的其他答案here底部的紅色/綠色圖形,以更好地理解我對線程的看法。此外,跨幀合計的操作類型非常適合SIMD優化,因此您需要確保將編譯器設置爲優化/矢量化順序存儲器訪問 - 或手動編碼SIMD版本。

原來的答案

你可以嘗試調整/在圖像合成到高柱,1個像素寬。然後同樣將圖像下移到1像素高的長條。然後尋找相應的白條的最大(或中心):

enter image description here

我已經表明了杆10個像素寬,你在這兒可以看到它們。

+0

一個有趣的捷徑,但是...在該背景上發出一些噪音,看看它是如何反應的 - 考慮到線條很薄,不需要太多噪音來壓制線條信號。對於一個對角線的交叉也是無法使用的(我恐怕不會有一個合適的解決方案,忽略有**線被檢測出來,這些線最好是正交形成一個交叉線) –

+0

@AdrianColomitchi是的,我絕對承認對角線會導致問題 - 我想OP將不得不說,如果這可能是一個問題。同樣的噪音雖然可以過濾。我只是喜歡這個想法,因爲它的計算成本很低,並且可能作爲第一次估計哪裏看起來很有用,即使不是所有輸入圖像的完美解決方案。 –

+0

嗯......考慮到這些線條有多薄,恐怕任何非自己的去噪都會將這些線條無法上網。在處理對角線方面,鑑於算法的價格是多麼的低廉,我想知道不論是在側面還是在另外一些方向上再次投射都不會是有益的(畢竟,只需要計算一些sin/cos配對一次,並在相同的圖像掃描週期中投影到其他方向) –