實(shí)驗(yàn)一圖像數(shù)據(jù)結(jié)構(gòu)與圖像文件格式.doc
實(shí)驗(yàn)一 圖像數(shù)據(jù)結(jié)構(gòu)與圖像文件格式一、實(shí)驗(yàn)?zāi)康姆治鯞MP圖像文件格式,深化對圖像數(shù)據(jù)結(jié)構(gòu)和圖像文件格式的理解。 二、實(shí)驗(yàn)內(nèi)容1、讀取和顯示BMP索引色圖像2、讀取和顯示BMP真彩色圖像3、基于二進(jìn)制文件分析BMP圖像文件結(jié)構(gòu)三、實(shí)驗(yàn)步驟函數(shù)及符號說明:Imfinfo %獲取一張圖片的具體信息imread%讀取圖片文件中的數(shù)據(jù)/*對于索引色圖像,使用x,map=imread(filename,fmt)形式讀取,其中x為圖像矩陣*/figure,imshow%顯示圖片1、讀取和顯示BMP索引色圖像(包括二值圖像、灰度圖像、彩色圖像)1.1 二值圖像(逐行輸入命令,下同)fileinfo1=imfinfo(cameraman-1.bmp,bmp);img1,map1=imread(cameraman-1.bmp,bmp);figure,imshow(img1, map1);結(jié)果圖:1.2 灰度圖像% 16色位圖圖像的操作fileinfo2=imfinfo(cameraman-4.bmp,bmp);img2,map2=imread(cameraman-4.bmp,bmp);figure, imshow(img2,map2);結(jié)果圖:% 256色位圖圖像的操作Fileinfo3=imfinfo(cameraman-8.bmp,bmp);img3,map3=imread(cameraman-8.bmp,bmp);figure, imshow(img3,map3);結(jié)果圖:1.3 基于索引色的彩色圖像Fileinfo4=imfinfo(canoe-256.bmp,bmp);img4,map4=imread(canoe-256.bmp,bmp);figure, imshow(img4,map4);結(jié)果圖2、讀取和顯示BMP真彩色圖像Fileinfo5=imfinfo(peppers.bmp,bmp);img5,map5=imread(peppers.bmp,bmp);figure, imshow(img5,map5);結(jié)果圖:3、以二進(jìn)制形式讀取以上BMP文件,分析索引色和真彩色BMP圖像文件的構(gòu)成,嘗試觀察分析每一個組分分量數(shù)值以及數(shù)值間的聯(lián)系。fid1,mesage1=fopen(cameraman-1.bmp,r); data1=fread(fid1);fid2,mesage2=fopen(cameraman-4.bmp,r); Data2=fread(fid2);fid3,mesage3=fopen(cameraman-8.bmp,r);Data3=fread(fid3);fid4,mesage4=fopen(canoe-256.bmp,r);Data4=fread(fid4);fid5,mesage5=fopen(peppers.bmp,r);Data5=fread(fid5);結(jié)果圖:四、BMP圖像文件格式特征總結(jié)1:BMP文件組成BMP文件由文件頭、位圖信息頭、顏色信息和圖像數(shù)據(jù)四部分組成。2:BMP文件頭(14字節(jié))BMP文件頭數(shù)據(jù)結(jié)構(gòu)含有BMP文件的類型、文件大小和位圖起始位置等信息。其結(jié)構(gòu)定義如下:typedef struct tagBITMAPFILEHEADERWORD bfType; / 位圖文件的類型,必須為BM(1-2字節(jié))DWORD bfSize; / 位圖文件的大小,以字節(jié)為單位(3-6字節(jié))WORD bfReserved1; / 位圖文件保留字,必須為0(7-8字節(jié))WORD bfReserved2; / 位圖文件保留字,必須為0(9-10字節(jié))DWORD bfOffBits; / 位圖數(shù)據(jù)的起始位置,以相對于位圖(11-14字節(jié))/ 文件頭的偏移量表示,以字節(jié)為單位 BITMAPFILEHEADER;3:BMP信息頭(40字節(jié))typedef struct tagBITMAPINFOHEADERDWORD biSize; / 本結(jié)構(gòu)所占用字節(jié)數(shù)(15-18字節(jié))LONG biWidth; / 位圖的寬度,以像素為單位(19-22字節(jié))LONG biHeight; / 位圖的高度,以像素為單位(23-26字節(jié))WORD biPlanes; / 目標(biāo)設(shè)備的級別,必須為1(27-28字節(jié))WORD biBitCount;/ 每個像素所需的位數(shù),必須是1(雙色),(29-30字節(jié))/ 4(16色),8(256色)16(高彩色)或24(真彩色)之一DWORD biCompression; / 位圖壓縮類型,必須是 0(不壓縮),(31-34字節(jié))/ 1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一DWORD biSizeImage; / 位圖的大小,以字節(jié)為單位(35-38字節(jié))LONG biXPelsPerMeter; / 位圖水平分辨率,每米像素?cái)?shù)(39-42字節(jié))LONG biYPelsPerMeter; / 位圖垂直分辨率,每米像素?cái)?shù)(43-46字節(jié))DWORD biClrUsed;/ 位圖實(shí)際使用的顏色表中的顏色數(shù)(47-50字節(jié))DWORD biClrImportant;/ 位圖顯示過程中重要的顏色數(shù)(51-54字節(jié)) BITMAPINFOHEADER;4:顏色信息typedef struct tagRGBQUAD BYTE rgbBlue;/ 藍(lán)色的亮度(值范圍為0-255)BYTE rgbGreen; / 綠色的亮度(值范圍為0-255)BYTE rgbRed; / 紅色的亮度(值范圍為0-255)BYTE rgbReserved;/ 保留,必須為0 RGBQUAD;5:位圖數(shù)據(jù)位圖數(shù)據(jù)記錄了位圖的每一個像素值,記錄順序是在掃描行內(nèi)是從左到右,掃描行之間是從下到上。位圖的一個像素值所占的字節(jié)數(shù):當(dāng)biBitCount=1時,8個像素占1個字節(jié);當(dāng)biBitCount=4時,2個像素占1個字節(jié);當(dāng)biBitCount=8時,1個像素占1個字節(jié);當(dāng)biBitCount=24時,1個像素占3個字節(jié);Windows規(guī)定一個掃描行所占的字節(jié)數(shù)必須是4的倍數(shù)(即以long為單位),不足的以0填充,biSizeImage = (bi.biWidth * bi.biBitCount) + 31) & 31) / 8) * bi.biHeight;