http://java-source.net/open-source/issue-trackers
http://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems
http://www.thegeekstuff.com/2010/08/bug-tracking-system/
2013年3月27日 星期三
2013年3月12日 星期二
2013年3月11日 星期一
Tomcat7 & JConsole & JMX
不知道是不是因為Timcat7的關係, 網路上找到的設定都沒辦法成功
最後總結成功的設定(基本上參考http://www.haogongju.net/art/1762695)
1. download catalina-jmx-remote.jar from http://tomcat.apache.org/download-70.cgi(address may change)
and save to $CATALINA_HOME/lib
2. Add Listener to server.xml, in my case
3. set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[Host IP]
3.1 If use CATALINA_OPTS will cause Exception (java.io.FileNotFoundException: jmxremote.access) in my case.
3.2 -Djava.rmi.server.hostname=[Host IP] is essential if want to connect remotely.
4. Start Tomcat
5. Run jconsole Remote Process with:9081
It works!!
最後總結成功的設定(基本上參考http://www.haogongju.net/art/1762695)
1. download catalina-jmx-remote.jar from http://tomcat.apache.org/download-70.cgi(address may change)
and save to $CATALINA_HOME/lib
2. Add Listener to server.xml, in my case
3. set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[Host IP]
3.1 If use CATALINA_OPTS will cause Exception (java.io.FileNotFoundException: jmxremote.access) in my case.
3.2 -Djava.rmi.server.hostname=[Host IP] is essential if want to connect remotely.
4. Start Tomcat
5. Run jconsole Remote Process with
It works!!
Windows & Telnet?
其實我的問題是發生在Windows7
官方的解答
http://support.microsoft.com/kb/982538/zh-tw
當我嘗試在 Windows 7 中使用 telnet 功能時,卻出現了錯誤訊息【’telnet’ 不是內部或外部命令、可執行的程式或批次檔】,爲什麽會發生這樣的問題呢?
官方的解答
http://support.microsoft.com/kb/982538/zh-tw
...
當我嘗試在 Windows 7 中使用 telnet 功能時,卻出現了錯誤訊息【’telnet’ 不是內部或外部命令、可執行的程式或批次檔】,爲什麽會發生這樣的問題呢?
其實 Window 7 作業系統預設並沒有安裝 Telnet 用戶端程式,所以只有手動新增安裝,就可以解決這個問題了。
...
控制台 > 程式集 > 開啟或關閉Windows功能 > 勾選"Telnet用戶端"
2013年2月23日 星期六
動態網頁開發(ZK+Spring+Hibernate+Scheduler+Flot)
因緣際會, 9年沒碰過網頁, 半年前又開始這方面的應用,有不少的心得, 技術的進展真的非常大, 不像寫系統韌體, 數年如一日, 只要有多工概念,會C和基本IO, 就可以上場了.
但在近十年,網頁的呈現以及開發的便利性和Desktop Application已經非常類似, 對應的技術更是五花八門, 需要挑選以及整合出自己要的應用框架
目前我選用的架構是用ZK+Spring+Hibernate+Scheduler+Flot, 目前看來應該沒什麼問題
Flot是用在Chart上面, 要多花一點功夫去整合零散的資源, 其它都算是Java標準的整合方式
若需要連網路芳鄰 or SMB, JCIFS是不錯的選擇, 可惜和Apache VFS整合只有檔案,不支援目錄, 不然我傾向用VFS, 這樣連FTP, WebDav都可以用同一介面, 建議可以參與VFS修改或是從VFS, JCIFS之上自己再包一層, 我傾向後者
整合Excel file當然是用Apache POI
但在近十年,網頁的呈現以及開發的便利性和Desktop Application已經非常類似, 對應的技術更是五花八門, 需要挑選以及整合出自己要的應用框架
目前我選用的架構是用ZK+Spring+Hibernate+Scheduler+Flot, 目前看來應該沒什麼問題
Flot是用在Chart上面, 要多花一點功夫去整合零散的資源, 其它都算是Java標準的整合方式
若需要連網路芳鄰 or SMB, JCIFS是不錯的選擇, 可惜和Apache VFS整合只有檔案,不支援目錄, 不然我傾向用VFS, 這樣連FTP, WebDav都可以用同一介面, 建議可以參與VFS修改或是從VFS, JCIFS之上自己再包一層, 我傾向後者
整合Excel file當然是用Apache POI
2012年3月11日 星期日
Preview Office Document in PDF(with Security) or JPEG
1. Use OpenOffice(portable version) to export PDF with security
2. Use ImageMagick to convert PDF to JPEG
2012年2月8日 星期三
Computer Programming Bugs
承認自己孤陋寡聞, 但知道了就要學起來, 原來Bug是有學理上的分類的, Heisenbug和Bohrbug是最常遇到的, 定義請參照Wiki或去問Google, 還有其他的bug類型, 但我覺得廣義去分類, 應該這兩種就夠了, 甚至也不用什麼分類, 有Bug是必然的, 弄清楚系統和平台運作原理, 熟悉各種Debug技巧, 什麼類型的Bug都無所謂, 適時適地擬定對策去解決問題比較重要, 老是執著在分析問題, 卻提不出解決辦法也沒用, 能完整詳細的分析問題當然很好, 但不要忘了, 解決問題才是最終的目的, 在分析問題時, 要同時把對策一併設想, 這樣才會有效率
http://en.wikipedia.org/wiki/Heisenbug
http://en.wikipedia.org/wiki/Heisenbug
2012年1月18日 星期三
2012年1月6日 星期五
Feature Detect in OpenCV
OpenCV v2.3 documentation
http://opencv.itseez.com/index.html
OpenCV Tutorials in OpenCV v2.3 documentation
http://opencv.itseez.com/doc/tutorials/tutorials.html
feature2d module. 2D Features framework
http://opencv.itseez.com/doc/tutorials/features2d/table_of_content_features2d/table_of_content_features2d.html
1. Harris corner detector
http://opencv.itseez.com/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html
2. Shi-Tomasi corner detector
http://opencv.itseez.com/doc/tutorials/features2d/trackingmotion/good_features_to_track/good_features_to_track.html
3. Creating yor own corner detector
http://opencv.itseez.com/doc/tutorials/features2d/trackingmotion/generic_corner_detector/generic_corner_detector.html
4. Detecting corners location in subpixeles
http://opencv.itseez.com/doc/tutorials/features2d/trackingmotion/corner_subpixeles/corner_subpixeles.html
5. Feature Detection
http://opencv.itseez.com/doc/tutorials/features2d/feature_detection/feature_detection.html
1). Use the FeatureDetector interface in order to find interest points. Specifically:
a) Use the SurfFeatureDetector and its function detect to perform the detection process
b) Use the function drawKeypoints to draw the detected keypoints
6. Feature Description
http://opencv.itseez.com/doc/tutorials/features2d/feature_description/feature_description.html
1). Use the DescriptorExtractor interface in order to find the feature vector correspondent to the keypoints. Specifically:
a) Use SurfDescriptorExtractor and its function compute to perform the required calculations.
b) Use a BruteForceMatcher to match the features vector
c) Use the function drawMatches to draw the detected matches.
7. Feature Matching with FLANN
http://opencv.itseez.com/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html
8. Features2D + Homography to find a known object
http://opencv.itseez.com/doc/tutorials/features2d/feature_homography/feature_homography.html
1). Use the function findHomography to find the transform between matched keypoints.
2). Use the function perspectiveTransform to map the points.
9. Detection of planar objects
http://opencv.itseez.com/doc/tutorials/features2d/detection_of_planar_objects/detection_of_planar_objects.html
1). Create a new console project. Read two input images.
2). Detect keypoints in both images.
3). Compute descriptors for each of the keypoints.
4). Now, find the closest matches between descriptors from the first image to the second:
5). Visualize the results:
6). Find the homography transformation between two sets of points:
7). Create a set of inlier matches and draw them. Use perspectiveTransform function to map points with homography:
8). Use drawMatches for drawing inliers.
2012年1月5日 星期四
2012年1月4日 星期三
產品研發前期評估 or Self Test
一般Project初期,為了方便軟體同步開發,或是demo, 是會做模擬器.
可能是純軟體的, 也可能是拿類似機種改的, 也可能拿實驗平台組出來的,例如Labview.
都沒有的,基本上除非很有把握,不然後面都會很辛苦.
或許也不叫模擬器, 其實在Test-Oriented programming來說, 就是測試程式, 只是不一定以軟體存在,只要能方便做function test, 什麼形式都可以, 這和機構,電子, 軟韌體領域無關, 只是在軟體界, 以及測試量測領域, 很習慣這樣去兜出要的系統, 但以我寫System FW or DSP FW的經驗, 是一樣可行的, 而且除了可以做self-test, 要釐清整合的問題也很方便.
2011年12月30日 星期五
再看Design Pattern
最近有機會重新思考軟體建構的深度, 最終目標當然是能把Design Pattern化為己用, 而不是只能看懂別人的用法.
基本上, 個人認為, 雖然四人幫的著作是Design Pattern的鼻祖, 但真正發揚光大感覺是Java出現以後, 繼之前高先生的Android Design Pattern之後, 說真的, 要驗證是不是真的融入自己的招式,就看自己的思路就可以知道, 幾乎不太想得出當初理解的感覺, 不是書上寫得太牽強, 就是我還沒辦法融會.
看到書架上還有一本2002年出版的,"Design Patterns於Java語言上的實習應用", 是日本人寫的, 大略看了一下, 應該會有更好的感覺才是, 光K武功祕笈始終不夠, 一定要能融會到自己的系統邏輯, 才能衍伸出自己的一套用法.
寫程式的年資和寫程式的能力是沒有關係的, 真正要晉升到另一個層次, 還是要靠高段的思考邏輯以及融會前人累積的解題模型, 針對系統所處的情境最適當的設計.
基本上, 個人認為, 雖然四人幫的著作是Design Pattern的鼻祖, 但真正發揚光大感覺是Java出現以後, 繼之前高先生的Android Design Pattern之後, 說真的, 要驗證是不是真的融入自己的招式,就看自己的思路就可以知道, 幾乎不太想得出當初理解的感覺, 不是書上寫得太牽強, 就是我還沒辦法融會.
看到書架上還有一本2002年出版的,"Design Patterns於Java語言上的實習應用", 是日本人寫的, 大略看了一下, 應該會有更好的感覺才是, 光K武功祕笈始終不夠, 一定要能融會到自己的系統邏輯, 才能衍伸出自己的一套用法.
寫程式的年資和寫程式的能力是沒有關係的, 真正要晉升到另一個層次, 還是要靠高段的思考邏輯以及融會前人累積的解題模型, 針對系統所處的情境最適當的設計.
2011年11月9日 星期三
VS2008 Build Event使用命令列,需要系統管理權限(非執行期UAC問題)
狀況描述:
我的狀況有別於大部分開發者要的是編譯完的執行程式能主動詢問使用者UAC的設定, 我的問題是project在建置事件的命令列用到fsutil, 編譯時出現了以下訊息
"FSUTIL 公用程式要求您必須具有系統管理權限。"
開發環境:
OS: Windows7 64bit, IDE: VS2008
解法:
先以系統管理員身分啟動VS2008 IDE, 再Load .sln, 這樣就可以了
以下所述都是為了解執行期的UAC設定, 雖然不合我用, 還是列出來
http://msdn.microsoft.com/en-us/library/bb756929.aspx
(原始設定)
專案->屬性->連結器->資訊清單檔
UAC執行層級= asInvoker
我的狀況有別於大部分開發者要的是編譯完的執行程式能主動詢問使用者UAC的設定, 我的問題是project在建置事件的命令列用到fsutil, 編譯時出現了以下訊息
"FSUTIL 公用程式要求您必須具有系統管理權限。"
開發環境:
OS: Windows7 64bit, IDE: VS2008
解法:
先以系統管理員身分啟動VS2008 IDE, 再Load .sln, 這樣就可以了
以下所述都是為了解執行期的UAC設定, 雖然不合我用, 還是列出來
http://msdn.microsoft.com/en-us/library/bb756929.aspx
(原始設定)
專案->屬性->連結器->資訊清單檔
UAC執行層級= asInvoker
2011年10月31日 星期一
如何處理 winmail.dat
好久沒看到這個outlook寄出來的格式, 記得之前是用有時效性的command line tool去解, 但是太久沒用了, 於是再去問問Google大哥, 是有看到其他的免費軟體, 但是要安裝, 想想實在不常用, 何必裝個軟體把環境弄亂, 最後選擇線上解開的方法
http://www.winmaildat.com/
當然唯一的缺點就是會怕檔案流出去, 這個可要考慮清楚喔
如果不介意要安裝的
http://www.kopf.com.br/winmail/
這是for Windows, 可是我沒有試過喔!!(Linux, Mac網頁上也有連結, 要研究Source Code的可以看Linux的, http://sourceforge.net/projects/tnef/)
---------------------------------------------------------------------------------------
2013/7/23 Update
若要從源頭去解, 就是避免寄出附件變成 winmail.dat (TNEF 格式)
基本上, 改郵件格式設定或是改註冊檔
可以參考
微軟官方改註冊檔
http://support.microsoft.com/kb/958012/zh-tw
微軟官方改Outlook設定
http://support.microsoft.com/kb/278061/zh-tw
您會收到電子郵件訊息,其中包含 「 winmail.dat 的附件。如果下列條件全部成立,可能會發生這個問題:
這個問題是通常可以透過網際網路電子郵件訊息傳送給您時。
------------------------------------------
Winmail.dat 檔案中的資料便無法使用。若要解決這個問題,請要求寄件者重送訊息,以純文字格式。下列方法可依寄件者若要避免傳送純文字訊息封裝中傳輸中立封裝格式 (TNEF)。
2013/7/24 Update
如果是Office 2003, 有可能是多語系支援的問題
http://support.microsoft.com/kb/905645/zh-tw
http://www.winmaildat.com/
當然唯一的缺點就是會怕檔案流出去, 這個可要考慮清楚喔
如果不介意要安裝的
http://www.kopf.com.br/winmail/
這是for Windows, 可是我沒有試過喔!!(Linux, Mac網頁上也有連結, 要研究Source Code的可以看Linux的, http://sourceforge.net/projects/tnef/)
---------------------------------------------------------------------------------------
2013/7/23 Update
若要從源頭去解, 就是避免寄出附件變成 winmail.dat (TNEF 格式)
基本上, 改郵件格式設定或是改註冊檔
可以參考
微軟官方改註冊檔
http://support.microsoft.com/kb/958012/zh-tw
微軟官方改Outlook設定
http://support.microsoft.com/kb/278061/zh-tw
您會收到電子郵件訊息,其中包含 「 winmail.dat 的附件。如果下列條件全部成立,可能會發生這個問題:
- 被人使用 Microsoft Outlook 電子郵件訊息傳送給您。
- 訊息的格式是 Rich Text 格式 (RTF)。
這個問題是通常可以透過網際網路電子郵件訊息傳送給您時。
------------------------------------------
Winmail.dat 檔案中的資料便無法使用。若要解決這個問題,請要求寄件者重送訊息,以純文字格式。下列方法可依寄件者若要避免傳送純文字訊息封裝中傳輸中立封裝格式 (TNEF)。
方法 1: 變更預設的訊息格式
寄件者可以變更它們使用下列步驟來傳送電子郵件訊息的格式:- 在 [工具] 功能表上按一下 [選項],然後再按一下 [郵件格式
- 在 這個郵件格式撰寫按一下若要選取純文字,然後按一下[確定]。
方法 1: 變更預設的訊息格式
若要從收件者的屬性在 [個人通訊錄中移除 rt f 格式,寄件者可以使用下列步驟:- 在 [工具] 功能表上按一下 [電子郵件通訊錄]。
- 在[名稱來源] 中,按一下 [個人通訊錄。
- 選取您想要設定為純文字收件者然後按一下 [檔案] 功能表上的 [屬性。
- 在 [ SMTP 一般] 索引標籤中,按一下以清除 我要傳送到此收件者Microsoft Exchange rtf 格式 核取方塊,然後再按[確定]。
方法 3: 變更特定連絡人格式
寄件者可以使用下列步驟來設定 [純文字在收件者連絡人記錄中:- 在 [連絡人] 資料夾中開啟該收件人的記錄。
- 按兩下 [收件者的電子郵件地址]。
- 在 [電子郵件內容] 對話方塊中,按一下 只用純文字傳送 在 [網際網路格式。
方法 4: 將 Outlook Rtf 文字格式的網際網路電子郵件設定
- 在 Outlook 2003 與 Outlook 2007 中,按一下選項在上工具 功能表。
- 按一下 郵件格式 索引標籤。
- 按一下 網際網路格式.
- 在下Outlook 純文字選項按一下任一個 將轉換成 HTML 格式 -或者- 將轉換為純文字格式.
2013/7/24 Update
如果是Office 2003, 有可能是多語系支援的問題
http://support.microsoft.com/kb/905645/zh-tw
在 Microsoft Office 2003 多語系使用者介面套件所修正問題
2011年10月12日 星期三
Open Source License
五種開源授權規範的比較 (BSD, Apache, GPL, LGPL, MIT)
運用自由軟體元件於政府補助計畫的後續商用建議
我的理解是這樣
1. 所有授權都要附上授權協議文件檔
2. GPL最嚴苛, 只要有用到這種授權的source or binary, 自己開發的相關程式碼, 不管是修改Open Source, 或是引用Open Source, 都要公開
3. LGPL是可以將OpenSource當library用, 自己寫的code只是引用Open Source library, 就不需要公開, 可以只release binary, 相對的, 引用的 Open Source不能修改, 這也是新版Qt授權的最大改變, 當然若是改到Source code, 還是要公開修改的code
4. BSD, Apache, MIT都是任你改, 只要附上授權協議以及原作的版權聲明, 然後保險一點在程式碼註解加上修改者和修改日期(binary viewer還是看得到的), 可以不用公開修改過的code, 自己引用Open Source的code也可以不用公開
實際狀況, 最好還是經過公司的法務部背書
2011年10月3日 星期一
影像色彩處理核心開發
個人見解, 可以分為三個方向,可以以此分工,但要各司其職, 各盡其效, 才能得到好的成果
1. 演算法
2. 參數
3. 平台實做
這三類其實互有關聯, 不可偏廢, 不然也要有熟悉這三者介面以及流程的整合角色, 否則很難達到實際需求, 至於其內涵, 從名詞及實務上應該很容易理解, 只是資源以及個人的風格會影響實際的產出, 需要個別去檢討, 也沒什麼洽不恰當的問題, 而是在於主導者的心態, 以及時程和品質的考量, 反而我覺得開發流程的走法, 反而是影響成敗很大的因素
從實際需求去設計系統, 本是天經地義, 對需求有確實的了解, 負責的分工角色才能朝向相同的目的地前進, 沿途披荊斬棘, 不必為了創新而創新, 而是依照所處時空背景, 選擇最省時有效的方法
這個過程比較特別的是, 最好遵循軟體工程多重循環的做法, 不管是系統, 核心或是模組, 不要只有一次的產出就是最終成品, 最主要原因就是, 這是人為的設計, 每個人對需求規格的理解都有先天認知的差異, 即使再怎麼溝通或是明文定義, 仍然會存在未知的誤解或岐見, 透過多重循環的產出整合, 可以針對介面的部分做實務上的測試檢討, 而屬於自己單獨運算的部分, 不管是捏造或是真實邏輯, 只要能先滿足介面整合即可, 後續再自己抓空檔補足, 這樣做主要是為了藉由實際的整合動作, 來驗證當初談好的介面是否有缺陷或漏洞, 這種瑕疵如果在後期才發現, 最嚴重將導致原先設計要完全捨棄重建
1. 演算法
2. 參數
3. 平台實做
這三類其實互有關聯, 不可偏廢, 不然也要有熟悉這三者介面以及流程的整合角色, 否則很難達到實際需求, 至於其內涵, 從名詞及實務上應該很容易理解, 只是資源以及個人的風格會影響實際的產出, 需要個別去檢討, 也沒什麼洽不恰當的問題, 而是在於主導者的心態, 以及時程和品質的考量, 反而我覺得開發流程的走法, 反而是影響成敗很大的因素
從實際需求去設計系統, 本是天經地義, 對需求有確實的了解, 負責的分工角色才能朝向相同的目的地前進, 沿途披荊斬棘, 不必為了創新而創新, 而是依照所處時空背景, 選擇最省時有效的方法
這個過程比較特別的是, 最好遵循軟體工程多重循環的做法, 不管是系統, 核心或是模組, 不要只有一次的產出就是最終成品, 最主要原因就是, 這是人為的設計, 每個人對需求規格的理解都有先天認知的差異, 即使再怎麼溝通或是明文定義, 仍然會存在未知的誤解或岐見, 透過多重循環的產出整合, 可以針對介面的部分做實務上的測試檢討, 而屬於自己單獨運算的部分, 不管是捏造或是真實邏輯, 只要能先滿足介面整合即可, 後續再自己抓空檔補足, 這樣做主要是為了藉由實際的整合動作, 來驗證當初談好的介面是否有缺陷或漏洞, 這種瑕疵如果在後期才發現, 最嚴重將導致原先設計要完全捨棄重建
2011年9月27日 星期二
Otsu Thresholding
沒有比這更清楚的了
http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html
當然Wiki也要查一下
http://en.wikipedia.org/wiki/Otsu's_method
Gray轉Binary還有其他方法(details please check OCRopus)
http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html
當然Wiki也要查一下
http://en.wikipedia.org/wiki/Otsu's_method
Gray轉Binary還有其他方法(details please check OCRopus)
transforms grayscale (and sometimes color) images into binary images.
- BinarizeByOtsu
- BinarizeByRange
- BinarizeBySauvola
2011年9月18日 星期日
定義 新產品/技術的研發
開發原生技術(私有技術)
使用成熟技術開發新產品(use Open Source as kernel)
使用成熟技術重新設計既有產品(change OS or framework)
將既有產品或技術應用到新市場(烙鐵海綿用到臉部清潔)
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:
To equalize the histogram of the output image, we let
be a constant.
Intuitively, histogram equalization is realized by the following:
公式證明找得到,但希望可以用理解的方式來看這個結果
基本上推導出的結論就是將原影像的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:
To equalize the histogram of the output image, we let
Intuitively, histogram equalization is realized by the following:
- If
is high,
has a steep slope,
will be wide, causing
to be low to keep
;
- If
is low,
has a shallow slope,
will be narrow, causing
to be high.
2011年9月2日 星期五
訂閱:
文章 (Atom)