2011年9月5日 星期一

Histogram Equalization的物理解釋

個人解釋,有錯請包涵並指正

公式證明找得到,但希望可以用理解的方式來看這個結果

基本上推導出的結論就是將原影像的CDF當作轉換用的LUT,得出的新影像其PDF產生的CDF會和定值的PDF產生的CDF一樣, 會是斜直線,照理PDF應該要變成水平的吧?但不會,是因為Normalize過嗎??就算式來看p(y)是constant但是dy不是,所以等dy的PDF來看, p(y)就不會是constant了
(參考 http://en.wikipedia.org/wiki/Histogram_equalization 的圖示)

以高斯分布來想像, 其PDF是像山坡, 左右兩側偏低, 中央偏高, 若要修正成平坦的PDF, 勢必要將中央削平, 兩側填高

將 Gaussian Distribution的CDF當LUT和一對一, 0對0, 255對255的斜線LUT疊起來看, CDF會把中間Level以下的對應成更低的Level, 造成低Level的數量變多; 而中間Level以上的則會對應成更高的Level, 使得高Level的數量變多, 如此便可以把中間Level的量往兩邊擴散, 而中間的分水嶺則會依據分布的中心來移動

若以局部區塊來看(p(y) keep constant)
小範圍(dx)的p(x)若很大(例如高斯分布的峰值), 則對應CDF的dy會比較寬, p(y)會比p(x)降低
小範圍(dx)的p(x)若很小(例如高斯分布的兩側), 則對應CDF的dy會比較窄, p(y)會比p(x)升高

(詳細內容參考原文, 摘錄部分如下)
http://fourier.eng.hmc.edu/e161/lectures/contrast_transform/node3.html

To transfer the gray levels so that the histogram of the resulting image is equalized to be a constant:

\begin{displaymath}h[i]= \mbox{constant},\;\;\;\;\mbox{for all $i$} \end{displaymath}

To equalize the histogram of the output image, we let $p(y)$ be a constant.
Intuitively, histogram equalization is realized by the following:
  • If $p(x)$ is high, $P(x)$ has a steep slope, $dy$ will be wide, causing $p(y)$ to be low to keep $p(y)dy=p(x)dx$;
  • If $p(x)$ is low, $P(x)$ has a shallow slope, $dy$ will be narrow, causing $p(y)$ to be high.

2011年9月2日 星期五

經營策略

經營策略是指,從事與對手不同的作業,或以異於對手的方式,從事類似的作業。
~策略大師麥可‧波特(Michael Porter)



這對企業或個人都是一樣的思維, 要嘛, 就是做別人不做的(藍海), 不然, 就要做得比別人好(紅海), 選擇的原則還是在於自己的條件, 要盡量發揮自身的特質優勢, 避開弱點, 才能展現效率和成果, 只是很難找到100%符合自己優勢的領域, 而且隨著時間流逝, 個人或企業的優勢也會隨著經驗和環境的變化而改變, 能看到趨勢還有自己的演變才能亦步亦趨, 其他就交給上帝了

MSN看不到我的聯絡人

發生過幾次這樣的情況,通常是在電腦休眠之後在別的區域網路環境打開後發生的,重開機就好了,今天午後又發生了一次,但或許早上上班開機後就發生了,只是我沒注意,我基本上是很少關機,都是用休眠來取代

這次我上Windows Live Solution Center去找不用重開機的解決方法,找到了

http://windowslivehelp.com/thread.aspx?threadid=fb5ece2c-4ee0-41a4-8734-96680f8cf498

看起來是蠻有道理的,應該是緩存不知道什麼原因(會是網路環境變動?)無法更新,因為Web MSN是看得到的,總之,我照說明關閉MSN,刪掉我的帳號名稱的緩存目錄,就恢復了(一開始刪不掉,還到工作管理員殺MSN相關程序,其實會不會是有執行中程序死在那邊,導致無法更新緩存?不知道,下次再發生時可以試試看,關閉MSN,看工作管理員還有沒有相關執行程序還活著)

Windows Live Messenger 2009 :在完全退出Windows Live Messenger的情況下請點選[開始]——[所有程式]——[附件]——[執行],在輸入%userprofile%\Local Settings\Application Data\Microsoft\Windows Live Contacts後[確定]。

Windows Live Messenger 2011 :在完全退出Windows Live Messenger的情況下請點選[開始]——[所有程式]——[附件]——[執行],在輸入%userprofile%\Local Settings\Application Data\Microsoft\Windows Live\Contacts後[確定]。

2011年9月1日 星期四

Non-maximum suppression

Non-maximum is one of the stages in Canny edge detection.

I collected some theory/implementation as below.


http://en.wikipedia.org/wiki/Canny_edge_detector
http://140.115.11.235/~chen/course/vision/ch6/ch6.htm <--canny.cpp
http://ccy.dd.ncu.edu.tw/~chen/course/vision/ch6/單元六、邊緣偵測.pdf
http://ccy.dd.ncu.edu.tw/~chen/course/vision/index.htm
http://www.tomgibara.com/computer-vision/canny-edge-detector <--CannyEdgeDetector.java
http://www.cvmt.dk/education/teaching/f09/VGIS8/AIP/canny_09gr820.pdf
http://www.nada.kth.se/cvap/abstracts/cvap191.html <--cvap191.pdf
http://code.google.com/p/in-spirit/wiki/CannyEdgeDetector <--CannyEdgeDetector.as, canny.c
http://users.ecs.soton.ac.uk/msn/book/new_demo/nonmax/ <--nonmax.java
http://140.118.107.213/personal/master96/joseph/ <--Canny Edge Based Image Expansion.pdf, Canny edge.ppt
http://ssip2003.info.uvt.ro/lectures/chetverikov/edge_detection.pdf <--edge_detection.pdf
[OpenCV source]/modules/imgproc/src/canny.cpp <--canny.cpp

compare non-maximum suppression in canny.cpp, CannyEdgeDetector.java, nonmax.java, maxsupr.m, canny.cpp


2011年8月5日 星期五

Compositon and Aggregation in UML

http://en.wikipedia.org/wiki/Class_diagram

Stronger dependency
Composition > Aggregation > Association

Composition: owns a (Car owns an Engine)(UML symbol with solid diamond)
Aggregation: has a(Car Model has an Engine Model)(UML symbol with empty diamond)

UML symbols reference the wikipedia link above.

2011年8月4日 星期四

Design Patterns in Android

閱讀"高煥堂","Google Android 設計招式之美"的心得

此書不是直接給出最終Pattern的樣子,而是描述如何直覺的演變出最終型態(以Android Framework為例), 熟悉這個過程會比較能欣賞高竿的程式代碼, 自己設計系統時, 也能用進階的想法去處理, 擺脫土法煉鋼的寫法

若可以在做系統設計時,把這13個Pattern套進去, GoF的23個, 倒是以後再說, 能融會13招的武學, 雖不能稱霸武林, 但已經可以稱得上是俠客了吧, 絕對超越一般憑藉蠻力的莽夫

試著讓每個系統都能引用這13個Pattern, 畫出System Block Diagram with 13 Patterns

(我的理解, 以產品生產流程為例)(TBD: 以咖啡自動販賣機為例)

1. Template Method : 用繼承(Inheritance)方式, 依工廠產品的模板生產具差異化功能產品

2. Factory Method : 定義工廠生產表單(Factory Method), 業務(Client)依照產品需求填寫, 工廠依照表單廠內生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節

3. Observer : 用委託(Delegation)方式, 依工廠產品的模板委外生產, 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節

4. Abstract Factory : 業務(Client)依照產品需求下單給代工廠,代工廠(Abstract Factory)自己依照產品類別調整產線(+ Observer or Template Method), 業務(Client)取得產品,可直接執行差異化功能, 但不清楚此功能的實做細節(Service in  Android)

5. Adapter : 代工廠將工廠出產的產品或是組件, 配合客戶需要包裝新的ID, 但內容並沒有改變; 將角色之間的行為規範再抽出更好用的介面, 封包了複雜或不直覺的底層行為(repackage Binder.onTransact() in Android)

6. Composite: 產品的BOM (ListView in Android)

7. Strategy: 半成品組件, 可以簡化BOM, 如果是單純生產半成品的工廠, 就可套用生產產品相關的pattern. (BaseAdapter for ListView)

8. State: 產品所處狀態, 從接單,生產到出貨之間的過程和狀態

9. Proxy: 和Adapter一樣的用意, 但與其背後之代理對象有一樣的介面,可視為真正的分身(AIDL code gen in Android)

10. Bridge: 使用同一介面橋接各種技術(包括程式語言, OS Platform, media codec)

11. Iterator: use Cursor to manipulate Records(Cursor or Iterator in Android)

12. Mediator: 工廠裡的生產管制中心, 協調各單位, 統一溝通管道(可以利用Adapter重新包裝溝通介面)(The class that implement the Listener of View in Android)(Binder Driver in Android)

13. Facade: 最外圍的介面, 以網路磁碟(NAS)為例, 網路介面是最外圍的介面, 裡面可能是直接硬體儲存, 或是多了一層Adapter, 例如1394, USB, eSATA, Network...; 郵政信封的格式規範;

2011年8月2日 星期二

Java/Android's access modifier : protected

找了很多說明,還不如一句定義

http://en.wikibooks.org/wiki/Java_Programming/Keywords/protected


protected is a Java keyword.
This keyword is an access modifier, used before a method or other class member to signify that the method or variable can only be accessed by elements residing in its class, subclasses, or classes in the same package.