數(shù)字圖像處理實驗報告
數(shù)字圖像處理實驗報告1
一. 實驗內(nèi)容:
主要是圖像的幾何變換的編程實現(xiàn),具體包括圖像的讀取、改寫,圖像平移,圖像的鏡像,圖像的轉置,比例縮放,旋轉變換等.
具體要求如下:
1.編程實現(xiàn)圖像平移,要求平移后的圖像大小不變;
2.編程實現(xiàn)圖像的鏡像;
3.編程實現(xiàn)圖像的轉置;
4.編程實現(xiàn)圖像的比例縮放,要求分別用雙線性插值和最近鄰插值兩種方法來實
現(xiàn),并比較兩種方法的縮放效果;
5.編程實現(xiàn)以任意角度對圖像進行旋轉變換,要求分別用雙線性插值和最近鄰插
值兩種方法來實現(xiàn),并比較兩種方法的旋轉效果.
二.實驗目的和意義:
本實驗的目的是使學生熟悉并掌握圖像處理編程環(huán)境,掌握圖像平移、鏡像、轉置和旋轉等幾何變換的方法,并能通過程序設計實現(xiàn)圖像文件的讀、寫操作,及圖像平移、鏡像、轉置和旋轉等幾何變換的程序?qū)崿F(xiàn).
三.實驗原理與主要框架:
3.1 實驗所用編程環(huán)境:
Visual C++(簡稱VC)是微軟公司提供的基于C/C++的應用程序集成開發(fā)工具.VC擁有豐富的功能和大量的擴展庫,使用它能有效的創(chuàng)建高性能的Windows應用程序和Web應用程序.
VC除了提供高效的C/C++編譯器外,還提供了大量的可重用類和組件,包括著名的微軟基礎類庫(MFC)和活動模板類庫(ATL),因此它是軟件開發(fā)人員不可多得的開發(fā)工具.
VC豐富的功能和大量的擴展庫,類的重用特性以及它對函數(shù)庫、DLL庫的支持能使程序更好的模塊化,并且通過向?qū)С绦虼蟠蠛喕藥熨Y源的使用和應用程序的開發(fā),正由于VC具有明顯的優(yōu)勢,因而我選擇了它來作為數(shù)字圖像幾何變換的開發(fā)工具.
在本程序的開發(fā)過程中,VC的核心知識、消息映射機制、對話框控件編程等都得到了生動的體現(xiàn)和靈活的應用.
3.2 實驗處理的對象:256色的BMP(BIT MAP )格式圖像
BMP(BIT MAP )位圖的文件結構:
具體組成圖: BITMAPFILEHEADER
位圖文件頭
(只用于BMP文件) bfType=”BM” bfSize bfReserved1
bfReserved2
bfOffBits
biSize
biWidth
biHeight
biPlanes
biBitCount
biCompression
biSizeImage
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
單色DIB有2個表項
16色DIB有16個表項或更少
256色DIB有256個表項或更少
真彩色DIB沒有調(diào)色板
每個表項長度為4字節(jié)(32位)
像素按照每行每列的順序排列
每一行的字節(jié)數(shù)必須是4的整數(shù)
倍BITMAPINFOHEADER 位圖信息頭 Palette 調(diào)色板 DIB Pixels DIB圖像數(shù)據(jù)
1. BMP文件組成
BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成.
2. BMP文件頭
BMP文件頭數(shù)據(jù)結構含有BMP文件的類型(必須為BMP)、文件大小(以字節(jié)為單位)、位圖文件保留字(必須為0)和位圖起始位置(以相對于位圖
文件頭的偏移量表示)等信息.
3. 位圖信息頭
BMP位圖信息頭數(shù)據(jù)用于說明位圖的尺寸(寬度,高度等都是以像素為單位,大小
以字節(jié)為單位, 水平和垂直分辨率以每米像素數(shù)為單位) ,目標設備的級別,每個像素所需的位數(shù), 位圖壓縮類型(必須是 0)等信息.
4. 顏色表
顏色表用于說明位圖中的顏色,它有若干個表項,每一個表項是一個RGBQUAD
類型的結構,定義一種顏色.具體包含藍色、紅色、綠色的亮度(值范圍為0-255)
位圖信息頭和顏色表組成位圖信息
5. 位圖數(shù)據(jù)
位圖數(shù)據(jù)記錄了位圖的每一個像素值,記錄順序是在掃描行內(nèi)是從左到右,掃描
行之間是從下到上.
Windows規(guī)定一個掃描行所占的字節(jié)數(shù)必須是 4的倍數(shù)(即以long為單位),不足的以0填充.
3.3 BMP(BIT MAP )位圖的顯示:
?、僖话泔@示方法:
1. 申請內(nèi)存空間用于存放位圖文件
2. 位圖文件讀入所申請內(nèi)存空間中
3. 在函數(shù)中用創(chuàng)建顯示用位圖, 用函數(shù)創(chuàng)建兼容DC,用函數(shù)選擇顯示刪除位圖
但以上方法的缺點是: 1)顯示速度慢; 2) 內(nèi)存占用大; 3) 位圖在縮小顯示時圖形失真大,(可通過安裝字體平滑軟件來解決); 4) 在低顏色位數(shù)的設備上(如256顯示模式)顯示高顏色位數(shù)的圖形(如真彩色)圖形失真嚴重.
?、贐MP位圖縮放顯示 :
用視頻函數(shù)來顯示位圖,內(nèi)存占用少,速度快,而且還可以對圖形進行淡化(Dithering )處理.淡化處理是一種圖形算法,可以用來在一個支持比圖像所用顏色要少的設備上顯示彩色圖像.BMP位圖顯示方法如下:
1. 打開視頻函數(shù),一般放在在構造函數(shù)中
2. 申請內(nèi)存空間用于存放位圖文件
3. 位圖文件讀入所申請內(nèi)存空間中
4. 在 函數(shù)中 顯示位圖
5. 關閉視頻函數(shù) ,一般放在在析構函數(shù)中
以上方法的優(yōu)點是: 1)顯示速度快; 2) 內(nèi)存占用少; 3) 縮放顯示時圖形失真小,4) 在低顏色位數(shù)的設備上顯示高顏色位數(shù)的圖形圖形時失真小; 5) 通過直接處理位圖數(shù)據(jù),可以制作簡單動畫.
3.4 程序中用到的訪問函數(shù)
Windows支持一些重要的DIB訪問函數(shù),但是這些函數(shù)都還沒有被封裝到MFC中,這些函數(shù)主要有:
1. SetDIBitsToDevice函數(shù):該函數(shù)可以直接在顯示器或打印機上顯示DIB. 在顯
示時不進行縮放處理.
2. StretchDIBits函數(shù):該函數(shù)可以縮放顯示DIB于顯示器和打印機上.
3. GetDIBits函數(shù):還函數(shù)利用申請到的內(nèi)存,由GDI位圖來構造DIB.通過該函數(shù),
可以對DIB的格式進行控制,可以指定每個像素顏色的位數(shù),而且可以指定是否進行壓縮.
4. CreateDIBitmap函數(shù):利用該函數(shù)可以從DIB出發(fā)來創(chuàng)建GDI位圖.
5. CreateDIBSection函數(shù):該函數(shù)能創(chuàng)建一種特殊的DIB,稱為DIB項,然后返回
一個GDI位圖句柄.
6. LoadImage函數(shù):該函數(shù)可以直接從磁盤文件中讀入一個位圖,并返回一個DIB
句柄.
7. DrawDibDraw函數(shù):Windows提供了窗口視頻(VFW)組件,Visual C++支持該
組件.VFW中的DrawDibDraw函數(shù)是一個可以替代StretchDIBits的函數(shù).它的最主要的優(yōu)點是可以使用抖動顏色,并且提高顯示DIB的速度,缺點是必須將VFW代碼連接到進程中.
3.5 圖像的幾何變換
圖像的幾何變換,通常包括圖像的平移、圖像的鏡像變換、圖像的轉置、圖像的縮放和圖像的旋轉等.
本文來源:http://www.nvnqwx.com/gongwen/gongzuojihua/2945728.htm