数字图像处理课程
This presentation is the property of its rightful owner.
Sponsored Links
1 / 37

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


  • 106 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4697522

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

2011年5月


4697522

一、数字图像基本概念

  • 1、数字图像

  • 连续物理图像采样和量化为离散数值矩阵,矩阵中每个元素表示相应位置像素亮度,称之为数字图像。

  • 描述数字图像,就要用到像素行数(Height)、像素列数(Width),每行存储字节数(LineBytes),每个像素(i,j)亮度值(pData[(Height-i-1)*LineBYtes+j])。

  • 数字图像处理,就是对Height行、 Width列像素亮度进行运算,有空间域的点运算、邻域运算以及频率域运算等。


4697522

一、数字图像基本概念

  • 2、像素颜色

    自然界中所有颜色都可由红、绿、蓝(RGB)三原色组合。在数字图像中,R、G、B量化为0到255共256级,像素取不同的RGB值,表示不同的颜色。

    1)单色图像

    单色图像只有黑白两色,像素值1位,取0或1。

    2)256色图像

    256色图像有256种颜色,像素值8位,取0-255。


4697522

一、数字图像基本概念

  • 2、像素颜色

  • 3)真彩色图像

  • 真彩色图像有256 X 256 X256种颜色,像素值24位,3个字节分别表示B、G、R分量值。

  • 4)灰度图像

  • 灰度图像有256种灰度级,像素值8位,取 0-255,每一灰度级B、G、R分量相等。

  • 8位位图是比较广泛的图像表示方法,当需要实时快速处理图像时,利用8位位图近似处理。


4697522

一、数字图像基本概念

  • 3、图像格式

  • 数字图像中,像素值矩阵用二维数组表示,像素值按不同方式存储,图像格式就不同。图像数据存成文件就得到图像文件,图像格式不同,图像文件扩展名就不同。

  • 如:位图格式,文件扩展名为bmp;

  • RAW格式,文件扩展名为raw。

  • 3.1 RAW格式

  • 像素值根据行、列号,按从上到下、从左到右顺序,依次存储到.raw文件。.raw文件只含像素值,不含图像信息,不能直接获得图像高度和宽度,需根据.raw文件大小(Length)计算Height和Width或给定。


4697522

一、数字图像基本概念

  • 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);


4697522

一、数字图像基本概念

  • 3、 图像格式

  • 3.2 位图格式

  • 3.2.1 DDB—与设备相关位图

  • Windows.h中结构体BITMAP定义了DDB高度、宽度、像素值,但没有颜色表,显示时以系统调色板进行颜色映射,是一种内部位图格式,不存储成文件。

  • 3.2.2 DIB—与设备无关位图

  • DIB定义了颜色表,显示时以颜色表创建调色板进行颜色映射,是一种外部位图格式,存储成.bmp文件,显示位图固有颜色。


4697522

一、数字图像基本概念

  • 4、BMP文件

  • BMP文件包含:

  • 文件头BITMAPFILEHEADER

  • 信息头BITMAPINFOHEADER

  • 颜色表bmiColors[i]

  • 图像数据pData[(Height-i-1)*LineBytes+j]


4697522

一、数字图像基本概念

  • 4.1 位图文件头

    typedef struct tagBITMAPFILEHEADER

    {

    WORD bfType; //必须是0x424D,即字符串“BM”

    DWORD bfSize; //文件大小

    WORD bfReserved1;

    WORD bfReserved2;

    DWORD bfOffBits; //数据区相对文件头偏移字节数

    }BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER;

  • 文件头共14字节


4697522

一、数字图像基本概念

  • 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;


4697522

一、数字图像基本概念

  • 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;


4697522

一、数字图像基本概念

  • 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字节,存储蓝、绿、红颜色值,无颜色表,像素值为真实颜色值。


4697522

一、数字图像基本概念

  • 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;

  • }


4697522

一、数字图像基本概念

  • 5、调色板

  • 2)创建逻辑调色板,返回逻辑调色板句柄

  • HPALETTE hPalette=::CreatePalette(pLogPal);

  • 3)选择逻辑调色板到设备上下文

  • CDC *pDC=GetDC();

  • HDC hDC=pDC->GetSafeHdc();

  • ::SelectPalette(hDC,hPalette,true);

  • 4)设备上下文的逻辑调色板实现为系统调色板

  • ::RealizePalette(hDC);


4697522

一、数字图像基本概念

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坐标(逻辑单位)


4697522

一、数字图像基本概念

  • 6、显示函数

  • int nSrcWidth:指定要复制原图像矩形区域的宽度(逻辑单位)

    int nSrcHeight:指定要复制原图像矩形区域的高度(逻辑单位)

    lpBits:指向DIB图像数据区的指针

    lpBitsInfo:指向BITMAPINFO结构的指针

    iUsage:指定BITMAPINFO结构中的bmiColors参数代表

    真实的RGB值还是调色板中的索引值,它有两种可能的取值:

    DIB_PAL_COLORS:代表索引值

    DIB_RGB_COLORS:代表真实的RGB值

    dwRo:指定绘制方式;常用的值为SRCCOPY,表示将原位图复制到

    目标位图该函数如果调用成功,返回绘制的行数;如果调用

    失败,则返回GDI_ERROR。


4697522

一、数字图像基本概念

  • 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的高度(逻辑单位)


4697522

一、数字图像基本概念

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值


4697522

一、数字图像基本概念

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;

};


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 将位图的描述信息(包括:位数据矩阵、行数、列数、颜色数等)保存的属性变量中,详细定义:

  • BYTE* m_pImgDat:位图的位数据矩阵,按行存放。

  • int m_Cols,m_Rows,m_PxlBytes:位图的 列数(宽)、行数(宽)、颜色深度(灰度或者是RGB彩色)。

  • BYTE* m_pBmpInfo:显示用的内部临时变量,给 WindwosAPI StretchDIBits 用。


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。

各功能的调用函数分别如下:

1、新建位图

CreateBmp(int cols,int rows,int pixelPytes);

参数解释:

int cols: 位图的列数,也即位图的宽。

int rows: 位图的行数,也即位图的高。

int pixelBytes:位图每位所用字节数,也是位图的颜色深度,值1为256色(灰度),值3为RGB彩色。


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。

各功能的调用函数分别如下:

2、读入位图

Load4File( LPCSTR lpstrPathName );

参数解释:

LPCSTR lpstrPathName: 位图文件的路径


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 可实现从文件读入位图数据、保存位图到文件、在Windows窗口中显示位图、新建位图等功能。

各功能的调用函数分别如下:

3、保存位图

Save2File( LPCSTR lpstrPathName );

参数解释:

LPCSTR lpstrPathName: 位图文件的路径


4697522

一、数字图像基本概念

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


4697522

一、数字图像基本概念

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


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 应用方法:

1、在 CXXDocument 定义中加入


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 应用方法:

2、在 CXXDocument.cpp 中加入


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 应用方法:

3、在 CXXView.cpp 中加入


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

CBmpFile 应用方法:

4、在 CXXView.cpp 中加入


4697522

一、数字图像基本概念

7、位图的使用 - CBmpFile类

特别注意:

CBmpFile 定义的位图不能直接通过修改属性 m_Cols,m_Rows,m_pixelBytes来修改位图的大小。

如果要修改位图大小,需要重新定义的一个

CBmpFile ,使用 CreateBmp 来创建新位图信息

最后可以使用 “=”的方式将新位图赋值到原位图。

或者直接使用 CreateBmp 来修改,注意使用

CreateBmp 的时候,原始的数据就清空了。


4697522

二、实习内容

  • 1、必做部分

  • 1)将RAW格式图像转换成BMP格式图像

  • 2)图像点运算:灰度线性变换

  • 3)图像局部处理:高通滤波和低通滤波

  • 2、选做部分(必选一)

  • 1)图像几何变换:缩放、平移、旋转、转置

  • 2)图像边缘提取:中值滤波、边缘检测

  • 3)影像融合

  • 4)基于灰度模板匹配

  • 5)基于轮廓特征匹配


4697522

三、VC 数字图像处理编程

  • 1、VC编程基本知识

  • 1)用MFC AppWizard创建以“学号姓名”命名

  • 的项目:

  • 选择Multiple Docunment;

  • 选择视图类基类CScrollView;

  • 2)仔细阅读DIBLOOK文件夹中DIBAPI.CPP,

  • DIBVIEW.CPP,DIBDOC.CPP,将DIBAPI.CPP、

  • DIBAPI.H文件加到新建项目中,并改写视

  • 图类、文档类,以能显示位图。

  • 3)添加菜单命令并建立菜单命令处理函数

  • 4)编写功能函数


4697522

三、 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数据区像素值存储到位图数据区


4697522

三、 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

  • }


4697522

三、 VC 数字图像处理编程

  • 3、图像点运算:灰度线性变换

  • 对数据区每个像素值进行线性运算

    pData[Height*i+j]=(A*pData[Height*i+j] +B);


4697522

三、 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];

  • } } } }


4697522

四、成果形式与评分标准

  • 1、程序设计(50%);

  • 2、实习报告(30%);

  • 3、平时考勤(20%)。


  • Login