版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)字圖像處理實驗報告昆明理工大學(xué)理學(xué)院電子信息科學(xué)與技術(shù)班 級: 電信112 姓 名: 張鑒 學(xué) 號: 201111102210 指導(dǎo)教師: 桂進斌 完成日期: 2014.06.05 昆明理工大學(xué)理學(xué)院電子信息科學(xué)與技術(shù)112班目錄 TOC o 1-1 h z u HYPERLINK l _Toc390111483 實驗一 VC 6.0下bmp位圖的讀取與顯示 PAGEREF _Toc390111483 h 3 HYPERLINK l _Toc390111484 實驗二 圖像基本運算點運算 PAGEREF _Toc390111484 h 13 HYPERLINK l _Toc390111485
2、 實驗三 圖像基本運算代數(shù)、邏輯運算 PAGEREF _Toc390111485 h 21 HYPERLINK l _Toc390111486 實驗四 圖像基本運算幾何運算 PAGEREF _Toc390111486 h 29 HYPERLINK l _Toc390111487 實驗五 直方圖的繪制及其均衡 PAGEREF _Toc390111487 h 36 HYPERLINK l _Toc390111488 實驗六 圖像的平滑與銳化 PAGEREF _Toc390111488 h 42 HYPERLINK l _Toc390111489 實驗七 偽彩色及彩色圖像處理 PAGEREF _To
3、c390111489 h 50 HYPERLINK l _Toc390111490 實驗八 圖像傅里葉變換及低通濾波和高通濾波 PAGEREF _Toc390111490 h 55實驗一 VC 6.0下bmp位圖的讀取與顯示實驗?zāi)康?. 掌握windows BMP格式位圖文件的基本格式;2. 會使用VC+讀取圖像數(shù)據(jù)并顯示。實驗原理設(shè)備無關(guān)位圖(DIB)設(shè)備無關(guān)位圖(DIB)是一種與設(shè)備無關(guān)的位圖,自帶顏色信息,因此有利于在各種設(shè)備間傳輸。BMP中DIB的結(jié)構(gòu)文件頭:BITMAPFILEHEADERtypedef struct tagBITMAPFILEHEADER / bmfh WORD b
4、fType ; / signature word BM or 0 x4D42 DWORD bfSize ; / entire size of file WORD bfReserved1 ; / must be zero WORD bfReserved2 ; / must be zero DWORD bfOffsetBits ; / offset in file of DIB pixel bits BITMAPFILEHEADER, * PBITMAPFILEHEADER ;位圖信息頭:BITMAPINFOHEADERtypedef struct tagBITMAPINFOHEADER / bm
5、ih DWORD biSize ; / size of the structure = 40 LONG biWidth ; / width of the image in pixels LONG biHeight ; / height of the image in pixels WORD biPlanes ; / = 1 WORD biBitCount ; / bits per pixel (1, 4, 8, 16, 24, or 32) DWORD biCompression ; / compression code DWORD biSizeImage ; / number of byte
6、s in image LONG biXPelsPerMeter ; / horizontal resolution LONG biYPelsPerMeter ; / vertical resolution DWORD biClrUsed ; / number of colors used DWORD biClrImportant ; / number of important colors BITMAPINFOHEADER, * PBITMAPINFOHEADER ;調(diào)色板(可能沒有):typedef struct tagRGBQUAD / rgb BYTE rgbBlue ; / blue
7、level BYTE rgbGreen ; / green level BYTE rgbRed ; / red level BYTE rgbReserved ; / = 0 RGBQUAD ;實際位圖數(shù)據(jù):typedef struct tagBITMAPINFO / bmi BITMAPINFOHEADER bmiHeader ; / info-header structure RGBQUAD bmiColors1 ; / color table array BITMAPINFO, * PBITMAPINFO ; DIB訪問函數(shù):SetDIBitsToDevice:SetDIBitsToDev
8、ice函數(shù)顯示沒有延伸和縮小的DIB。DIB的每個圖素對應(yīng)到輸出設(shè)備的一個圖素上,而且DIB中的圖像一定會被正確顯示出來也就是說,圖像的頂列在上方。任何會影響設(shè)備內(nèi)容的座標(biāo)轉(zhuǎn)換都影響了顯示DIB的開始位置,但不影響顯示出來的圖片大小和方向。該函數(shù)如下:iLines = SetDIBitsToDevice ( hdc, / device context handlexDst, / x destination coordinate yDst, / y destination coordinate cxSrc, / source rectangle widthcySrc, / source rect
9、angle height xSrc, / x source coordinate ySrc, / y source coordinate yScan, / first scan line to draw cyScans, / number of scan lines to draw pBits, / pointer to DIB pixel bitspInfo, / pointer to DIB information fClrUse) ; / color use flagSetDIBitsToDevice函數(shù)傳回所顯示的掃描行的數(shù)目。因此,要調(diào)用SetDIBitsToDevice來顯示整個D
10、IB圖像,您需要下列信息:hdc目的表面的設(shè)備句柄代號xDst和yDst圖像左上角的目的坐標(biāo)cxDib和cyDibDIB的圖素寬度和高度,在這里,cyDib是BITMAPINFOHEADER結(jié)構(gòu)內(nèi)biHeight欄位的絕對值。pInfo和pBits指向點陣圖信息部分和圖素位元的指標(biāo)StretchDIBits:int StrechDIBits(HDC hdc,int Xdest,int Ydest,int DEstWidth,int nDestHeight,int XSrc, int Ysrc,int nSrcWidth,int SrcHeight,CONST VOID *lpBits,CONS
11、T BITMAPINFO *lpBitsInfo,UINT iUsage,DORD dwRo);要通過縮小或放大DIB,在輸出設(shè)備上以特定的大小顯示它,可以使用StretchDIBits:iLines = StretchDIBits ( hdc, / device context handle xDst, / x destination coordinate yDst, / y destination coordinatecxDst, / destination rectangle width cyDst, / destination rectangle height xSrc, / x so
12、urce coordinate ySrc, / y source coordinatecxSrc, / source rectangle width cySrc, / source rectangle height pBits, / pointer to DIB pixel bits pInfo, / pointer to DIB information fClrUse, / color use flagdwRop) ; / raster operation函數(shù)參數(shù)除了下列三個方面,均與SetDIBitsToDevice相同。實驗內(nèi)容使用VC+讀取圖像數(shù)據(jù)并顯示。實驗步驟啟動VC+6.0,新建
13、一個基于MFC的應(yīng)用程序項目,命名:zhangjian;進根據(jù)提示,定制應(yīng)用程序的特征。得到如下圖所示內(nèi)容;修改視圖類的基類心支持滾動條;單擊完成按鈕生成應(yīng)用程序框架;如下圖通過類向?qū)Щ蚴謩釉谝晥D類中添加成員變量m_x,類型int;按同樣的方法添加以下成員變量;HBITMAP m_Bmp;LPVOID m_ColorList;LPBYTE m_Image;LPBITMAPINFOHEADER m_DibHead; enum allocate None, crtallocate, heapallocate;allocate m_nBmpallocate;allocate m_nImageallo
14、cate;DWORD m_ImageSize; int m_nPalette;HANDLE m_hFile;HANDLE m_hMap;LPVOID m_lpvFile;HPALETTE m_hPalette;HGLOBAL m_hGlob; 如下圖通過類向?qū)У墓δ茉黾映蓡T函數(shù)SetPaletteSize(int nBitCount),類型void; 按同樣的方法添加以下成員函數(shù);void Clear();清除BOOL ReadFile(CFile *pFile);讀取數(shù)據(jù)到內(nèi)存BOOL SetPalette();當(dāng)前位圖顏色數(shù)大于設(shè)置調(diào)色板BOOL GetPalette();創(chuàng)建顏色數(shù)不大于
15、的調(diào)色板BOOL DibToDC(CDC* pDC,CSize size);顯示位圖BOOL MemToDib(LPVOID lmem);得到內(nèi)存中位圖象素位置CSize GetDibSize();返回位圖尺寸完善成員函數(shù)代碼功能,從老師給的代碼中拷貝內(nèi)容,結(jié)果如下;void CZhangjianView:SetPaletteSize(int nBitCount) /設(shè)置調(diào)色板大小if(m_DibHead-biSize != sizeof(BITMAPINFOHEADER) throw new CException;/拋出異常m_ImageSize = m_DibHead-biSizeImag
16、e;if(m_ImageSize = 0) DWORD dwBytes = (DWORD) m_DibHead-biWidth * m_DibHead-biBitCount) / 32;if(DWORD) m_DibHead-biWidth * m_DibHead-biBitCount) % 32)dwBytes+;dwBytes *= 4;m_ImageSize = dwBytes * m_DibHead-biHeight; m_ColorList = (LPBYTE) m_DibHead + sizeof(BITMAPINFOHEADER);if(m_DibHead = NULL) | (
17、m_DibHead-biClrUsed = 0) switch(nBitCount) case 1:m_nPalette = 2;break;case 4:m_nPalette = 16;break;case 8:m_nPalette = 256;break;case 16:case 24:case 32:m_nPalette = 0;break;default:ASSERT(FALSE);else m_nPalette = m_DibHead-biClrUsed;ASSERT(m_nPalette = 0) & (m_nPalette Read(LPVOID) &bmfh, sizeof(B
18、ITMAPFILEHEADER);if(nCount != sizeof(BITMAPFILEHEADER) throw new CException;if(bmfh.bfType != 0 x4d42) throw new CException;nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);m_DibHead = (LPBITMAPINFOHEADER) new charnSize;m_nBmpallocate = m_nImageallocate = crtallocate;nCount = pFile-Read(m_DibHead,
19、nSize); SetPaletteSize(m_DibHead-biBitCount);GetPalette();m_Image = (LPBYTE) new charm_ImageSize;nCount = pFile-Read(m_Image, m_ImageSize); catch(CException* tmpc) AfxMessageBox(文件讀取錯誤);tmpc-Delete();return FALSE;return TRUE;BOOL CZhangjianView:SetPalette() /當(dāng)前位圖顏色書大于256設(shè)置調(diào)色板if(m_nPalette!=0)return
20、FALSE;CClientDC dc(this);CDC *pDC=&dc;m_hPalette=:CreateHalftonePalette(pDC-GetSafeHdc();return TRUE;BOOL CZhangjianView:GetPalette() /創(chuàng)建顏色數(shù)不大于256的調(diào)色板if(m_nPalette=0)return FALSE;if(m_hPalette!=NULL):DeleteObject(m_hPalette);LPLOGPALETTE pTempPalette=(LPLOGPALETTE) new char2*sizeof(WORD)+ m_nPalette
21、*sizeof(PALETTEENTRY); pTempPalette-palVersion=0 x30;pTempPalette-palNumEntries=m_nPalette;LPRGBQUAD pRGBQuad=(LPRGBQUAD)m_ColorList;for(int i=0;ipalPalEntryi.peRed=pRGBQuad-rgbRed;pTempPalette-palPalEntryi.peGreen=pRGBQuad-rgbGreen;pTempPalette-palPalEntryi.peBlue=pRGBQuad-rgbBlue;pTempPalette-palP
22、alEntryi.peFlags=0;pRGBQuad+;m_hPalette=:CreatePalette(pTempPalette);delete pTempPalette;return TRUE;BOOL CZhangjianView:DibToDC(CDC *pDC, CSize size) /顯示位圖if(m_DibHead=NULL) return FALSE;if(m_hPalette!=NULL)HDC hdc=pDC-GetSafeHdc();:SelectPalette(hdc,m_hPalette,TRUE);pDC-SetStretchBltMode(COLORONCO
23、LOR);:StretchDIBits(pDC-GetSafeHdc(),0,0,size.cx,size.cy, 0,0,m_DibHead-biWidth,m_DibHead-biHeight, m_Image,(LPBITMAPINFO)m_DibHead,DIB_RGB_COLORS, SRCCOPY); return TRUE;BOOL CZhangjianView:MemToDib(LPVOID lmem) /得到內(nèi)存中位圖像素信息Clear();m_DibHead=(LPBITMAPINFOHEADER)lmem;SetPaletteSize(m_DibHead-biBitCou
24、nt);m_Image=(LPBYTE)m_ColorList+sizeof(RGBQUAD)*m_nPalette;GetPalette();return TRUE;CSize CZhangjianView:GetDibSize() /返回位圖尺寸if(m_DibHead=NULL) return CSize(0,0);return CSize(int)m_DibHead-biWidth,(int)m_DibHead-biHeight);編譯測試,無誤后進入下一步;加入圖像文件讀取與顯示的代碼;設(shè)置初始化函數(shù),加入如下代碼;m_x=25;CSize MaxSize(24000,32000);
25、CSize MinSize(MaxSize.cx/100,MaxSize.cy/100);SetScrollSizes(MM_HIMETRIC,MaxSize,MaxSize,MinSize);LPVOID lFirstBMP=(LPVOID):LoadResource(NULL,:FindResource(NULL,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP);MemToDib(lFirstBMP);(2)在位圖編輯器中,編寫一初始位圖,命名為:張鑒,并保存;(3)建立文件打開的消息映射函數(shù)OnFileOpen(),并加入如下代碼;CFileDialog f
26、iledlg(TRUE,bmp,*.bmp);if(filedlg.DoModal()!=IDOK)return;CFile myfile;myfile.Open(filedlg.GetPathName(),CFile:modeRead);if(ReadFile(&myfile)=TRUE)Invalidate();SetPalette();(4)修改OnDraw函數(shù),并加入如下代碼;BeginWaitCursor(); CSize DibSize = GetDibSize(); DibSize.cx *= m_x; DibSize.cy *= -m_x; DibToDC(pDC, DibSi
27、ze); EndWaitCursor();(5)至此,上述代碼已經(jīng)完成讀取并顯示位圖的功能。數(shù)據(jù)存放在視圖類中m_Image指向的內(nèi)存區(qū)域。12. 位圖顯示如下圖:實驗總結(jié)通過本實驗進一步熟悉了VC+6.0集成開發(fā)環(huán)境;初步學(xué)習(xí)了VC6.0下bmp位圖的讀取與顯示;實驗二 圖像基本運算點運算實驗?zāi)康膶W(xué)習(xí)位圖的基本運算的基本原理;學(xué)習(xí)掌握實現(xiàn)位圖各類點運算的基本算法。實驗原理點運算的定義設(shè)輸入圖像的灰度為f(x,y),輸出圖像的灰度為g(x,y),則點運算可以表示為:g(x,y)=Tf(x,y),即灰度變換函數(shù)。其中T 是對f在(x,y)點值的一種數(shù)學(xué)運算,即點運算是一種像素的逐點運算,是灰度到
28、灰度的映射過程,故稱T 為灰度變換函數(shù)。點運算可以改變圖像數(shù)據(jù)所占據(jù)的灰度值范圍,從而改善圖像顯示效果。點運算的分類點運算可分為線性點運算,分段線性點運算,非線性點運算線性點運算線性點運算的灰度變換函數(shù)形式可以采用線性方程描述,即s=ar+b。0a0,輸出灰度壓縮;a=1,b=0,輸出灰度不變;a1,b=0輸出灰度擴展整體變亮;0abiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a=80;float b=50;float s(0);for(i=0;ih;i+)fo
29、r(j=0;jw;j+)s=a*m_Imagei*w+j+b;if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFenduanxianxing() /分段線性/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;w=m_DibHead-biWidth;h=m_Dib
30、Head-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a(48),b(180);float b1(20);float c(25),d(190);float s(0);for(i=0;ih;i+)for(j=0;jw;j+)if(0m_Imagei*w+j&m_Imagei*w+ja)s=(c/a)*m_Imagei*w+j+b1;if(am_Imagei*w+j&m_Imagei*w+jb)s=(d-c)/(b-a)*(m_Imagei*w+j-a)+c;if(bm_Imagei*w+j&m_Ima
31、gei*w+j255)s=(255-d)/(255-b)*(m_Imagei*w+j-b)+d;if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnDuishu() /對數(shù)運算/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;w=m_DibHead-biWidth
32、;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float c=100;double s(0);for(i=0;ih;i+)for(j=0;jw;j+)s=c*log10(m_Imagei*w+j+1);if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnZhishu() /指數(shù)運算/ TODO: Add your command h
33、andler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float c=80;float r=1.5;float b=50;double s(0);for(i=0;ih;i+)for(j=0;jw;j+)s=c*pow(m_Imagei*w+j,r);if(s255)s=255;fi*w+
34、j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFanse() /反色/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0
35、,w*h);for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float a=127;for(i=0;ih;i+)for(j=0;jw;j+)if(0m_Imagei*w+j&m_Imagei*w+ja)m_Imagei*w+j=0;if(am_Imagei*w+j&m_Imagei*w+jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;m
36、emcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFi
37、leOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0
38、;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigne
39、d charw*h;memset(f,0,w*h);int a=h/4,b=w/4;for(i=0;ih;i+)for(j=b;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);int a=h/4,b=w/4;for(i=0;ih;i+)for(j=0;jbiWidth;h = m_DibHead-biHeight;unsigned char *f = new unsigned charw*h;memset(f, 0, w*h);float temp(0);float PI =
40、 3.1415;float beta = 30;float a = 1.5;for (i = 0; i h; i+)for (j = 0; j = w*h | y1*w + x1 = w*h | (y1 + 1)*w + x1 = 0 | y1*w + (x1+1) = w*h)continue;fy1*w + x1 = temp;f(y1 + 1)*w + x1 = fy1*w + x1;fy1*w + (x1+1) = fy1*w + x1;memcpy(m_Image, f, w*h);Invalidate();deletef;void CZhangjianView:OnButtonfa
41、ngda() /圖像放大/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;m_x=int(1.2*m_x);Invalidate();void CZhangjianView:OnButtonsuoxiao() /圖像縮小/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;m_x=int(0.8*m_x);Invalida
42、te();縮小和放大圖像是很常用的,每次都用菜單項調(diào)節(jié)很繁瑣,此時可以設(shè)置放大和縮小工具更方便的調(diào)節(jié)。在Resources面板中,找到Toolbar,雙擊IDR_MAINFRAME,打開工具編輯器,繪出一個“+”和一個“-”,并設(shè)分別置其ID為“放大”和“縮小”的ID,移動位置;本過程,打開一幅圖像,各種幾何運算結(jié)果如下:原圖像:圖像平移:圖像旋轉(zhuǎn):圖像鏡像(水平):圖像縮放(縮小):實驗總結(jié)通過本實驗更深入的學(xué)習(xí)了位圖的基本運算;本實驗學(xué)會了位圖幾何運算的基本實現(xiàn)方法。實驗五 直方圖的繪制及其均衡實驗?zāi)康膶W(xué)習(xí)位圖直方圖及其均衡的基本原理;學(xué)習(xí)位圖直方圖繪制的基本原理;學(xué)習(xí)位圖直方圖均衡的算法
43、原理。實驗原理直方圖反映圖像中灰度級與灰度級出現(xiàn)頻率的關(guān)系的圖形。直方圖的離散表示:nk是圖像中灰度級為rk的像素個數(shù);rk 是第k個灰度級,k = 0,1,2,L-1;N是圖像總的像素數(shù)。直方圖繪制(1)統(tǒng)計直方圖數(shù)據(jù);(2)求直方圖的概率;(3)繪圖面板上繪制直方圖。直方圖均衡希望一幅圖像的像素占有全部可能的灰度級且分布均勻,能夠具有高對比度使用的方法是灰度級變換:s = T(r)基本思想是把原始圖的直方圖變換為均勻分布的形式,這樣就增加了像素灰度值的動態(tài)范圍,從而達到增強圖像整體對比度的效果。算法思想通過函數(shù)變換,對在圖像中像素個數(shù)多的灰度級進行展寬,而對像素個數(shù)少的灰度級進行縮減。從而
44、達到清晰圖像的目的。設(shè)f、g分別為原圖象和處理后的圖像。(1)求出原圖f的灰度直方圖,設(shè)為h。h為一個256維的向量(2)計算每個灰度級的像素個數(shù)在整個圖像中所占的百分比。hs(i)=h(i)/Nf (i=0,1,255)(3)計算圖像各灰度級的累計分布hp。 (4)求出新圖像g的灰度值。 實驗內(nèi)容在實驗四的基礎(chǔ)上編程實現(xiàn)位圖直方圖及其均衡的實現(xiàn)。實驗步驟在Resources面板中,找到Menu,雙擊其下IDR_MAINFRAME,打開菜單編輯器,在主菜單中添加一菜單項“直方圖”,再添加“直方圖”,“直方圖均衡”子菜單,并設(shè)置相應(yīng)不同的ID號。打開類向?qū)?,分別對代數(shù)運算和邏輯運算每一個子菜單建
45、立消息響應(yīng)函數(shù)。對每一個消息響應(yīng)函數(shù)添加對應(yīng)代碼,實現(xiàn)相應(yīng)的功能,具體如下:void CZhangjianView:OnZhifangtu() /直方圖/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;int w,h;w=m_DibHead-biWidth;h=m_DibHead-biHeight;int i,j;float h0256,h1256;float fmax=0.0;for(i=0;i256;i+)h0i=0;for(i=0;ih;i+)for
46、(j=0;jw;j+)h0*(m_Image+i*w+j)+;for(i=0;i256;i+)h1i=h0i*1.0/w/h;if(fmaxh1i)fmax=h1i;/CClientDC dc(this);/for(i=0;ibiBitCount!=8)MessageBox(當(dāng)前版本僅支持256色位圖的操作!,系統(tǒng)提示!,MB_ICONINFORMATION|MB_OK);return;long w,h;long i,j;w=m_DibHead-biWidth;h=m_DibHead-biHeight;long h0256;for(i=0;i256;i+)h0i=0;for(i=0;ih;i+
47、)for(j=0;jw;j+)h0*(m_Image+i*w+j)+;/各灰度級像素數(shù)目統(tǒng)計double hs256;for(i=0;i256;i+)hsi=0;for(i=0;i256;i+)hsi=h0i*1.0/w/h;/個灰度級像素數(shù)目在整個圖像中所占百分比double hp256;for(i=0;i256;i+)hpi=0;for(i=0;i256;i+)for(j=0;ji;j+)hpi=hpi+hsj;/各灰度級在整幅圖像的累計分布for(i=0;ih;i+)for(j=0;jw;j+)*(m_Image+i*w+j)=hp*(m_Image+i*w+j)*255;/新圖像的灰度
48、值Invalidate();在Resources面板中,找到Dialog,插入一個對話框“繪直方圖”建立一個相應(yīng)的對話框類“ZFT”,并添加成員變量:float * data,int count,float m_fmax;在上述實驗代碼前面包含#include ZFT.h。完成基本過程,得實驗結(jié)果如下:原圖像:直方圖:直方圖均衡圖像:均衡后直方圖:實驗總結(jié)通過本實驗初步學(xué)習(xí)了直方圖及其均衡;學(xué)習(xí)了繪制直方圖的基本算法原理;學(xué)習(xí)力直方圖均衡的基本算法原理。實驗六 圖像的平滑與銳化實驗?zāi)康恼莆請D像平滑(空間濾波)的算法以及實現(xiàn);掌握握圖像銳化的算法以及實現(xiàn)。實驗原理空間濾波線性濾波器:鄰域平均(均
49、值濾波器)所謂的均值濾波是指在圖像上對待處理的像素給一個模板,該模板包括了其周圍的鄰近像素。將模板中的全體像素的均值來替代原來的像素值的方法中值濾波(統(tǒng)計排序濾波)雖然均值濾波器對噪聲有抑制作用,但同時會使圖像變得模糊。為了改善這一狀況,必須尋找新的濾波器。中值濾波就是一種有效的方法。因為噪聲的出現(xiàn),使該點像素比周圍的像素亮(暗)許多, 給出濾波用的模板,對模板中的像素值由小到大排列,最終待處理像素的灰度取這個模板中的灰度的中值。前面的處理結(jié)果可知,經(jīng)過平滑濾波處理之后,圖像會變得模糊。分析原因,在圖像上的景物之所以可以辨認清楚是因為目標(biāo)物之間存在邊界。目前已經(jīng)提出了許多保留邊沿細節(jié)的局部平滑
50、算法,主要有K個鄰點平均法,最大均勻性平滑等.空間域低通濾波多幅圖像平均圖像銳化處理目的:增強圖像邊緣及灰度跳變部分微分法銳化處理梯度法:兩個特點:(1)方向為最大增加率的方向(2)幅度為:交叉微分算法(Roberts梯度算法)Sobel算子由于引入平均,對圖像中隨機噪聲有一定的平滑作用邊緣兩側(cè)元素得到加強,故邊緣顯得粗而亮拉普拉斯運算如果圖像的模糊是由擴散現(xiàn)象引起的,則銳化后為:實驗內(nèi)容在前實驗的基礎(chǔ)上編程實現(xiàn)圖像的平滑與銳化。實驗步驟打開前一個實驗工程,在Resources面板中,找到Menu,雙擊其下IDR_MAINFRAME,打開菜單編輯器,在“圖像增強”菜單下添加“領(lǐng)域平均“、“中值
51、濾波”、 “拉普拉斯”、“Sobel算子”子菜單,并設(shè)置相應(yīng)ID。打開類向?qū)?,分別對每一個子菜單建立消息響應(yīng)函數(shù)。對每一個消息響應(yīng)函數(shù)添加對應(yīng)代碼,實現(xiàn)相應(yīng)的功能,具體如下:void CZhangjianView:OnLingyupingjun() /領(lǐng)域平均/ TODO: Add your command handler code hereunsigned char *lpsrc,*lpdst;long iWidth,iHeight;long i,j;int iTempWidth,iTempHeight;int iCenterx,iCentery;/float foef;unsigned c
52、har bArr55;for(i=0;i5;i+)for(j=0;jbiWidth;iHeight=m_DibHead-biHeight; if(m_DibHead-biBitCount!=8) MessageBox(當(dāng)前版本僅支持256色位圖的操作!,系統(tǒng)提示!,MB_ICONINFORMATION|MB_OK); return; unsigned char *lpNewBits;/lpNewBits=(unsigned char*)new unsigned char(iWidth*iHeight);/if(lpNewBits=NULL)/return; HLOCAL hNewBits;hN
53、ewBits=LocalAlloc(LHND,iWidth*iHeight);if(hNewBits=NULL)MessageBox(分配內(nèi)存失??!,提示!,MB_ICONINFORMATION|MB_OK);return;lpNewBits=(unsigned char*)LocalLock(hNewBits);for(i=iCentery;iiHeight-iTempHeight+iCentery+1;i+)for(j=iCentery;jiWidth-iTempWidth+iCenterx+1;j+)lpdst=lpNewBits+i*iWidth+j; int temp;int k,l
54、;for(k=0;kiTempHeight;k+)for(l=0;l255) temp=255; *lpdst=(unsigned char)temp;:memcpy(m_Image,lpNewBits,iWidth*iHeight);Invalidate();LocalUnlock(hNewBits);LocalFree(hNewBits);void CZhangjianView:OnZhongzhilvbo() /中值濾波/ TODO: Add your command handler code herelong w,h; long i,j; w=m_DibHead-biWidth; h=
55、m_DibHead-biHeight; unsigned char hap30=0; int k,l; unsigned char *lpsrc=new unsigned charw*h; memcpy(lpsrc,m_Image,w*h); for(i=2;ih-2;i+) for(j=2;jw-2;j+) for(k=-2;k=2;k+) for(l=-2;lbiWidth;h=m_DibHead-biHeight;int temp;unsigned char *fxy=new unsigned charw*h;memcpy(fxy,m_Image,w*h);for(i=1;ih-1;i+
56、)for(j=1;j255)temp=255;m_Imagei*w+j=temp;Invalidate();delete fxy;void CZhangjianView:OnLapulasi() /拉普拉斯運算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(當(dāng)前無圖像,請打開圖像!,提示);return;long i,j;long w,h;w=m_DibHead-biWidth;h=m_DibHead-biHeight;int *f=new intw*h;memset(f,0,w*h*sizeof(i
57、nt);unsigned char*g=NULL;int *f1=new intw*h;memset(f1,0,w*h*sizeof(int);int imin=10000;int imax=-10000;for(i=1;ih-1;i+)for(j=1;jw-1;j+)g=m_Image+i*w+j;fi*w+j=*(g+w)+*(g-w)+*(g+1)+*(g-1)-5*(*g);if(fi*w+jimax)imax=fi*w+j;for(i=0;ih;i+)for(j=0;jHSI:其中:HSI - RGB若設(shè)H,S,I的值在0,1之間,R,G,B的值也在0,1之間,則從HSI到RGB的轉(zhuǎn)
58、換公式為:當(dāng)H在0,2/3之間當(dāng)H在2/3,4/3之間當(dāng)H在4/3,2之間三、實驗內(nèi)容在前實驗的基礎(chǔ)上編程實現(xiàn)一幅灰度圖像的偽彩色處理;在前實驗的基礎(chǔ)上編程實現(xiàn)彩色圖像的顯示及RGB和HIS的轉(zhuǎn)換。四、實驗步驟1.打開前一個實驗工程,在Resources面板中,找到Menu,雙擊其下IDR_MAINFRAME,打開菜單編輯器,在“圖像增強”菜單下添加“偽彩色“子菜單,并設(shè)置相應(yīng)ID。2.打開類向?qū)В謩e對每一個子菜單建立消息響應(yīng)函數(shù)。對消息響應(yīng)函數(shù)添加對應(yīng)代碼,實現(xiàn)相應(yīng)的功能,具體如下:void CZhangjianView:OnWeicaise() /偽彩色處理/ TODO: Add your command handler code here long w,h;long i,j;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char temp;unsigned char *r=new unsigned charw*h;unsigned char *g=new unsigned charw
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《食用菌栽培技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025湖南省安全員-C證考試題庫
- 2025山東省安全員B證考試題庫附答案
- 2025年湖北省建筑安全員知識題庫
- 【語文課件】《我的信念》課件
- 《壺口瀑布》課件
- 單位管理制度展示選集【人員管理篇】
- 單位管理制度展示合集【職員管理】十篇
- 電力天然氣周報:多省2025年長協(xié)電價落地11月我國天然氣表觀消費量同比下降0.3
- 2024年上海市縣鄉(xiāng)教師選調(diào)考試《教育學(xué)》真題匯編帶解析含完整答案(各地真題)
- 2024年國家公務(wù)員考試公共法律知識考試題庫及答案(共530題)
- 2024年秋一年級上冊4日月山川 公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 人教版英語2024年初中中考考綱單詞表(整合版)
- 《安全記心中平安伴我行》課件2024年五一假期安全教育主題班會
- 形象權(quán)授權(quán)協(xié)議
- 高中數(shù)學(xué)人教A版(2019)必修第一冊第二冊知識點概要填空
- 2023-2024學(xué)年山東省聊城市陽谷縣八年級(上)期末英語試卷
- 2024-2030全球與中國吹灌封一體化產(chǎn)品市場現(xiàn)狀及未來發(fā)展趨勢
- 2024年保安員考試題庫及參考答案(鞏固)
- 安全隱患規(guī)范依據(jù)查詢手冊22大類12萬字
- 大中小學(xué)心理健康教育一體化共同體建設(shè)研究課題評審書
評論
0/150
提交評論