資源描述:
《位圖仿射變換算法研究》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、計(jì)算機(jī)技術(shù)與應(yīng)用進(jìn)展-2004位圖仿射變換算法研究*徐磊陳淑珍武漢火學(xué)電子信息學(xué)院,湖北武漢430072摘要仿射變換是比較重要的圖像變換方法,在對(duì)位圖進(jìn)行仿射變換時(shí),位圖像素點(diǎn)顏色信.息位數(shù)不同,對(duì)其進(jìn)行仿射變換操作時(shí)的算法也不同本文分別對(duì)不同顏色信息位圖進(jìn)行分析,得出了對(duì)他們進(jìn)行仿射變換時(shí)的算法,并用程序?qū)崿F(xiàn).關(guān)健詞仿射變換位圖像素1引言圖像的仿射變換也叫圖像的幾何變換,包括圖像的平移,鏡像,轉(zhuǎn)置,縮放,旋轉(zhuǎn),等操作。在程序?qū)崿F(xiàn)的過(guò)程中,有些變換如平移,鏡像,縮放等操作使用一般的顯示函數(shù),只要修改相應(yīng)的參
2、數(shù)即可,但是在進(jìn)行旋轉(zhuǎn)操作的時(shí)候僅僅進(jìn)行參數(shù)的修改是不能實(shí)現(xiàn)的,這時(shí)就需要對(duì)圖像進(jìn)行點(diǎn)操作,即對(duì)組成圖像的每一個(gè)像素進(jìn)行操作,以達(dá)到變換的目的。在位圖格式中,不同的圖像,其像素點(diǎn)的顏色信息位數(shù)不同,本文分析對(duì)不同DIB位圖進(jìn)行仿射變換時(shí)的算法。2相關(guān)知識(shí)2.1仿射變換圖像變換是指數(shù)字圖像的兒何變換(或稱為空間變換),即圖像中點(diǎn)與點(diǎn)之間的空間映射關(guān)系。仿射變換是一種特殊的變換方式,其一般表達(dá)式為:a=a,2氣[x,Y,1l=[u,V,1llall氣a3,其中(x,y)為新圖像中的點(diǎn),(u,v)為與(x,y)對(duì)
3、應(yīng)的原圖像上的點(diǎn)。將上式展開(kāi)可得:︸1X--1a=u+a2,v+a3,71..y--1‘a(chǎn),2u+422,+432仿射變換能實(shí)現(xiàn)位圖的平面映射,常見(jiàn)的包括平移,旋轉(zhuǎn),縮放和剪切等。2.2DIB位圖文件結(jié)構(gòu)簡(jiǎn)介一個(gè)BMP文件大體上分成4個(gè)部分:位圖文件頭,位圖信息頭,調(diào)色板,位圖數(shù)據(jù)111對(duì)于2色位圖,用1位就可以表示該像素的顏色,(一般0表示黑,1表示白),所以一個(gè)字節(jié)就可褲者簡(jiǎn)介:徐磊(1980-),男,碩士生,現(xiàn)從事多媒體信號(hào)分析與網(wǎng)絡(luò)技術(shù)研究位圖仿射變換算法研究以表示8個(gè)像素;對(duì)于16色位圖,用4位可
4、以表示一個(gè)像素的顏色,所以一個(gè)字節(jié)就可以表示2個(gè)像素;對(duì)于256色位圖,1個(gè)字節(jié)剛好可以表示一個(gè)像素;對(duì)于真彩色圖,3個(gè)字節(jié)才能表示一個(gè)像索。3獲取圖像數(shù)據(jù)的方法要對(duì)圖像進(jìn)行處理,必須先讀出圖像數(shù)據(jù)。通過(guò)以下語(yǔ)句獲得圖像數(shù)據(jù)B1.CStringFilter-"bitmapfiles(*.bmp)l*.bmplallfiles(*.*)I*.*I";/定義打開(kāi)文件類(lèi)型CFileDialogdlgopen(TRUE,Filter,O,OFNesHIDEREADONLYIOFN一OVERWRITEPROMPT,F
5、ilter,0);/定義打開(kāi)對(duì)話框if(IDCANCEL==dlgopen.DoModal())return;/顯示打開(kāi)對(duì)話框FileName=dlgopen.GetPathNameQ;/得到文件名CFilebsFile((LPCTSTR)FileName,CFile::modeReadWrite);/打開(kāi)文件,可讀可寫(xiě)bsFile.SeekToBegin();/從文件的開(kāi)始filelength=bsFile.GetLength();/圖像文件長(zhǎng)度memyadd=(LPBYTE)malloc(filelen
6、gth);/分配內(nèi)存,存放位圖數(shù)據(jù)bsFile.ReadHuge(memyadd,filelength);/將位圖數(shù)據(jù)讀入內(nèi)存bi=(BITMAPINFOHEADER*)(memyadd+sizeof(BITMAPFILEHEADER));/將指針bi指向位圖數(shù)據(jù)的/信息頭bf=(BITMAPFILEHEADER*)memyadd;//將指針bf指向位圖數(shù)據(jù)的刀文件頭,即位圖數(shù)據(jù)的開(kāi)始/部分這樣就可以得到圖像數(shù)據(jù),讀出圖像數(shù)據(jù)后,就可以通過(guò)指針對(duì)圖象數(shù)據(jù)進(jìn)行操作了。4點(diǎn)操作的算法實(shí)現(xiàn)算法的基本思想是,根據(jù)不
7、同的仿射變換方法對(duì)讀出的圖像數(shù)據(jù)進(jìn)行變換,在變換的過(guò)程中,不能改變?cè)瓟?shù)據(jù),以避免不必要的麻煩,這就需要開(kāi)辟新的內(nèi)存用于存儲(chǔ)變換后的圖像數(shù)據(jù):同時(shí),在有些仿射變換中,可能會(huì)修改圖像的信息頭的信息,如剪切操作會(huì)改變圖像的長(zhǎng)度,寬度等,就需要修改相應(yīng)的信息頭,變換結(jié)束后將新的位圖數(shù)據(jù)覆蓋原數(shù)據(jù)送顯示即可,如果不希望覆蓋原數(shù)據(jù),可以重新構(gòu)造一個(gè)位圖文件,通過(guò)上面的變換可以得到構(gòu)造新位圖文件所需的文件頭,信息頭,位圖數(shù)據(jù)等。在進(jìn)行仿射變換時(shí),需要注意的問(wèn)題是,原圖像數(shù)據(jù)變換后復(fù)制到新的內(nèi)存的相應(yīng)位置時(shí),不能影響新的數(shù)
8、據(jù)中同一個(gè)字節(jié)中的其他數(shù)據(jù)。對(duì)于像素的大小占用的內(nèi)存不是一個(gè)字節(jié)的整數(shù)倍的位圖(即2色和16色圖),它們占用的內(nèi)存都小于一個(gè)字節(jié),在算法實(shí)現(xiàn)時(shí)要稍微復(fù)雜。對(duì)于256色和真彩色的位圖,由于占用的內(nèi)存為一個(gè)字節(jié)的整數(shù)倍,不會(huì)影響到前后的像素點(diǎn)的數(shù)據(jù),因此算法相對(duì)簡(jiǎn)單。因此需要在變換前先檢查位圖的顏色信息,可通過(guò)一下語(yǔ)句獲得顏色信息:colnum=bi->biBitCount;讀取顏色信息后,就可以針對(duì)對(duì)不同顏色信息的