說到圖像處理軟件你會想到什麼?Photoshop?CorelDRAW?美圖秀秀?還是ACDSee的圖像編輯模塊?
說到實現數字圖像處理算法,你又會想到什麼?Matlab?OpenCV?
能不能自己動手用C++寫一個小型的圖像處理軟件,實現一些圖像處理算法,而不調用任何外部的包?這個可以有!
多年以前,甚至是主頁君還在讀書的時候,曾經嘗試在VC++ 6.0中編寫了最初版本的MagicHouse(一款小型的圖像處理軟件)。後來當我寫了我的第一本圖像處理算法書時,我用VC++ 2005更新了它。再後來很長一段時間了,它就一直被壓箱底了。我也開始轉戰Matlab了,畢竟懶惰是推動人類創新的兩大動力之一,誰讓Matlab那麼省時省力呢。但是我們又不得不承認:首先,Matlab相比於C++,在工業應用上其實非常有限。其次,它隱藏了太多的細節,你當然不必為內存管理而操心,也無需為圖像文件編解碼而犯愁,但一直用Matlab的總是有種“進口加組裝”的山寨感。能不能來個“完全自力更生”呢?利用這幾天閒暇時間,我在Visual Studio 2013中更新了我的MagicHouse軟件。(聽說Visual Studio 已經出了2015,Anyway 我想應該無傷大礙)。下面就簡單介紹下MagicHouse軟件所提供的基本功能。
先來看看GUI先——
純C++,沒有調用任何外部包,好處是一磚一瓦完全自我打造,壞處是我不能保證所有算法的效率都最優。目前該軟件仍然只支持BMP和JPG兩種格式(自己寫編碼函數的孩紙傷不起啊)。在浏覽模式中程序提供了包括十種圖片載入的方式:向下掃描、雙重掃描、右側飛入、雙側飛入、垂直百葉窗、水平百葉窗、垂直柵條、水平柵條、方格效果、落雨效果。下面是一些效果圖——
下面是軟件中實現了的部分圖像處理算法演示:
圖像的幾何變換之旋轉(雙線性差值算法)→
圖像的灰度變換之指數變換→
圖像濾鏡之馬賽克化→
圖像濾鏡之水霧效果(復合方向)→
圖像濾鏡之彩色鋼筆效果→
圖像分析之種子填充算法→
正交變換之快速傅立葉變換→
正交變換之圖像小波分解(二層)→
多區域輪廓跟蹤算法→
圖像分割之分水嶺算法→
高級圖像增強處理之保護紋理的降噪算法:基於PM方程的非線性擴散濾波→
高級圖像增強處理之保護紋理的降噪算法:基於全變分的TV降噪算法→
圖像加密算法之 基於Hilbert曲線的圖像置亂加密(中圖),以及基於Cat映射的圖像置亂加密(右圖)→
什麼都看不到,要的就是這種效果:)
基於混沌圖像融合的密圖隱藏算法→
下面的左圖是隱藏處理後的密圖(注意為了讓讀者看清楚裡面隱藏了一幅圖像,我特意調整參數讓它顯現出來,事實上是可以做到完全隱藏的,那樣圖像就會和原模板圖像看起來完全一致了)。右圖是解密後復原的圖像。
基於形態學方法的圖像處理之彩色圖像的膨脹→
以上列出的僅僅是軟件中提供的部分功能,限於篇幅,這裡就不逐一列出了,日後有時間我也會繼續完善軟件、實現更多有趣的算法。