1 / 37

数字图像处理课程 综合实习

数字图像处理课程 综合实习. 2011 年 5 月. 一、数字图像基本概念. 1 、数字图像 连续物理图像采样和量化为离散数值矩阵,矩阵中每个元素表示相应位置像素亮度,称之为数字图像。 描述数字图像,就要用到像素行数 (Height) 、像素列数 (Width) ,每行存储字节数 (LineBytes) ,每个像素 (i,j) 亮度值 (pData[(Height-i-1)*LineBYtes+j]) 。 数字图像处理,就是对 Height 行、 Width 列像素亮度进行运算,有空间域的点运算、邻域运算以及频率域运算等。.

lirit
Download Presentation

数字图像处理课程 综合实习

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数字图像处理课程综合实习 2011年5月

  2. 一、数字图像基本概念 • 1、数字图像 • 连续物理图像采样和量化为离散数值矩阵,矩阵中每个元素表示相应位置像素亮度,称之为数字图像。 • 描述数字图像,就要用到像素行数(Height)、像素列数(Width),每行存储字节数(LineBytes),每个像素(i,j)亮度值(pData[(Height-i-1)*LineBYtes+j])。 • 数字图像处理,就是对Height行、 Width列像素亮度进行运算,有空间域的点运算、邻域运算以及频率域运算等。

  3. 一、数字图像基本概念 • 2、像素颜色 自然界中所有颜色都可由红、绿、蓝(RGB)三原色组合。在数字图像中,R、G、B量化为0到255共256级,像素取不同的RGB值,表示不同的颜色。 1)单色图像 单色图像只有黑白两色,像素值1位,取0或1。 2)256色图像 256色图像有256种颜色,像素值8位,取0-255。

  4. 一、数字图像基本概念 • 2、像素颜色 • 3)真彩色图像 • 真彩色图像有256 X 256 X256种颜色,像素值24位,3个字节分别表示B、G、R分量值。 • 4)灰度图像 • 灰度图像有256种灰度级,像素值8位,取 0-255,每一灰度级B、G、R分量相等。 • 8位位图是比较广泛的图像表示方法,当需要实时快速处理图像时,利用8位位图近似处理。

  5. 一、数字图像基本概念 • 3、图像格式 • 数字图像中,像素值矩阵用二维数组表示,像素值按不同方式存储,图像格式就不同。图像数据存成文件就得到图像文件,图像格式不同,图像文件扩展名就不同。 • 如:位图格式,文件扩展名为bmp; • RAW格式,文件扩展名为raw。 • 3.1 RAW格式 • 像素值根据行、列号,按从上到下、从左到右顺序,依次存储到.raw文件。.raw文件只含像素值,不含图像信息,不能直接获得图像高度和宽度,需根据.raw文件大小(Length)计算Height和Width或给定。

  6. 一、数字图像基本概念 • 3、图像格式 • 3.1 RAW格式 • 从*.raw文件中,读取像素数据到hRaw • CFile FileRaw; • FileRaw.Open(“*.raw”,CFile::modeRead); • LONG Length=FileRaw.GetLength(); • HLOCAL hRaw=LocalAlloc(LHND,Length); • LPBYTE pRaw=(LPBYTE)LocalLock(hRaw); • FileRaw.ReadHuge(pRaw,Length);

  7. 一、数字图像基本概念 • 3、 图像格式 • 3.2 位图格式 • 3.2.1 DDB—与设备相关位图 • Windows.h中结构体BITMAP定义了DDB高度、宽度、像素值,但没有颜色表,显示时以系统调色板进行颜色映射,是一种内部位图格式,不存储成文件。 • 3.2.2 DIB—与设备无关位图 • DIB定义了颜色表,显示时以颜色表创建调色板进行颜色映射,是一种外部位图格式,存储成.bmp文件,显示位图固有颜色。

  8. 一、数字图像基本概念 • 4、BMP文件 • BMP文件包含: • 文件头BITMAPFILEHEADER • 信息头BITMAPINFOHEADER • 颜色表bmiColors[i] • 图像数据pData[(Height-i-1)*LineBytes+j]

  9. 一、数字图像基本概念 • 4.1 位图文件头 typedef struct tagBITMAPFILEHEADER { WORD bfType; //必须是0x424D,即字符串“BM” DWORD bfSize; //文件大小 WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; //数据区相对文件头偏移字节数 }BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER; • 文件头共14字节

  10. 一、数字图像基本概念 • 4.2 位图信息头 typedef struct tagBITMAPINFOHEADER { DWORD bfSize; //本结构字节数,为40 LONG biWidth; //图像宽度,以像素为单位 LONG biHeight; //图像高度,以像素为单位 WORD biPlanes; //必须是1 WORD biBitCount; //像素值位数 DWORD biCompression; //位图是否压缩,BI_RGB 、BI_RLE4、BI_RLE8 DWORD biSizeImage; // 数据区字节数:LineBytes*Height LONG biXPelsPerMeter;//目标设备水平分辨率 LONG biYPersPerMeter;//目标设备垂直分辨率 DWORD biClrUsed; //实际所用颜色数,若为0,颜色数为2biBitCount次 DWORD biClrImportant; //重要颜色数 }BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER;

  11. 一、数字图像基本概念 • 4.3 颜色表 • 颜色表:含有biClrUsed个RGBQUAD结构体,定义biClrUsed种颜色。 • 当biBitCount=8时, biClrUsed=256; • 当biBitCount=24时,没有颜色表 • RGBQUAD结构体定义颜色 • typedef struct tagRGBQUAD • { • BYTE rgbBlue; //蓝色亮度,取值0-255 • BYTE rgbGreen; //绿色亮度,取值0-255 • BYTE rgbRed; //红色亮度,取值0-255 • BYTE rgbReserved;//必须为0 • }RGBQUAD;

  12. 一、数字图像基本概念 • 4.4 数据区 • 像素值按行、列号,从下到上,从左到右存储在数据区,每行字节数是4字节的倍数,不足位补0。 • LineBytes=(Width*biBitCount+31)/32*4 • biBitCount=1,1个像素1位,8个像素1字节,颜色数为2,颜色表表项数为2,像素值为颜色表索引值。 • biBitCount=4,1个像素4位,2个像素1字节,颜色数为16,颜色表表项数为16,像素值为颜色表索引值。 • biBitCount=8,1个像素8位,1个像素1字节,颜色数为256,颜色表表项数为256,像素值为颜色表索引值。 • biBitCount=24,1个像素3字节,存储蓝、绿、红颜色值,无颜色表,像素值为真实颜色值。

  13. 一、数字图像基本概念 • 5、调色板 • 显示硬件根据系统调色板,进行颜色映射,显示像素颜色。系统调色板只前20种颜色固定不变,不能正确显示位图所有颜色。 • 1)根据位图颜色表,创建位图逻辑调色板结构 LPLOGPALETTE pLogPal; pLogPal=(LPLOGPALETTE)GlobalAlloc(GHND,2*sizeof(WORD)+ m_numberOfColors*sizeof(PALETTEENTRY)); • pLogPal->palVersion=0x300; • pLogPal->palNumEntries=m_numberOfColors; • BITMAPINFO * PBitmapInfo=(BITMAPINFO *)m_pBitmapInfoHeader; • for(int i=0;i<m_numberOfColors;i++) • { • pLogPal->palPalEntry[i].peRed=PBitmapInfo->bmiColors[i].rgbRed; • pLogPal->palPalEntry[i].peGreen=PBitmapInfo->bmiColors[i].rgbGreen; • pLogPal->palPalEntry[i].peBlue=PBitmapInfo->bmiColors[i].rgbBlue; • pLogPal->palPalEntry[i].peFlags=0; • }

  14. 一、数字图像基本概念 • 5、调色板 • 2)创建逻辑调色板,返回逻辑调色板句柄 • HPALETTE hPalette=::CreatePalette(pLogPal); • 3)选择逻辑调色板到设备上下文 • CDC *pDC=GetDC(); • HDC hDC=pDC->GetSafeHdc(); • ::SelectPalette(hDC,hPalette,true); • 4)设备上下文的逻辑调色板实现为系统调色板 • ::RealizePalette(hDC);

  15. 一、数字图像基本概念 6、显示函数 1)int WINAPIStretchDIBits(HDChdc,int XDest,int YDest, int nDestWidth,int nDestHeight,int XSrc,int YSrc,int nSrcWidth, int nSrcHeight, CONST VOID *lpvBits,CONST BITMAPINFO *lpbmi,UINT iUsage,DWORD dwRop) HDC hdc:设备上下文句柄 int Xdest:指定绘图区域的左上角x坐标(逻辑单位) int Ydest:指定绘图区域的左上角y坐标(逻辑单位) int nDestWidth:指定DIB的宽度(逻辑单位) int nDestHeight:指定DIB的高度(逻辑单位) int XSrc:指定原位图要绘制区域的左上角x坐标(逻辑单位) int Ysrc:指定原位图要绘制区域的左上角y坐标(逻辑单位)

  16. 一、数字图像基本概念 • 6、显示函数 • int nSrcWidth:指定要复制原图像矩形区域的宽度(逻辑单位) int nSrcHeight:指定要复制原图像矩形区域的高度(逻辑单位) lpBits:指向DIB图像数据区的指针 lpBitsInfo:指向BITMAPINFO结构的指针 iUsage:指定BITMAPINFO结构中的bmiColors参数代表 真实的RGB值还是调色板中的索引值,它有两种可能的取值: DIB_PAL_COLORS:代表索引值 DIB_RGB_COLORS:代表真实的RGB值 dwRo:指定绘制方式;常用的值为SRCCOPY,表示将原位图复制到 目标位图该函数如果调用成功,返回绘制的行数;如果调用 失败,则返回GDI_ERROR。

  17. 一、数字图像基本概念 • 6、显示函数 1)int SetDIBitsToDevice(HDC hdc,int XDest,int YDest,DWORD dwWidth,DWORD dwHeight,int XSrc,int YSrc,UINT uStartScan UINT cScanLines,CONST VOID *lpBits,CONST BITMAPINFO *lpbmi,UINT fuColorUse) 该函数可以直接在显示器或打印机上显示DIB: HDC hdc:设备上下文句柄。它可以是CDC对象的公共成员 变量m_hDC。 int Xdest:指定绘图区域的左上角x坐标(逻辑单位) int Ydest:指定绘图区域的左上角y坐标(逻辑单位) DWORD dwWidth:指定DIB的宽度(逻辑单位) DWORD dwHeight:指定DIB的高度(逻辑单位)

  18. 一、数字图像基本概念 6、显示函数 int Xsrc:指定原绘图要绘制区域的左上角x坐标(逻辑单位) int Ysrc:指定原绘图要绘制区域的左上角y坐标(逻辑单位) UINT uStartScan:指定DIB扫描的起始行 UINT cScanLines:指定DIB扫描的行数(即DIB的高度) CONST VOID* lpBits:指向DIB图像数据的指针 lpbmi:指向BITMAPINFO结构的指针 fuColorUse:指定BITMAPINFO结构中的bmiColors参数代表 真实的RGB值还是调色板中的索引值,它有两种可能的取值: DIB_PAL_COLORS:代表索引值 DIB_RGB_COLORS:代表真实的RGB值

  19. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 是对位图常用功能的一个封装类其定义如下: class CBmpFile { public: CBmpFile(); virtual ~CBmpFile(); BOOL CreateBmp(int cols,int rows,int pixelPytes); BOOL Load4File( LPCSTR lpstrPathName ); BOOL Save2File( LPCSTR lpstrPathName ); void Draw2DC( HDC hDC,int x,int y ); public: BYTE* m_pImgDat; int m_Cols,m_Rows,m_PxlBytes; BYTE* m_pBmpInfo; };

  20. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 将位图的描述信息(包括:位数据矩阵、行数、列数、颜色数等)保存的属性变量中,详细定义: • BYTE* m_pImgDat:位图的位数据矩阵,按行存放。 • int m_Cols,m_Rows,m_PxlBytes:位图的 列数(宽)、行数(宽)、颜色深度(灰度或者是RGB彩色)。 • BYTE* m_pBmpInfo:显示用的内部临时变量,给 WindwosAPI StretchDIBits 用。

  21. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。 各功能的调用函数分别如下: 1、新建位图 CreateBmp(int cols,int rows,int pixelPytes); 参数解释: int cols: 位图的列数,也即位图的宽。 int rows: 位图的行数,也即位图的高。 int pixelBytes:位图每位所用字节数,也是位图的颜色深度,值1为256色(灰度),值3为RGB彩色。

  22. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。 各功能的调用函数分别如下: 2、读入位图 Load4File( LPCSTR lpstrPathName ); 参数解释: LPCSTR lpstrPathName: 位图文件的路径

  23. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。 各功能的调用函数分别如下: 3、保存位图 Save2File( LPCSTR lpstrPathName ); 参数解释: LPCSTR lpstrPathName: 位图文件的路径

  24. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。 各功能的调用函数分别如下: 4、显示位图 Draw2DC( HDC hDC,int x,int y ); 参数解释: HDC hDC:显示位图窗口的DC,即 OnDraw( CDC *pDC) 中 pDC的Handle值( pDC->m_hDC ) Int x:位图在DC中的起点X(设备坐标值)左为0 Int y:位图在DC中的起点Y(设备坐标值)上为0

  25. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。 各功能的调用函数分别如下: 5、 修改位图的位颜色 设对象定义位:CBmpFile bmpFile; a)灰度影像 bmpFile[行号][列号]= 新灰度 b)彩色影像 bmpFile.m_pImgDat[(行号×m_Cols+列号)×3+0]=新R bmpFile.m_pImgDat[(行号×m_Cols+列号)×3+0]=新G bmpFile.m_pImgDat[(行号×m_Cols+列号)×3+0]=新B

  26. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 应用方法: 1、在 CXXDocument 定义中加入

  27. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 应用方法: 2、在 CXXDocument.cpp 中加入

  28. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 应用方法: 3、在 CXXView.cpp 中加入

  29. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 CBmpFile 应用方法: 4、在 CXXView.cpp 中加入

  30. 一、数字图像基本概念 7、位图的使用 - CBmpFile类 特别注意: CBmpFile 定义的位图不能直接通过修改属性 m_Cols,m_Rows,m_pixelBytes来修改位图的大小。 如果要修改位图大小,需要重新定义的一个 CBmpFile ,使用 CreateBmp 来创建新位图信息 最后可以使用 “=”的方式将新位图赋值到原位图。 或者直接使用 CreateBmp 来修改,注意使用 CreateBmp 的时候,原始的数据就清空了。

  31. 二、实习内容 • 1、必做部分 • 1)将RAW格式图像转换成BMP格式图像 • 2)图像点运算:灰度线性变换 • 3)图像局部处理:高通滤波和低通滤波 • 2、选做部分(必选一) • 1)图像几何变换:缩放、平移、旋转、转置 • 2)图像边缘提取:中值滤波、边缘检测 • 3)影像融合 • 4)基于灰度模板匹配 • 5)基于轮廓特征匹配

  32. 三、VC 数字图像处理编程 • 1、VC编程基本知识 • 1)用MFC AppWizard创建以“学号姓名”命名 • 的项目: • 选择Multiple Docunment; • 选择视图类基类CScrollView; • 2)仔细阅读DIBLOOK文件夹中DIBAPI.CPP, • DIBVIEW.CPP,DIBDOC.CPP,将DIBAPI.CPP、 • DIBAPI.H文件加到新建项目中,并改写视 • 图类、文档类,以能显示位图。 • 3)添加菜单命令并建立菜单命令处理函数 • 4)编写功能函数

  33. 三、 VC 数字图像处理编程 • 2、 RAW格式转换成BMP格式 • 1)新建位图; • CDib * pDb=new CDib(); • 2)建立位图文件头结构体,为各成员赋值; • pDb->bitmapFileHeader.bfType=0x4d42; • 3)建立位图信息头结构体,为各成员赋值; pDb->m_pBitmapInfoHeader->biHeight=Height; 4)建立颜色表,并赋值 pDb->m_pBitmapInfo->bmiColors[i].rgbBlue=i; 5)将RAW数据区像素值存储到位图数据区

  34. 三、 VC 数字图像处理编程 • 2、 RAW格式转换成BMP格式 • for(i=0;i<Height;i++) • { • pRawEnd=pRawEnd-Width; • pPixel=pRawEnd; • for(j=0;j<Width;j++) • { • (*pData)=(*pPixel); • pPixel++; pData++; } • for(k=Width;k<LineBytes;k++) • { • (*pData)=0; • pData++; }幻灯片 31 • }

  35. 三、 VC 数字图像处理编程 • 3、图像点运算:灰度线性变换 • 对数据区每个像素值进行线性运算 pData[Height*i+j]=(A*pData[Height*i+j] +B);

  36. 三、 VC 数字图像处理编程 • 4、图像局部处理:高通滤波和低通滤波 • 图像局部处理是灰度卷积运算 • for(i=TempCenY;i<(Height-TempHeight+TempCenY+1);i++) • { • for(j=TempCenX;j<(Width-TempWidth+TempCenX+1);j++) • { • pDst=pData+(Height-i-1)*LineBytes+j; • for(k=0;k<TempHeight;k++) • { • for(l=0;l<TempWidth;l++) • { • pSrc=(pDb->m_pData)+(Height-i+(TempCenY-k)- • 1)*LineBytes+(j-(TempCenX-l)); • Result=Result+(*pSrc)*TempSuzu[k*TempWidth+l]; • } } } }

  37. 四、成果形式与评分标准 • 1、程序设计(50%); • 2、实习报告(30%); • 3、平时考勤(20%)。

More Related