Visual studio上程式之執行速度與CPU之關係?

個人最近在Visual studio 2010上寫一OpenCV的C++程式。

但由於我的程式運算量算大(影像接合 image stitching),即使我已經盡量把程式簡化,但執行速度實在讓人不太滿意。

每秒始終只能在縫合5張影像左右。

我的電腦配備如下:

Q6600 2.4Ghz

RAM DDR2 3.25Gb

Win 7 32bit

AMD R5770 1Gb

我對Visual Studio的執行方式也不清楚,他在執行我的程式的時候是只有單顆核心在跑嗎?還是四顆都會用上?

最理想的狀況是程式能每秒縫合30張,也就是即時運算,但這也意味著大概每0.033秒就要縫合完一張圖,我目前的情況是大概每0.2秒縫合一張,差了大概六倍阿...

30張基本上我也不太強求啦,如果能每秒縫合10~20張我就覺得ok了。

所以我在想,如果換到一個比較新的硬體設備,執行效能是否能有顯著改善?

經費基本上不會是問題,所以CPU我想換成:

I7-2600 3.4Ghz(或者i5-2500也可)

RAM當然也會變成DDR3不過只插一條4g的

因為OS我暫時打算保持Win 7 32bit

顯卡的話還比較無所謂,因為我目前程式應該都只是用CPU去做運算,顯卡比較無關。

已更新項目:

To 【帕拉提斯】:

1.你的程式中是否有平行處理的程式碼?

A:不太懂平行處理的程式碼指的是什麼,不過稍早我有稍微看一下OpenMP的相關內容,您指的東西跟這個相關嗎?(我對那東西完全是外行,還沒用過)

2.你的平行處理是否有過多的 lock 導致效能無法發揮?

A:不太懂...

2 個已更新項目:

3.你的「縫合」動作是否有時間複雜度更低的演算法?

A:我是程式一開始執行時都先把兩台攝影機拍攝到的影像擷取特徵點、比對然後算出兩張圖的相應對 H (Homography)。

得到這個參數後,就一直是單重複做以下動作,我前面說的只能縫合五張,就是不斷做下列內容的事:

從兩台攝影機讀取圖片,然後把其中一台所拍到的圖片藉由前面得到的H做型變(Warping)並跟另一台攝影機的圖片接在一起然後顯示在畫面上。

目前我想到最簡單的就是這方法了0.0

3 個已更新項目:

忘了回應一開始的問題

我預設情況下都是在debug build

那個差別是...?

4 個已更新項目:

To Chen:SURF,但整個程式我只有一開始有執行一次。整個程式一開始就是從camera讀圖、找特徵點並比對...直到最後算出兩張圖的Homography,前面這邊都只做一次(稱為offline stage),後面把圖片做warping並拼湊在一起的動作才是我持續要做的地方(但目前程式我是設定成我只要按esc就可以把(offline stage重做一遍)。 我下面會貼個目前我所做到的內容的影片

6 個已更新項目:

除了顯示影像的那三個視窗外,在那個黑底的cmd視窗下顯示的數字大概都在0.2上下,就是每張圖縫合所需的時間,這真的太慢了0.0...

還是說我要把程式碼的部分內容貼圖上來?

7 個已更新項目:

p.s 影片後半部的實驗部分我有加速兩倍播放

8 個已更新項目:

To Chen:

1.我用的解析度不算大,兩個Camera我都只開320x240的解析度

2.特徵點計算是在我開始不斷地讓程式做圖片warp後並縫合之前的動作,只有程式一開始執行時會做那麼一次,之後不會再去執行到他。我的問題主要是將圖片Wapr後再拼接的速度實在很慢。至於特徵點計算時的速度如何,那倒是比較其次, 因為我現在就是希望縫合的速度能快一點,而SURF的Threshold我是設定800。

9 個已更新項目:

To Chen:可能是因為我解析度只有320x240或者是我測試的場景比較單調(影片),特徵點感覺看起來都不多,而且奇怪的是,在先前我是讓整個程式都循環執行,也就是說特徵偵測比對那些也會一直重複執行,但同樣的場景內無任何移動物體,竟然有時偵測到的特徵點還會不一樣。

至於你說的RANSAC那問題,如果你不介意的話,我直接傳code給你看好嗎?

我在match的時候就是直接用他提供的match函數,是後面findHomography這個函數才有提到RANSAC

10 個已更新項目:

稍早已寄信給您 謝謝

3 個解答

評分
  • Chen
    Lv 6
    9 年前
    最佳解答

    what did you usealgorithm of image stitching ?

    SIFT or SURF, SURF is 2 times as fast as SIFT, but effect is less than

    SIFT in some aspect.

    2012-08-22 15:58:54 補充:

    first of all, because that your program invovles into OPENCV program which is very complicated, so program is tardy.

    1. You may shrink original image before processing SURF

    2. find threshold value in SURF , and make threshold value less in order to reduce feature descriptor points.

    2012-08-22 16:52:21 補充:

    how many features descriptor points do you get in threshold = 800 for every image ?

    every feature point has 64 vectors in SURF.

    which method do you match bewteen two image ?

    RANSAC or ORSA

  • 匿名使用者
    9 年前

    大概是在問你有沒有用多執行緒吧˙˙?

  • ?
    Lv 7
    9 年前

    你是 debug build 還是 release build?

    你的程式中是否有平行處理的程式碼(你確定有寫就是有,沒有的話大概就是沒有)?

    你的平行處理是否有過多的 lock 導致效能無法發揮?

    你的「縫合」動作是否有時間複雜度更低的演算法?

還有問題?馬上發問,尋求解答。