2009-05-20 81 views
1

我需要做一個程序來做到這一點:給定一個圖像(5 * 5像素),我必須搜索有多少圖像存在於另一個圖像,由許多其他圖像組成。也就是說,我需要在圖像中搜索給定的圖案。搜索圖像模式

要使用的語言是C.我必須使用並行計算來搜索4個角度(0º,90º,180º和270º)。

這樣做的最好方法是什麼?

回答

5

似乎挺直的。

  • 創建旋轉0°,90°,180°和270°的圖像的4個版本。
  • 用一個圖像版本啓動四個線程。夠使用一些度量
  • 對於來自(0,0)的所有位置(width - 5, height - 5)
    • Comapare 25個的參考圖像與在當前位置
    • 25個像素的像素如果它們相等,報告的發現。
1

沒有必要創建圖像的另外三個版本,只是解決這些問題的不同或使用像我創建here類。更好的是,只需複製5x5矩陣並旋轉它們即可。然後,您可以線性掃描圖像進行所有旋轉(這是件好事)。

由於瓶頸當然是訪問圖像數據,所以這個問題不能很好地適用於並行處理。讓多個線程訪問相同的數據會降低速度,特別是在線程「不同步」的情況下,即一個線程比其他線程更深入地通過映像,以便其他線程最終重新加載第一個線程已丟棄的數據。

因此,我認爲最有效的解決方案是創建四個線程,掃描5行圖像,每個線程一個線程。第五個線程一次加載一行圖像數據,並將該行傳遞給四個掃描線程中的每一個,等待所有四個線程完成,即加載一行圖像,追加到五行緩衝區,啓動四個掃描線程,等待線程結束並重復,直到讀取所有圖像行。

+0

我的意思是在內存旋轉,因爲不同的線程使用相同的代碼不同的索引會變得有點混亂... – 2009-05-20 15:44:09

3

使用歸一化相關來確定模板的匹配。

@丹尼爾,丹尼爾的解決方案是利用您的多CPU的好處。他沒有提到一個有用的質量指標,我想提出一個在圖像處理中很常見的質量指標。

我建議使用normalized correlation [1]作爲比較指標,因爲它輸出一個從-1到+1的數字。如果兩個模板完全相同,則0將不會輸出相關1;如果兩個模板完全相反,則會輸出-1。

計算歸一化相關性後,您可以通過執行threshold test或峯均值測試[2]來測試是否已找到模板。

[1 - 腳註]你如何實現歸一化相關?它非常簡單,只有兩個for循環。一旦你有一個足夠好的實現,你可以通過檢查你的實現來驗證你的實現,看看相同的圖像是否讓你一個1.你做的最大(數組)/平均(array_without_peak )。然後確定你有一個良好的峯值平均比率的門檻。

0

5 * 5 = 25

25位適合整數。

每個圖像可以編碼爲4個整數的數組。

迭代你的大圖像(希望它不是太大), 拉出所有5 * 5子圖像,轉換爲4個整數的數組並進行比較。