2010年10月28日 星期四

EDID Viewer utility

最近工作時,臨時需要撈EDID資料來看...
(wiki:EDID-Extended display identification data)
大部分Vendor提供的Tools都是需要配合Vendor自己的Debug board或是Debug tool,
手邊有某HDMI Chip大廠的Tools,但是要搭配它的tool,
不然這個tools還蠻方便的,可以直接看每個欄位的對應infomation。

我自己原廠的tool,EDID的功能怎樣都撈不到,
不知道是disable掉?還是pending...
更別說親切的介面了...

之前是土炮,把DDC EEPROM解焊下來,
用我手邊的萬用燒錄器直接讀binary出來,
再用某HDMI Chip大廠的tools讀binary來看資料。

這次因為人在他鄉,手邊沒有烙鐵,加上這樣做有一定的風險,
(拿客戶的EVT kit的原則是,能不動就不動....)
因為VGA port正常,就接電腦直接撈EDID data,
所以我找到這套軟體還蠻方便的。

EDID Viewer utility
http://www.eldim.fr/products/display-controller/fpdlite/fpdlite-free-tools
Platform: Windows
Cost: Free!

可以撈出Windows取得的EDID Data,
直接顯示每個欄位對應的資訊,也有顯示Raw Data,
單純只是想看EDID info的話倒是個不錯的小工具....


話說...
最近回到家都很晚了...
今天早上八點半從公司出發,晚上十二點回到家,
出門到回家超過15小時...
最近真的是有點操...

2010年10月5日 星期二

Dot TK開放免費域名!!!!

今天心血來潮看了一下我的domain還有多久到期...
發現有開放設定DNS Server了!!!

http://www.dot.tk

很久以前有寫過介紹免費DNS的文章,
http://blog.mosquito.work/2008/01/blog-post_11.html
文章裡提了一個dns provider,提供申請別人的子網域名稱還有網域代管,
但是因為這個provider會擋google bot,
不久之後就花錢買domain了,
三年24.75USD,當下也是考慮了很久很久,
畢竟當初還是學生:)


現在,我購買Domain的這個網域也開放免費DNS了,
之前只提供Web redirecting,但現在是完整的囉!
(好像有90天要超過25hit的限制,不過這是很小case的要求:D )

簡單說...
http://www.dot.tk/en/pageA00.html

輸入你要的domain,確認是否被註冊走...
限量是殘酷的啦XDDDD

喔喔!It's still avilable
選擇free domain繼續吧


接著,問你website url,這是web redirecting
點擊下面的Use DNS for this domain
你可以選擇是否要用dot TK提供的Free DNS Service
但是只能增加A Record,就是只能指定到一個IP
或是選擇Use my own DNS Service
這裡輸入你的DNS代管服務

以上,基本上你就有了一個免費的Domain,
當年如果有免費的可以用,我八成不會花錢買吧XDDDDD

免費的DNS代管服務
雖然被DynDNS買下來了,不過品質不變,
我也是用這家的說:D


2010年9月15日 星期三

BLE WLE Implement and RGB convert to YCbCr(YUV)

看到BLE跟WLE的資料,
所以拿Python來寫看看...
因為主要是對Y做處理,所以要先將RGB轉成YCrCb(YUV)

reference:
  1. 請問 RGB 轉換至 YCbCr (YUV) 的計算公式中如何替換 Cg 的?
    http://forum.slime.com.tw/thread102222.html
  2. [程式] RGB與YUV的色彩轉換
    http://www.wretch.cc/blog/killman/7147165
  3. RGB <--> YUV Conversion Formulas
    http://www.cse.msu.edu/~cbowen/docs/yuvtorgb.html

第一篇的文章提到了一個重點,
當初在寫CA Transform Compress的時候,堅哥有建議我轉YUV,可以降低1/4的資訊量,
可是轉完整個畫面顏色都偏掉了,而那個時候我不清楚為什麼會這樣...
我以為是因為轉換過程的Loss,但實際上RGB轉YCbCr是接近Lossless的。

簡單說,當初我用了Analog的轉換式來運算,
但實際上RGB轉YCbCr有分Analog與Digital,
BT.601與BT.709的轉換式也不同。

YUV是根據人眼對顏色的感知所弄出來的color space,
同時,人眼對於亮度的變化感覺最明顯,
以下列式子為例,綠色占的比例最高,紅色次之,藍色最低,因為人對於綠色的感知程度最高
Ey = 0.299R+0.587G+0.114B
Ecr = 0.713(R - Ey) = 0.500R-0.419G-0.081B
Ecb = 0.564(B - Ey) = -0.169R-0.331G+0.500B
上述是BT.601的參數,而BT.709是針對LCD Display所定出來的建議值。

下面是BLE/WLE的Code,以及RGB與YCbCr的轉換
import Image
im = Image.open("test.jpg")
#print im.format, im.size, im.mode
im.show()

#BLE and WLE Filter
BIL = range(256)
BIL[0:20] = [0,0,0,0,0,0,0,0,0,0,
             0,0,0,0,0,4,8,12,16,20]
BIL[236:256] = [236,240,244,248,252,255,255,255,255,255,
                255,255,255,255,255,255,255,255,255,255]

im_array = im.load()
Y601CbCr = im
Y601CbCr_array = Y601CbCr.load()
x,y = im.size
#Convert image from RGB Space to Y601CbCr space
for i in range(x):
    for j in range(y):
        R = im_array[i,j][0]
        G = im_array[i,j][1]
        B = im_array[i,j][2]
        Y601 = int(R * 0.299 + G * 0.587 + B * 0.114)
        Cb = int(R * -0.169 + G * -0.332 + B * 0.500 + 128)
        Cr = int(R * 0.500 + G * -0.419 + B * -0.0813 + 128)
        Y601CbCr_array[i,j] = (Y601,Cb,Cr)

#BLE and WLE 
x,y = Y601CbCr.size
for i in range(x):
    for j in range(y):
        Y601CbCr_array[i,j] = ( BIL[Y601CbCr_array[i,j][0]],
                                Y601CbCr_array[i,j][1],
                                Y601CbCr_array[i,j][2])

#Convert image from Y601CbCr space to RGB Space
x,y = im.size
for i in range(x):
    for j in range(y):
        Y601 = Y601CbCr_array[i,j][0]
        Cb = Y601CbCr_array[i,j][1]
        Cr = Y601CbCr_array[i,j][2]
        R = int(Y601 + (1.4075 * (Cr - 128)))
        G = int(Y601 - (0.3455 * (Cb - 128)) - (0.7169 * (Cr - 128)))
        B = int(Y601 + (1.7790 * (Cb - 128)))
        im_array[i,j] = (R,G,B)

im.show()

Result:
Orignal
After BLE and WLE 

利用調整曲線讓Y更早截止、飽和,犧牲偏亮與偏暗的細節,
讓畫面看起來對比更高。

點圖可以看原始圖片,原圖是1920x1080的圖片,
上傳之後被縮小了Q.Q


PS.
謹以此文向當初我那難產的CA Transform Compress與堅哥至上敬意...