摘要:該數字圖像處理界面是基于Microsoft Visual c++ 6.0 MFC多文檔編程的圖像處理界面,實現.bmp格式圖像的瀏覽與編輯,導入和導出,圖像特效顯示,邊緣檢測,旋轉和翻轉圖片,圖片增強優化,以及打印輸出圖片。是一款功能較簡潔的數字圖像管理界面,實現.bmp格式圖像的操作。該界面包含兩部分:啟動界面和主界面。BMP文件是Windows操作系統所推薦和支持的圖像文件格式,是一種將內存或顯示器的圖像數據不經過壓縮而直接按位存盤的文件格式,一般來說BMP文件分成4個部分:位圖頭文件,位圖信息頭,顏色表,位圖數據。同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設備無關的BMP文件,通用性很強,windows支持一些重要的DIB訪問函數,但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB文圖處理所需要的基本成員變量和成員函數,進而以該類為基類派生其他類,實現程序的維護和移植,從而利用面向對象的方式實現圖像的可視化編程。
關鍵詞:BMP文件:圖像處理;DIB位圖:界面
1、引言
數字圖像處理(Digital Image Prooessing)又稱為計算機圖像處理,它是指將圖像信號轉換成數字信號并利用計算機對其進行處理的過程。數字圖像處理最早出現于20世紀50年代,當時的電子計算機已經發展到一定水平,人們開始利用計算機來處理圖形和圖像信息。隨著計算機的發展,數字圖像處理技術也不斷的進步,實現了對圖像圖像增強、復原、編碼、壓縮等,在空間和軍事高科技中扮演越來越重要的角色。
數字圖像處理的研究內容包括圖像的數字化、圖像增強、圖像恢復、圖像編碼和壓縮、圖像分割、圖像分析等。數字圖像處理技術處理精度比較高,而且還可以通過改進處理軟件來優化處理效果。因此,開發一個好的圖像處理軟件至關重要。
目前國內外有很多關于圖像處理和遙感圖像處理的通用軟件,但是由于各個軟件的應用目的和側重點不同,這些軟件在實際運用的時候都會產生這樣或那樣的問題。比如有些軟件的界面不夠友好,交互性差,用戶無法調整算法參數;不具備可擴展性,軟件一旦完成,不容易修改或添加新內容等。而且圖像處理的算法是千變萬化的,它的發展也是日新月異的,而圖像處理系統軟件的開發是相對滯后的。因此有些軟件的內容不全或陳舊,沒有涉及圖像處理領域較新的成果。所以,在實際的研究和學習中,常常需要開發自己的圖像處理軟件,來方便某一領域的研究和學習。
本課題主要實現圖像的一些簡單特效顯示,圖像的旋轉和鏡像、圖像的增強處理,圖像灰度變換,圖像邊緣檢測等。
2、本數字圖像處理界面處理內容介紹
2.1 啟動界面
為了追求該圖像處理的界面的美觀性,在設計主界面前,先設計一個歡迎界面,在運行主界面程序前,先顯示歡迎圖片。
2.2 主界面
該數字圖像處理界面是基于VC++6.0MFC多文檔編程的界面程序,實現數字圖像的簡單查看與編輯操作。主界面主要內容有:
圖像文件瀏覽:實現對.bmp格式圖像文件的瀏覽。
圖像特效顯示:主要有自上而下掃描顯示,從左至右的滑動顯示和漸進顯示。
視圖3c檔的設置:實現了執行操作后新舊圖像在不同視圖中顯示設置。
圖像的灰度變換:包括圖像的二值化,彩色圖像轉換灰度圖像,灰度圖像轉換8位圖像。
圖像的鏡像與旋轉變換:包括水平鏡像,垂直鏡像,順時針旋轉90度,逆時針旋轉90度,圖像旋轉180度。
圖像的增強處理:主要是圖像銳化處理。
圖像的邊緣檢測和形態學處理:包括羅伯茨算子邊緣檢測,圖像輪廓提取。
3、需求流程分析
通過對系統的需求分析,系統的基本功能已經確定。整個系統各個模塊,如圖3.1所示:
4、系統詳細設計
4.1 基類的設計
BMP文件是Windows操作系統所推薦和支持的圖像文件格式,是一種將內存或顯示器的圖像數據不經過壓縮而直接按位存盤的文件格式,同時BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設備無關的BMP文件,通用性很強。Windows支持一些重要的DIB訪問函數,但都沒有封裝到MFC中,這里我們封裝了一個DIB類,其包含DIB位圖處理所需要的基本成員變量和成員函數,進而以該類為基類派生其他類,實現程序的維護和移植。在這里我們命名這個基類為ImgCenterDib,各種算法的實現都是以ImgCenterDib類為基類派生出來。同時將各個模塊函數封裝起來成為一個類,這些類都以ImgCenterDib類共有繼承,在主程序中調用,減少代碼的重復性,提高利用率。派生關系如圖4.1:
4.2 函數的功能
4.2.1 tretchDIBits:
該函數將DIB中矩形區域內像素使用的顏色數據拷貝到指定的目標矩形中。如果目標矩形比源矩形大小要大,那么函數對顏色數據的行和列進行拉伸,以與目標矩形匹配。如果目標矩形大小要比源矩形小,那么該函數通過使用指定的光柵操作對行列進行壓縮。
4.2.2:int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,intnSrcWidth,int nSrcHeight,CONST VOID*lpBits,CONSTBITMAPINFO*lpBitsInfo,UINT iUsage,DWORD dwRop);
hdc:指向目標設備環境的句柄。
XDest:指定目標矩形左上角位置的X軸坐標,按邏輯單位來表示坐標。
YDeSt:指定目標矩形左上角的Y軸坐標,按邏輯單位表示坐標。
nDestWidth,指定目標矩形的寬度。
nDestHeight:指定目標矩形的高度。
XSrc:指定DIB中源矩形(左上角)的X軸坐標,坐標以像素點表示。
YSrc:指定DIB中源矩形(左上角)的Y軸坐標,坐標以像素點表示。
nSrcWidth:按像素點指定DIB中源矩形的寬度。
nSrcHeight:按像素點指定DIB中源矩形的高度。
IpBits:指向DIB位的指針,這些位的值按字節類型數組存儲。
lpBitslnfo:指向BITMAPINFO結構的指針,該結構包含有關DIB方面的信息。
iUsage:表示是否提供了BITMAPINFO結構中的成員bmiColors,如果提供了,那么該bmiColors是否包含了明確的RGB值或索引。參數iUsage必須取下列值,這些值的含義如下:
DIB_PAL_COLOR:表示該數組包含對源設備環境的邏輯調色板進行索引的16位索引值。
DIB_RGB_COLORS,表示該顏色表包含原義的KGB值。
dwRop:指定源像素點、副示設備環境的當前刷子和目標像素點是如何組合形成新的圖像。
如果NsrcWidth和NdestWidth符號不同,那么函數將沿著X軸創建位圖鏡像。如果NsrcHeight和NdestHeight符號不同,那么函數將沿著Y軸創建位圖鏡像。
4.3 模塊設計
具體的模塊設計如下:
4.3.1 歡迎界面
將歡迎圖像作為對話框,在運行主界面程序前,先顯示該對話框。
4.3.2 主界面設計
(1)文件操作模塊。文件操作模塊是整個系統中最基本的組成成允該模塊主要實現圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關閉操作,打印操作。
功能截圖如下
(2)特效顯示模塊。漸進顯示:先將畫刷設計成白色,然后將已經顯示出來的原圖象重新設置成白色,達到刷新屏幕的效果。每隔3秒,調用一次StretchDIBits,來達到漸進顯示效果;
滑動顯示:每隔3秒,調用一次StretchDIBits,將圖片一點點向左顯示,改變第3和7參數,并慢慢增加4和8的參數,使顯示的矩陣的寬度變大,達到滑動的效果;
掃描顯示:其原理和滑動顯示相同,只是改變的參數改變。
(3)圖像灰度變換模塊。1)二值化:圖像的二值化,就是將圖像上的像素點的灰度值設置為O或255,也就是將整個圖像呈現出明顯的只有黑和白的視覺效果。2)彩色變灰色格式:當RGB中3種顏色的含量相等時即為灰色。因此只要將RGN3色設置成一樣就可以了。3)灰度變彩色格式:只要把3基色的含量變的不一樣即可。
(4)圖像鏡像與旋轉模塊。圖像鏡像與旋轉模塊實現了圖像的鏡像變換和圖像旋轉顯示,包括水平鏡像,垂直鏡像,順時針旋轉90度,逆時針旋轉90度,圖像旋轉180度。
(5)圖像增強處理模塊。圖像增強處理模塊主要實現了圖像銳化效果,是模糊的圖像變得更加清晰,顏色變得鮮明突出,更適合人眼觀察和識別。
(6)圖像邊緣檢測模塊。1)羅伯茨算子邊緣檢測。2)圖像輪廓提取:該功能只能處理二值化后的圖,找到一個黑點后掃描周圍的8個點是否全為黑色,如果是則將該點致白色。