2010年1月26日 星期二

視差值計算原理

Bee最近被問到視差值如何計算,還是貼圖舉例說明比較容易。

首先找二張有視差的圖:


相減圖片:


其實有人從相減的圖片中就已經在猜視差值。

在數學計算上面,要找出最像的地方。最簡單的就是做移位再相減取絕對值。
每移動一個點,就會產生一個值。
但因單點判定有可能誤判,所以通常是連同附近的圖一併做計算,將所有的差值和記錄下來。
如果圖片夠像,其差值和就會最小。所以找出最小值是移位多少pixel,其移位值就是視差值。

以下為x=71,y=106(Matlab座標)附近取出的sad值分布圖:
x軸為位移,y軸為和。

可以知道此處以15為最低的值。故視差即為15。
這只是計算一個點,其實是整個圖每一點都要算,所以運算量很大。

以下為Matlab程式:
close all;clear all;
l_img=imread('corridorL.bmp');
r_img=imread('corridorR.bmp');
figure;imshow(l_img);
figure;imshow(r_img);
l=double(l_img);
r=double(r_img);
d=l-r;
figure;imshow(uint8(abs(d)));
[hight,weight]=size(l_img);
range=8;
search=64;
x=71;
y=106;
m=1;
if( search > weight-2*range )
    search = weight-2*range;
end
    while(m <= search)
        n=1;
        sad(m)=0;
        while( n <= 2*range+1)
            sad(m)=sad(m)+abs(l(x+n,y)-r(x-m+n-1,y));
            n=n+1;
        end
        m=m+1;
    end
    figure;plot(sad);


2010年1月25日 星期一

種瓜得豆?

最近在想,Bee做什麼都是半路出家。常常種瓜得豆,不知是心不專,還是命如此?

大學讀化學系,本想考的是電機,分數上不去,也只好讀。後來因為要考材料所,去電機系上工程數學的課程,結果讀了一個電機的雙學位。然後去考電機研究所,結果沒上,只好去當兵。
後來化學系的同學都在LCD面板業賺到了他們的第一桶金,而Bee還在寫組合語言努力中。

本想說大學學了自動控制,可以在控制上發揮,結果光是電腦語言就搞不定。
為了搞定電腦,自學編譯器原理及作業系統理論。這原本是資工系的大難題,Bee也花了數年才會。

後來發現FPGA興起,就為了去學而換公司。差不多用了二年半,因公司政治而中斷,回到了Bee原先的嵌入式系統去做維護工作。

維護對研發人員本就不是長期的飯票,所以改去讀書,想改走機器人研究。其實這是嵌入式系統的加強,又有機會整合FPGA。

讀書的學科有一半和影像處理相關,主要是考量機器人中就以影像最有發展。本來是想以FPGA解決機器人環境認知問題。

中途發現以GPGPU做影像處理比FPGA來得快,於是去參加比賽。
後來指導教授換校,我只能另找,找另一位有做機器人控制的教授。結果Bee現在人在機器人控制的影像組,搞起影像處理了。

種瓜得瓜,種豆得豆,在人生的道路上好像不是。還是我耕耘得不夠久就換,所以長不出原先種的?
真的要好好檢討了。


2010年1月21日 星期四

使用GPU-Z看GPU狀況

想知道GPU有多操,所以找來這個軟體看看。結果還很好玩。

主要畫面:


在玩Game時,還可以看到不同形態的Game具有不同影響。
也可以觀察溫度的狀況,來了解功耗。

其他檢測:


不過有些資訊也是有這個GPU-Z才得以解釋。
像是在CUDA中測效能時,必須利用GPU內部timer來測。但有一行程式一直無法理解,其註解寫著Warm up。
結果一看到GPU-Z去監視CUDA運行時的利用率,我馬上理解出了什麼事。

原來GPU沒事要進入省電狀況,主要是調整Clock的方式來做。
在玩Game時會動態調整clock及負載狀況。
而在使用CUDA模式時會直接跳到最高的clock。所以需要一段時間做Warm up。

GTX275測得資料:


GTX275感測器狀況:

可以發現多了幾個溫度感知。

GTX275執行CUDA時狀況:


GTX275玩Game時的狀況

沒想到Game沒有操到滿。

GTX275執行完CUDA後很快回復到省電模式。


追加在ION上測到的資料

2010年1月5日 星期二

顯示卡升級為GTX275

因應顯示卡瓦數及接頭,一併更換電源供應器,升級到550W。


Power Supply套件。


本次主角Galaxy GTX275。


顯示卡套件。


顯示卡本體,這個很大。之前看照片還沒有發覺。也有點重量。重點是Bee要雙風扇。


輸出界面。


有五支熱導管。


裝進機殼後。因為卡很大,還要用特定角度才進得去。這台電腦也升到頂了,記憶體也是滿的,最多換硬碟了。




2009年12月24日 星期四

CUDA新書到


Bee之前都是自己收集資料,看原文去理解。所以差不多是遇到什麼再去查。
終於有本比較集中資料的書了。常用的運算法也都有解釋。雖然Bee也查的差不多了。
不過買了除了自己查外,拿來教人也是真的。
隨著CUDA運算的流行,實驗室影像組的CUDA人員正在擴張中。

除了影像運算外,Bee本身就是控制組的人,也很想用到Robot控制上。
其中最大的原因是GPGPU的價格低到可以和影像處理的DSP差不多了。
一台使用Atom+ION的NetPC也很合適於控制Robot。
看看控制組何時也想用用CUDA了。

2009年12月16日 星期三

acer小主機


Bee因為有使用P2P下載軟體,使用四核心電腦來用實在有點耗電,所以買了atom處理器的小主機,價格為7xxx元。
不過因為有之前買筆電的經驗,所以決定買具有獨立顯示晶片的機種。
其實能選的不多,只能選用ION晶片。
最後買了acer小主機。
後來才和同事的小筆電比一下效能。
以atom來說是差不了太多。都可以很順的跑Office。
但玩Facebook就不一樣了。
ION晶片可以處理四個Facebook網頁,小筆電第二頁就不太行了。
可見獨立顯示晶片對於現代電腦的重要性。
當時同事說小筆電只是上網及打報告,結果Facebook流行起來,又不行了。

不過當時拿到公司去安裝作業系統時,發現小主機跑得比公司給我的電腦快。
CPU等級沒有比較好,但RAM及HDD都是比較快的,所以整體表現就比較好。
所以拿公司電腦去做PCI卡上的FPGA程式開發是對的,讓它早死早超生吧!


看&quot;遊戲編程精粹6&quot;心得


這篇不太能稱得上是心得。
主要是驚訝於2006年的書,已經預測了2009年Bee所使用的技術。
Bee目前有用到的且書上提到的有:
OpenMP,
OpenCV,
Lua,
GPU,
人工智慧

可見得遊戲上所使用的軟體技術是相當先進的。目前才在Bee的使用上開花結果。
但Bee更相信所謂的專家,真的有預測正確,只是有多少人看出來並願意去相信。
早個一二年去相信,也許整個狀況將大不相同了。