光学图象处理实验(课程设计)
指导说明书
信息物理与工程系
王振东
2003年5月
一、实验(课程设计)目的:
通过本实验(课程设计),掌握数字图象处理的基本原理;掌握Visual C++、或Matlab、或VB等WINODWS编程软件的使用;掌握程序的编辑、编译和调试方法;掌握基本数字图象文件格式;掌握图象输入、输出软件接口。
二、实验(课程设计)仪器
PC微型计算机一台,Visual C++、或Matlab、或VB等WINODWS编程软件。实验样图及图像程序接口。
三、实验(课程设计)原理
在PC机平台及WINODWS操作系统上,以通用编程软件通过软件编程实现数字图象文件的读取、存储、显示,同时设计一种或几种数字图象处理算法并调试实现,将处理结果以图象方式显示,完成数字图象处理的基本过程。
四、实验(课程设计)步骤
线上编程课排名1. 按要求进行设计选题(选题范围附后);
2. 查阅相关资料,筛选并确定算法;
3. 仔细阅读相关软件使用手册,了解软件编程方法;
4. 按格式输入编制好的程序;
5. 对程序进行编译,查语法错误;
6. 根据编译过程指出的错误,修改错误,直到编译通过;
7. 开始调试算法,通过观察输出结果的变化,查算法错误,直至算法调试正确;
8. 完成程序整理,并编译出最终版本的可执行程序;
9. 根据要求完成课程设计(实验)报告。
五、实验(课程设计)要求
在进行实验(课程设计)前要预习,必须基本掌握其中一种WINODWS编程软件的使用。
熟悉数字图象处理的基本原理和过程,掌握基本数字图象文件格式;掌握图象输入、输出软件接口。掌握设计数字图象处理算法的过程和方法并调试实现。
六、实验(课程设计)结果
实验(课程设计)报告。
源程序和可执行程序。
七、选题范围
(一)通用选题
1. 图象编码:
a.哈夫曼编码, b.游程长度编码,c.香农编码,d.其它熵编码;
2. 图象变换:
a.快速二维离散傅氏变换, b.离散余弦变换,c.离散沃尔什变换,d.离散小波变换;
3. 图象增强:
a.灰度级校正, b. 灰度级变换,c.直方图修正,d.直方图均衡,e.同态增晰,f.噪声平滑,g.中值滤波,h.锐化,i.几何校正;
4. 图象复原:
a.反向滤波, b. 最小二乘滤波,c.同态滤波,d.卡尔曼滤波;
5. 图象分割:
a.阈值分割, b. 边界检测,c.骨架提取,d.区域生长,e.同分裂合并,f. 区域标记;
6. 图象识别:
a. 边界表达(链码,曲线拟合,转折能量法), b. 边界描述(矩形度,圆形度,矩,傅立叶形状描述),c. Hough变换,d. 广义Hough变换,e. 区域表达(四叉树,骨架),f. 区域描述(投影,不变矩),g. 纹理描述符,h.贝叶斯判决,i. 模板匹配;
7. 图象重建:
a.傅立叶变换重建, b. 滤波反投影重建,c.代数迭代重建。
(二)专用选题
1.光斑定位问题的研究。即通过对一个光斑图象的处理,精确地出光斑的中心坐标,并确定其定位精度;
2.数值方法提高图象分辨率的研究。即通过对一个图象的数学插值处理,获得比物理图象分辨率更高的图象,并对不同数学插值算法的效果和可实现性进行比较;
3.中值滤波算法的优化设计研究。包括效果优化和计算量优化。
4.图象匹配识别。即已知一幅标准图象,然后与其它图象进行比较,判断该图象与标准图象的匹配程度。
5.光学自动对焦算法。在光学系统成像过程中,通过所成的像清晰与否来判断光学系统的对焦是否准确。
6.自选。
八、实验(课程设计)报告要求
1.标题、作者(可多人,但不超过三人,排名分先后);
2.背景或关于该类方法的概述。可在通用选题中一个题目中选择某一小类的问题进行研究,或选择一个专用选题讨论;
3.所选择的方法的讨论(包括效果、可实现性,至少两种以上的方法,以及详细的实现流程);
4.源程序及详细说明;
5.结论,包括实际效果以及与预期的对比及原因分析;
6.参考文献,不少于8篇,必须有杂志文章4篇;
7.篇幅不少于4000字。
九、实验(课程设计)报告样例
数值方法提高图像分辨率的研究
作者:XXX, XXX, XXX
单位:南京理工大学
摘要:本文采用了两种插值方法提高图像分辨率, ……(略)…… 本实验的程序是在VB环境
中完成的。
关键字:象素 分辨率
一、提高图像分辨率的背景
图像分辨率(即区分细节的程度)与采样点和灰度级的个数紧密相关。
……(略)……
二、预处理步骤
直方图均衡化
①原理 :由于原图像较为暗淡,故采用直方图均衡化增强其整体对比度。
……(略)……
②流程图:
③计算量:乘法运算256*3=768次,加法运算lenx*leny+2*256=lenx*leny+512次。
……(略)……
三、两种插值方法
都是将预处理后的ii(lenx,leny)插值生成dest(2*lenx-1,2*leny-1),对应的原象素不加处理,边
缘上的插值点采用简单的两点平均法,新行新列的插值点用四点平均法,所有的插值点都是用原象素矩阵生成的。
1.两点平均法
①原理:如图4.1,原行原列中的插值点取两点平均法,即为拉格朗日插值的线性处理。
……(略)……
2.三次的拉格朗日插值法
……(略)……
3.对三次样条插值的讨论
……(略)……
所以要解得次线性方程组,……(略)……。
四、结论:
速度:由于本程序是在VB环境中进行的,所以运行速度较慢,大约需3-4 秒钟才能出来一幅图像。
两种方法的比较:……(略)……。
六.源程序及详细说明(略):
七.参考文献:
……(略)……
十、实验(课程设计)图象接口程序代码
// dibapi.h
#ifndef _INC_DIBAPI
#define _INC_DIBAPI
// DIB句柄
DECLARE_HANDLE(HDIB);
// DIB常量
#define PALVERSION 0x300
/* DIB宏 */
// 判断是否是Win 3.0的DIB
#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi)) == sizeof(BITMAPINFOHEADER))
// 计算矩形区域的宽度
#define RECTWIDTH(lpRect) ((lpRect)->right - (lpRect)->left)
// 计算矩形区域的高度
#define RECTHEIGHT(lpRect) ((lpRect)->bottom - (lpRect)->top)
// 在计算图像大小时,采用公式:biSizeImage = biWidth' × biHeight。
// 是biWidth',而不是biWidth,这里的biWidth'必须是4的整倍数,表示
// 大于或等于biWidth的,离4最近的整倍数。WIDTHBYTES就是用来计算
// biWidth'
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
// PCX文件头结构
typedef struct{
BYTE bManufacturer;
BYTE bVersion;
BYTE bEncoding;
BYTE bBpp;
WORD wLeft;
WORD wTop;
WORD wRight;
WORD wBottom;
WORD wXResolution;
WORD wYResolution;
BYTE bPalette[48];
BYTE bReserved;
BYTE bPlanes;
WORD wLineBytes;
WORD wPaletteType;
WORD wSrcWidth;
WORD wSrcDepth;
BYTE bFiller[54];
} PCXHEADER;
// 函数原型
BOOL WINAPI PaintDIB (HDC, LPRECT, HDIB, LPRECT, CPalette* pPal);
BOOL WINAPI CreateDIBPalette(HDIB hDIB, CPalette* cPal);
LPSTR WINAPI FindDIBBits (LPSTR lpbi);
DWORD WINAPI DIBWidth (LPSTR lpDIB);
DWORD WINAPI DIBHeight (LPSTR lpDIB);
WORD WINAPI PaletteSize (LPSTR lpbi);
WORD WINAPI DIBNumColors (LPSTR lpbi);
WORD WINAPI DIBBitCount(LPSTR lpbi);
HGLOBAL WINAPI CopyHandle (HGLOBAL h);
BOOL WINAPI SaveDIB (HDIB hDib, CFile& file);
HDIB WINAPI ReadDIBFile(CFile& file);
BOOL WINAPI DIBToPCX256(LPSTR lpDIB, CFile& file);
HDIB WINAPI ReadPCX256(CFile& file);
#endif //!_INC_DIBAPI
// ************************************************************************
// 文件名:dibapi.cpp
// DIB(Independent Bitmap) API函数库:
//
// PaintDIB() - 绘制DIB对象
// CreateDIBPalette() - 创建DIB对象调板
// FindDIBBits() - 返回DIB图像象素起始位置
// DIBWidth() - 返回DIB宽度
// DIBHeight() - 返回DIB高度
// PaletteSize() - 返回DIB调板大小
// DIBNumColors() - 计算DIB调板颜数目
// CopyHandle() - 拷贝内存块
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论