资源描述
《数字图像处理》实验指导书
《数字图象处理》
实验指导书
目 录
实验一:数字图像读取及色彩、亮度、对比度变化 2
实验二:数字图像的噪声去除 3
实验三:数字图像的边缘检测 4
实验四:数字图像的放大、插值 5
实验五:数字图像的Fourier变换 6
实验六:绘制灰度直方图 7
实验七:数字图像的转置 10
附 录:BMP文件格式 12
实验一:数字图像读取及色彩、亮度、对比度变化
一、实验目的:
了解数字图像的存储格式,并学会对图像的某些视觉特征作简单处理。
二、实验要求:
1. 从最常用的“.BMP”图像格式中读取图像数据;
2. 对数字图像的表示方式(如RGB、YUV)及各种表示方式之间的转换有初步了解;
3. 根据输入参数改变数字图像的色彩、亮度、对比度。
三、实验步骤:
1. 利用工具(如ACDSee、PhotoShop)将Sample.1.jpg转换为Sample1.bmp;
2. 根据BMP格式(详见附录),将图像内容读入内存数组;
3. 通过访问数字图像RGB三个通道的对应矩阵,改变数字图像的色彩;
4. 将数字图像的RGB表示转换为YUV表示;
Y=0.30R+0.59G+0.11B
U=0.70R-0.59G-0.11B
V=-0.30R-0.59G+0.89B
5. 通过访问Y(亮度)通道,改变数字图像的亮度;
6. 通过Y(亮度)通道作灰度的线性变换,改变数字图像的对比度。
四、实验图像:
Sample1.jpg
实验二:数字图像的噪声去除
一、实验目的:
学会用滤波器去除图像中的噪声。
二、实验要求:
1. 用均值滤波器去除图像中的噪声;
2. 用中值滤波器去除图像中的噪声;
3. 比较两种方法的处理结果
三、实验步骤:
1. 利用工具(如ACDSee、PhotoShop)将Sample2-2.jpg转换为Sample2-2.bmp;
2. 根据BMP格式(详见附录),将图像内容读入内存数组;
3. 用均值滤波器去除图像中的噪声;
4. 用中值滤波器去除图像中的噪声;
将两种处理方法的结果与原图比较;
5. 注意两种处理方法对边缘的影响。
四、实验图像:
Sample2-1.jpg(原始图像)
Sample2-2.jpg(加噪声后的图像)
实验三:数字图像的边缘检测
一、实验目的:
学会两种简单的图像边缘检测方法。
二、实验要求:
1. 用梯度算子检测图像中的边缘;
2. 用Sobel算子检测图像中的边缘;
3. 比较两种方法的处理结果
三、实验步骤:
1.利用工具(如ACDSee、PhotoShop)将Sample3-1.jpg,Sample3-2.jpg转换为Sample3-1.bmp,Sample3-2.bmp;
2. 根据BMP格式(详见附录),将图像内容读入内存数组;
3. 用梯度算子检测图像中的边缘信息;
用Sobel算子检测图像中的边缘信息;
4. 改变阈值,观察边缘状况
5. 将两种处理方法的结果作比较;
四、实验图像:
Sample3-1.jpg
Sample3-2.jpg
实验四:数字图像的放大、插值
一、实验目的:
比较两种图像的放大、插值方法方法。
二、实验要求:
1. 用双线性插值法放大图像;
2. 用Sinc函数插值法放大图像;
3. 比较两种内插方法的处理效果和速度
三、实验步骤:
1. 利用工具(如ACDSee、PhotoShop)将Sample2-1.jpg转换为Sample2-1.bmp;
2. 根据BMP格式(详见附录),将图像内容读入内存数组;
3. 用双线性插值法放大图像;
(算法详见讲义)
4.用Sinc函数插值法放大图像;
(算法详见讲义)
考虑到程序的运行速度,可以仅对图像进行2的幂次方倍数的放大,并据此对算法进行优化。
5.将两种处理方法的结果及速度作比较。
四、实验图像:
Sample2-1.jpg
实验五:数字图像的Fourier变换
一、实验目的:
掌握Fourier变换、反变换的算法实现,并初步理解Fourier变换的物理意义。
二、实验要求:
1. 用Fourier变换算法对图像作二维Fourier变换。
2. 用Fourier反变换算法对图像作二维Fourier反变换。
3. 评价人眼对图像幅频特性和相频特性的敏感度。
三、实验步骤:
1. 利用工具(如ACDSee、PhotoShop)将Sample5-1.jpg转换为Sample5-1.bmp;
2. 根据BMP格式(详见附录),将图像内容读入内存数组;
3. 用Fourier变换算法,对图像作二维Fourier变换;
(考虑图像为256*256,可以采用快速Fourier变换方法)
4. 用Fourier系数的幅度进行Fourier反变换;
5. 用Fourier系数的相位进行Fourier反变换;
6. 比较4、5的结果,评价人眼对图像幅频特性和相频特性的敏感度。
四、实验图像:
Sample5.jpg(256*256)
实验六:绘制灰度直方图
一、实验目的:
掌握绘制灰度直方图算法实现,理解灰度直方图进行图像增强原理。
二、实验要求:
(1)创建灰度直方图数据
(2)定制灰度直方图对话框
(3)显示直方图
三、参考程序
(1)创建灰度直方图数据
//*******************************************
//函数名称: CreateHistogram()
//参数说明: nX1、 nY1、 nX2、 nY2为需创建直方图图像区域坐标, 默认为- // 1。pData、pPalette、 nWidthBytes为位图数据指针、调色板指
// 针、 图像行字节宽度
//返回值: int型数组指针*pBuffer。在数组中依次存储亮度、红、绿、蓝分量
// 的直方图数据, 每个分量各占256个元素[FK)]
//基本功能:创建指定的图像对象的直方图数据。如果未给定坐标,则针对整 个图像
//****************************************
int *CPointPro:: CreateHistogram(int nX1, int nY1, int nX2, int nY2,
unsigned char *pData, RGBQUAD *pPalette, int nWidthBytes)
{
//图像指针为空, 无法操作返回
if(m_pDibObject == NULL) return(FALSE);
//分配直方图数据缓存区(数组)
int *pBuffer = new int [256 * 4];
//分配直方图数据缓存区失败
if(pBuffer == NULL) return( NULL );
//直方图数据缓存区清零
memset(pBuffer, 0, (256 * 4) * sizeof(int));
//变量定义
DWORD dwGray;
int x, y;
unsigned char *pTemp, ucRed, ucGreen, ucBlue;
//图像的高度
int nHeight = m_pDibObject->GetHeight();
switch(m_pDibObject->GetNumBits())
{
case 24:
for(y = nY1; y < nY2; y++)
{
//数据指针定位到图像数据起始位置
pTemp = pData;
//数据指针定位到图像数据每行的起始零位置
pTemp += (( nHeight - 1 - y) * nWidthBytes);
//数据指针定位到图像数据每行的起始nX1位置
pTemp += (nX1 * 3);
for(x=nX1; x<=nX2; x++)
{
//获取像素颜色的三原色
ucRed = pTemp[x * 3 + 2];
ucGreen = pTemp[x * 3 + 1];
ucBlue = pTemp[x * 3];
//按关系L=0.3R+0.59G+0.11B, 得到亮度值
dwGray = (DWORD) (ucRed * 30 + ucGreen * 59 + ucBlue * 11) / 100;
dwGray &= 0x000000ff;
//亮度直方图数据
pBuffer[dwGray]++;
//红色直方图数据
pBuffer[256 + ucRed]++;
//绿色直方图数据
pBuffer[512 + ucGreen]++;
//蓝色直方图数据
pBuffer[768 + ucBlue]++;
//数据指针加3
pTemp += 3;
}
}
break;
}
return( pBuffer );
}
(2)定制灰度直方图对话框
定制一个直方图对话框并创建一个CDlgIntensity类, 在它的构造函数中初始化成员变量(例如, 初始化直方图数据指针m_pnHistogram = NULL), 添加WM_PAINT的消息映射函数OnPaint(), 然后在消息映射函数中绘制直方图数据。
(3)显示直方图
void CDipView:: OnViewHist()
{
CDipDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//判断当前是否有图像对象
if( pDoc->m_pDibObject = = NULL ) return;
//在点处理CPointPro类中创建用来绘制直方图的数据
CPointPro PointOperation( pDoc->m_pDibObject );
int *pHistogram = PointOperation.GetHistogram();
//生成一个对话框CDlgIntensity类的实例
CDlgIntensity HistDlg;
//将直方图数据传给CDlgIntensity的成员变量m_pnHistogram
if( pHistogram != NULL )
{
//设置直方图数据指针
HistDlg.m_pnHistogram = pHistogram;
//设置当前像素值为0的像素数
HistDlg.m_nCurrentPiexsNum = pHistogram[0];
//设置是否为256级灰度图像
HistDlg.m_bIsGray256 = PointOperation.IsGray256();
}
//显示对话框
if ( HistDlg.DoModal() != IDOK) return;
delete [] pHistogram;
}
四、实验图像:
Lena图像及其直方图
实验七:数字图像的转置
一、实验目的:
掌握数字图像的几何变换;
二、实验要求:
编制数字图像转置的算法
三、参考程序:
//******************************************
// 函数名称: BOOL Transpose()
// 基本功能: 本函数对传入的CDibObject对象中的图像进行转置操作
// 参数说明: CDibObject *pDibObject 默认为NULL
// 返回值: BOOL 转置成功返回TRUE, 否则返回FALSE
//******************************************
BOOL CGeoTrans: : Transpose(CDibObject *pDibObject)
{
//定义指向源图像及新图像的指针、 位图数据指针、 调色板等指针变量
//获取源图像指针及文件头、 信息头、 调色板及图像数据等信息
//计算新图像大小(包括文件头、 信息头、 调色板和图像数据)
//为新图像分配内存, 指定新图像的文件头、 信息头、 调色板及图像数据指针
//用255填充新图像数据区, 用源图像的文件头、 信息头填充相应的新图像
//调整文件总字节数、 新图像的宽度和高度等信息, 用原调色板填充新调色板
//由图像位数确定的移动字节数
int nMovedBits = 1;
switch( m_pDibObject->GetNumBits() )
{
case 8:
nMovedBits = 1;
break;
case 16:
nMovedBits = 2;
break;
case 24:
nMovedBits = 3;
break;
case 32:
nMovedBits = 4;
break;
}
// 针对图像每行进行操作
for(y = 0; y < nOldHeight; y++)
{
//指向源图像第y行
pOldTemp = pOldBits;
pOldTemp += (nOldHeight -1 -y) * nOldWidthBytes;
// 针对每行图像每列进行操作
for(x = 0; x < nOldWidth; x++)
{
//指向转置后的图像第x行, 第y个像素的指针
pNewTemp = pNewBits;
pNewTemp += (nNewHeight -1 -x) * nNewWidthBytes;
pNewTemp += y * nMovedBits;
//复制像素
memcpy(pNewTemp, pOldTemp, nMovedBits);
pOldTemp += nMovedBits;
}
}
//将内存解锁和将不再使用的内存释放,将新图像设置为当前图像,返回TRUE
}
四、实验图像:
转置前后的图像
附录:BMP文件格式
BMP文件由以下几部分组成:文件头、信息头、调色板信息(在256色图像中存在)和图像数据部分。
文件头格式:
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
信息头格式:
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
调色板信息:(由于本实验提供的均为真彩色图,没有调色板信息,故不再详述)
图像数据:
自左向右,自下向上,按照R-G-B三通道次序排列。
- 14 -
展开阅读全文