資源描述:
《數(shù)字圖像處理-圖像縮放的vc++實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、圖像縮放的VC++實(shí)現(xiàn)實(shí)驗(yàn)要求1.試用最鄰近插值和雙線性插值對(duì)所給圖像進(jìn)行縮小和放大操作。先縮小12倍,再放大12倍。2.描述圖像的變化,分析變化的原因,并給出對(duì)兩種插值方法的評(píng)價(jià)。實(shí)驗(yàn)原理1.最鄰近插值(近鄰取樣法)最鄰近插值是一種簡(jiǎn)單的插值算法,也稱為零階插值。它輸出的像素灰度值就等于距離它映射到的位置最近的輸入像素的灰度值。對(duì)于通過反向變換得到的的一個(gè)浮點(diǎn)坐標(biāo),對(duì)其進(jìn)行簡(jiǎn)單的取整,得到一個(gè)整數(shù)型坐標(biāo),這個(gè)整數(shù)型坐標(biāo)對(duì)應(yīng)的像素值就是目的像素的像素值,也就是說,取浮點(diǎn)坐標(biāo)最鄰近的左上角點(diǎn)(對(duì)于DIB是右
2、上角,因?yàn)樗膾呙栊惺悄嫘虼鎯?chǔ)的)對(duì)應(yīng)的像素值??梢姡钹徑逯岛?jiǎn)單且直觀,但得到的圖像質(zhì)量不高;當(dāng)圖像中包含像素之間灰度級(jí)有變化的細(xì)微結(jié)構(gòu)時(shí),最鄰近查值法會(huì)在圖像中產(chǎn)生人為的加工痕跡。2.雙線性插值對(duì)于一個(gè)目的像素,設(shè)置坐標(biāo)通過反向變換得到的浮點(diǎn)坐標(biāo)為(i+u,j+v),其中i、j均為非負(fù)整數(shù),u、v為[0,1)區(qū)間的浮點(diǎn)數(shù),則這個(gè)像素得值f(i+u,j+v)可由原圖像中坐標(biāo)為(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對(duì)應(yīng)的周圍四個(gè)像素的值決定,即: f(i+u,j+v)=(
3、1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推。 這就是雙線性內(nèi)插值法。雙線性內(nèi)插值法計(jì)算量大,但縮放后圖像質(zhì)量高,不會(huì)出現(xiàn)像素值不連續(xù)的的情況。由于雙線性插值具有低通濾波器的性質(zhì),使高頻分量受損,所以可能會(huì)使圖像輪廓在一定程度上變得模糊。概要設(shè)計(jì)1.本實(shí)驗(yàn)的系統(tǒng)軟件整體流程圖如下:本實(shí)驗(yàn)使用的平臺(tái)是VC6.0,使用VC++實(shí)現(xiàn)的圖形用戶界面。是否退出程序是否繼續(xù)處理其他圖片保
4、存處理后的圖片最近鄰插值放大/縮小雙線性插值放大/縮小設(shè)置放大縮小倍數(shù)打開圖片2.功能模塊的劃分和描述由上面的程序整體流程圖可以看出,本程序主要分為下面幾個(gè)模塊:1.讀取灰度圖像模塊:該模塊主要實(shí)現(xiàn)讀入一幅灰度圖像。2.設(shè)置放大縮小倍數(shù)模塊:可以自由設(shè)置圖片要放大和縮小的比例,且設(shè)置了最大只能放大15倍,最小縮小0.001倍,不過可以多次放大和縮小。3.最近鄰插值模塊:實(shí)現(xiàn)最近鄰插值放大和縮小。4.雙線性插值模塊:實(shí)現(xiàn)雙線性插值放大和縮小。5.保存處理后的圖片模塊:實(shí)現(xiàn)圖片的保存。詳細(xì)設(shè)計(jì)由于讀取灰度圖像
5、模塊、保存處理后的圖片模塊可以由系統(tǒng)自帶的類CFileDialog類實(shí)現(xiàn),因此本實(shí)驗(yàn)的重點(diǎn)是放在設(shè)置放大縮小倍數(shù)模塊、最近鄰插值模塊、雙線性插值模塊這三個(gè)模塊,以下是關(guān)于這三個(gè)模塊的實(shí)現(xiàn):1.設(shè)置放大和縮小比例系數(shù)本程序中新建了一個(gè)繼承自對(duì)話框類CDialog的類SetClass用來接收用戶輸入的放大縮小比例的值,用戶通過菜單的設(shè)置項(xiàng)來設(shè)置該系數(shù),該對(duì)話框的界面如下:其中的X和Y分別是用來設(shè)置圖片的橫向和縱向放大系數(shù)。用戶設(shè)置的變量的值存放在文檔類的四個(gè)浮點(diǎn)型變量m_BXZoomRatio(橫向放大倍數(shù),
6、初值為1.25),m_BYZoomRatio(縱向放大倍數(shù),初值為1.25),m_SXZoomRatio(橫向縮小系數(shù),初值為0.8),m_SYZoomRatio(縱向縮小系數(shù),初值是0.8)中。其程序流程圖如下:CMyDIPDoc::OnZoombig()放大倍數(shù)菜單->設(shè)置縮小倍數(shù)CMyDIPDoc::OnZoomsmall()其代碼實(shí)現(xiàn)如下://放大系數(shù)設(shè)置菜單項(xiàng)的響應(yīng)函數(shù)voidCMyDIPDoc::OnZoombig(){//TODO:AddyourcommandhandlercodehereS
7、etClasssetclass;//設(shè)置對(duì)話框if(setclass.DoModal()==IDOK){//將用戶設(shè)置值存到文檔類中的相應(yīng)變量中m_BXZoomRatio=setclass.m_getx;m_BYZoomRatio=setclass.m_gety;}}//縮小系數(shù)設(shè)置菜單項(xiàng)的響應(yīng)函數(shù)voidCMyDIPDoc::OnZoomsmall(){//TODO:AddyourcommandhandlercodehereSetClasssetclass;if(setclass.DoModal()==
8、IDOK){//將用戶設(shè)置值存到文檔類中的相應(yīng)變量中m_SXZoomRatio=setclass.m_getx;m_SYZoomRatio=setclass.m_gety;}}1.最近鄰插值模塊和雙線性插值模塊本程序?qū)崿F(xiàn)這兩個(gè)模塊功能代碼是在一個(gè)全局函數(shù)中實(shí)現(xiàn)的,其原型為:HGLOBALWINAPIZoomDIB(LPSTRlpDIB,floatfXZoomRatio,floatfYZoomRatio,BOOLtag);其中l(wèi)