版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗報告第二次程序設計實踐:DIB圖像處理姓名:學院:信息與通信工程學院學號:班級:11111一、課題概述1. 課題目標和主要內容A. 打開BMP文件,并顯示到屏幕上,BMP圖像支持1、4、8、24bit非壓縮圖像。B. 對BMP文件進行處理,如變?yōu)榛叶葓D像、二值化、平滑、連通域分析等操作,包括:a) 將原始圖像轉換為8bit灰度圖像,并在界面中顯示。b) 將8bit灰度圖像轉換為8bit二值圖像(圖像中只有黑、白兩種顏色),并在界面中顯示。c) 對二值圖像進行平滑、連通域分析等操作,并在界面中顯示。C. 能將界面中的圖像保存到新的BMP文件中。D. 所有處理效果可以在界面中實時展示。E. 本
2、設計中除了顯示圖像、窗口設計功能采用Windows API來實現外,對BMP文件的其他操作全部單獨設計相應的類完成。好處是即使不在Windows環(huán)境下,該類依然可以處理BMP文件。2. 開發(fā)平臺和環(huán)境:Win32應用程序,用Microsoft Visual Studio 2013開發(fā)環(huán)境。3. 系統(tǒng)的主要功能:A. 文件操作:a) 打開新BMP文件b) 保存當前BMP文件c) 退出B. 導航視窗:a) 圖像速覽b) 顏色通道c) 框圖切換C. 圖像處理:a) 轉8bit灰度圖b) 4鄰域平滑c) 8鄰域平滑d) 二值化圖像e) 黑色-4鄰域連通域分析D. HSL色彩空間處理:a) 建立HSL空
3、間b) 修改色相、飽和度、亮度。c) 撤除HSL空間4. 主要編程點:A. Win32程序消息循環(huán)處理;B. 位圖的識別、判斷;C. 位圖數據的改寫、輸出;D. DIB與DDB的轉換,內存DC的使用;E. 小型內存管理分配;F. 視窗切換、屏幕輸出與刷新;G. 數據結構:順序表、鏈表;H. 讀取、保存DIB二進制流;I. 色相、飽和度、亮度調整;J. 直方圖的掃描和輸出。二、系統(tǒng)總體框架1. 工程環(huán)境:a) 操作系統(tǒng):Windows 10b) 開發(fā)環(huán)境:Visual Studio 2013 Ultimatec) 項目類型:Win32程序2. 主要程序流程3. 數據與操作:總的來說,用戶操作、圖
4、像數據結構、圖像操作對象是相互獨立、開放的三大模塊。菜單用于輸入輸出原始數據流,或是操縱圖像處理;數據結構方便統(tǒng)一管理所有DIB單元結構體間的關系鏈,可以直接存取這些單元數據;操作類對象首先要Link一個結構體以初始化常用數據,方便隨后處理。4. 數據結構、功能擴展:在滿足原有圖像處理的基礎上增加新功能a) 數據擴展:在基礎結構中存放一個萬能指針void*,要增加新的屬性時,只需要在源文件中添加新的結構體,在主要函數中完成新結構體的創(chuàng)建和賦值,再令基礎結構體中的擴展指針ext指向新結構體,就完成了屬性添加,并且無需大幅度更動基礎結構體內容,便完成了數據擴展。b) 函數功能擴展:在滿足 “里氏代
5、換”原則基礎上,即基類出現的地方以子類替代仍然保證程序正常運作,通過原始基類繼承出新的派生類,保留原始接口同時增加新的接口,實現功能擴展。三、系統(tǒng)詳細設計1. 圖像處理DIBProcess模塊:A. 圖像數據結構體BMFHB. 圖像數據結構體BMIHC. 圖像數據結構體RGBQUADD. 圖像數據結構體DIBUnitE. 矩陣模板類Matrix F. 圖像處理基類DIBProcG. 圖像處理派生擴展類DIBProcEx2. 內存DC模塊MemoryDC3. 小型內存池管理類MemoryPoolA. 頁結點結構體 B. 塊結點結構體C. 檢驗節(jié)點結構體D. 內存管理類E. 應用示意圖4. 主函數
6、模塊(主要是功能相關性模塊)A. 主要頭文件 B. 主要全局量C. 主要功能性函數聲明D. 菜單功能設計a) 文件 b) 導航 c) 操作 d) HSL空間操作 四、關鍵算法分析1. 算法1:int IsBmp(const DIBUnit&);A. 算法功能:根據讀取的文件流二進制數據判斷是否為能處理的位圖。B. 基本思想:根據BMP文件頭的定義和特征信息判斷位圖是否正確C. 算法邏輯:(這里判斷5個關鍵點)a) BMFH結構的bfType應恒為定值0x4D42;b) BMIH結構的biSize應等于sizeof(BMIH),即程序只處理INFO信息頭。c) BMIH結構的biComp
7、ression應為0,表示未壓縮,程序不處理壓縮圖。d) BMFH結構的bfSize屬性和bfOffBits屬性的值應該和BMIH結構的biHeight值和biWidth值有等式關系,即:bfSize bfOffBits = biHeight * cxBytes;其中cxBytes為圖的字節(jié)寬度。2. 算法2:void operator>>(const DIBUnit&);A. 算法功能:讀取一個DIB單元結構并解析獲得相關數據B. 基本思想:解析DIB結構中的BMFH,BMIH信息。數據運算完成后保存 在類的私有成員里。C. 算法邏輯:a) 獲取圖像實際字節(jié)寬。根據BMP
8、文件定義,每個掃描行的字節(jié)數必須為4的倍數,因此根據BMIH結構的biBitCount顏色位深屬性和biWidth像素寬屬性,即不足1字節(jié)的按1字節(jié)計(例如單色圖和4bit圖),總的字節(jié)數保證能被4整除。用switch語句判斷有:b) 獲取像素數組的字節(jié)大小srcSize,有幾種方法:i. srcSize = bmfh.bfSize - bmfh.bfOffBits; /即總大小減偏移量ii. srcSize = bmih.biHeight * cxBytes; /即高度 乘以 實際寬度iii. 教訓!最好不要根據bmih.biImageSize屬性直接得到圖的總大小,許多24位圖的biIma
9、geSize屬性值為0。3. 算法3:void ToGray_8bit(BMIH *pDstInfo, BYTE *pDstBits);A. 算法功能:將圖片轉換為8bit灰度圖B. 算法思想:首先判斷圖的位深,如果是單色圖和4bit圖,則先轉換為8bit圖(轉換前后圖片內容不應發(fā)生改變,編程運行時檢查這一點以確保轉換是否正確),然后再對每個像素(1個字節(jié))對應調色板的RGB分量進行灰度計算,所得值替代像素值(不是替代調色板值);如果是24bit圖,則處理時利用每個像素點(3個字節(jié))進行灰度計算直接得到8bit灰度圖。無論哪種位深的圖,最終都必須將調色板設置成256長度且有對應關系:Color
10、Tablei中Red=Green=Blue=I;最后還得設置新圖像的infoheader信息頭和fileheader文件頭C. 算法邏輯:a) 單色圖:對原像素數組每個字節(jié)進行8次“按位與”運算,自高位到低位依次判斷是位值是0還是1;單色圖本身不需要灰度處理。b) 4bit圖:對原像素數組的每個字節(jié)進行兩次位運算,取出高4位和低4位,作為新8bit圖的對應調色板索引號,再根據每個像素點對應調色板的RGB分量進行灰度計算。如果只是為了完成灰度顯示,則最簡單的方法是直接更改調色板,但實際遇到個錯誤,就是往后的平滑等處理時如果仍采用原來的調色板和調色板索引號就會混亂不堪,所以這里無論如何也得同時改調
11、色板和像素數組!c) 24bit圖:對原像素數組每次取3個字節(jié),分別得到RGB分量。d) 8bit圖:不需要進行圖像格式轉換,且每個字節(jié)對應1個像素,直接取對應調色板中的RGB值進行灰度計算e) 最后配置圖像信息,其中:i. 文件頭調整:bfSize和bfOffBits屬性,得到正確圖像大小ii. 信息頭調整:biImageSize屬性和biBitCount屬性,確定位深為8iii. 調色板調整:調色板為256長度,且每個調色板RGB分量和索引號一致4. 算法4:Smooth(int n, BYTE *pBuffer);A. 算法功能:完成灰度圖的4領域或8領域平滑處理B. 算法思想:一幅圖分
12、為6區(qū)域特別處理:四個頂點、上下左右邊界以及中間區(qū)域;平均算法采用簡單算術平均,優(yōu)點是整型運算,量小效率高C. 算法邏輯(以8鄰域模糊為例):依次處理6塊區(qū)域:5. 算法5:void ToBinValue_8bit(BYTE *pBuffer);A. 算法功能:實現灰度圖的二值化B. 算法思想:找到一個合適的閾值,當灰度值大于該值時,顏色變?yōu)榘咨?55,255,255);當灰度值小于該值時,顏色變?yōu)楹谏?,0,0)。這里簡單地采用平均值算法尋找閾值,即遍歷所有像素點的灰度,統(tǒng)計得到平均灰度并將其作為閾值。C. 算法邏輯:a) 尋找平均值閾值(簡單通過2重循環(huán)完成統(tǒng)計)b) 第二次雙循環(huán)遍歷
13、像素數組,灰度大于閾值則為白,小于則為黑6. 算法6:Island();A. 算法功能:實現8bit灰度二值化圖像的連通域分析。B. 算法思想:采用壓棧思想實現連通域統(tǒng)計和標號。從圖像某一個像素點出發(fā)(一般選擇第1點),檢查當前點是否為已存在連通域標記,否則再檢查是否為黑點,如果為未標記的黑點,則標記它,然后檢查周圍4鄰域是否存在未標記的、未入棧的黑點,如果存在,則將它們送入棧中;一旦棧中非空,則每次從棧頂取點檢查,一次壓棧中所有點的連通域標號一樣。??蘸髣t繼續(xù)下一個位置的點檢查。實際編程中,考慮使用一個while循環(huán)和動態(tài)數組stack模擬棧操作,這是因為,棧中已標記的點可以提前出棧,減少堆
14、積,而普通遞歸函數調用無法做到這一點。C. 算法邏輯:7. 算法7:void RGBtoHSL(HSLpoint *pHSL);A. 算法功能:實現RGB顏色空間向HSL顏色空間的轉換,在HSL空間,可以直接調整色相、飽和度和亮度B. 算法思想:考慮到顏色種類,這里僅實現24位圖的HSL空間轉換,因為24位圖顏色豐富,能基本表現所有顏色。C. 算法邏輯:根據已知的(R,G,B)a) M=max(R,G,B);b) m=min(R,G,B);c) H=60 * G - BV + 360 % 360; M=R60 * B - RV + 120; M=G 60 * R - GV + 240; M=B
15、d) L=M+m2e) S=M-m1-|2L-1|f) 其中,H為色相,取值0-360;S為飽和度,取值為0-1之間的浮點數;L為亮度,取值為0-1之間的浮點數。g) 在HSL空間可以直接調整HSL屬性,但要將圖像輸出,還得將HSL空間逆轉換為RGB空間。8. 算法8:void* newPage(size_t new_size), void* allocate(size_t need_size)內存的開辟和申請【本部分內容借鑒于上學期數據結構中的鏈表知識】A. 內存開辟:內存頁的新開辟需要在向系統(tǒng)申請成功后配置好頁頭結點【保存當前頁的容量等信息并鏈接好下一結點】,配置好每頁的頭尾塊結點【方便f
16、ree內存塊的處理】B. 內存申請:從第一個塊結點開始遍歷,檢查符合條件空閑塊,第一個符合條件的就立即分配【全部分配或部分分配】;由于內存頁使用的是前插法的單向鏈表,而第一個塊結點是最新申請內存頁的第一個塊結點,故一般能完全快速分配。如果第一次分配中不存在符合條件的塊,則考慮調用newPage()函數,開辟一塊更大的內存頁【程序中設定為1.5倍】,再從新頁中獲得申請。如果開辟失敗,則返回申請失敗。塊一旦分配,則新增一個塊結點,并調整好雙向鏈表關系,以及塊上標志的容易關系。五、程序運行分析1. 主界面:主視窗(上)用于查看圖片和菜單操作,副視窗用來瀏覽、切換保存在內存中的圖像。如圖所示2. RGB通道頻譜分析:顯示各顏色亮度分量所占比重大小,如圖所示:3. 灰度及其頻譜:4. 平均二值化5. 鄰域平均6. HSL空間變換:(依次是原圖,處理后圖像),其中調整了亮度,飽和度。六、歸納總結本次簡單的程序設計實踐旨在初步了解BMP文件的處理和初步認識軟件工程實踐的運作方式。主要以了解程序框架設計和算法邏輯為目的,故采取了一些必要措
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容師投訴處理合同模板
- 商業(yè)中心污水管網建設協(xié)議
- 購物商城旅店租賃合同
- 餐飲KTV音響系統(tǒng)設備維護協(xié)議
- 2025年度智能辦公設備租賃與數據安全保障合同3篇
- 地下圖書館錨桿施工合同
- 陶瓷店攤位轉租協(xié)議
- 二零二五年度企業(yè)信息化系統(tǒng)定制開發(fā)合同范本3篇
- 總經理聘用合同履行與變更
- 商業(yè)籃球館施工協(xié)議
- 法治副校長進校園教育
- 北京市石景山區(qū)2023-2024學年七年級上學期期末考試數學試卷(含答案)
- 2025版寒假特色作業(yè)
- 江西省吉安市2023-2024學年高一上學期1月期末考試政治試題(解析版)
- 國內外航空安全形勢
- 零售業(yè)發(fā)展現狀與面臨的挑戰(zhàn)
- 2024年版汽車4S店商用物業(yè)租賃協(xié)議版B版
- 《微觀經濟學》習題(含選擇題)
- 微信小程序云開發(fā)(赤峰應用技術職業(yè)學院)知到智慧樹答案
- 2024-2025學年上學期福建高二物理期末卷2
- 2024-2025年第一學期小學德育工作總結:點亮德育燈塔引領小學生全面成長的逐夢之旅
評論
0/150
提交評論