图像处理课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数字图像处理》课程设计报告

题 目 __________________________________

______________________________________

指导教师

__________________________ 学生姓名__________________________ 学生学号__________________________

_______________________________

院(部)_________专业_____________

2014年7月1日 基于MFC 的数字图像处理系统设计

Z

1.目的与要求

将实验1至实验8所设计的数字图像处理的算法和功能添加到同一个MFC程序中(可以是基于对话框的程序,或者基于单/多文档的程序),形成一个基于MFC的图像处理系统,可以增加一些课本上没有讲到的效果,如风格化等,开发的结果是类似PS的一款软件。

要求:用户可设置具体参数,可以通过该平台展现不同参数下的实验效果。

2.主要技术和原理

2.1彩色转换

彩色图像转换为8位灰度图像,利用cvCreateImage创建图像函数

语法:IplImage *cvCreateImage(CvSize size, int depth, int channels)

参数:size:图像的宽、高。depth:图像图元深度。channels每个图元的颜色通道数。

返回值:IplImage结构体。

cvCvtColor色彩空间转换函数

语法:void cvCvtColor(const CvArr* src, CvArr* dst, int code)

参数:src为源图像的不定数组,CvArr*指针,一般情况为IplImage型指针。Dst:目的地址的CvArr指针,一般为IplImage型结构体。Code:色彩转换空间,

常数定义为CV_2

2.2几何变换

1)翻转

翻转分为水平翻转和垂直翻转。

cvFlip垂直,水平或既垂直又水平地翻转二维数组

语法:void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0)

参数:src 输入数组

dst 输出数组,若dst = NULL,则翻转是在内部替换。

flip_mode 指定怎样翻转数组。若=0,则绕x轴翻转;若>0,则绕y轴翻转;若<0,则绕x轴和y轴翻转。

说明:函数cvFlip以下面三种方式之一翻转数组(行和列下标是以0为基点的):

if flip_mode = 0,则dst(i,j)=src(rows(src)-i-1,j),绕x轴旋转

if flip_mode > 0,则dst(i,j)=src(i,cols(src1)-j-1),绕y轴旋转

if flip_mode < 0,则dst(i,j)=src(rows(src)-i-1,cols(src)-j-1),绕x轴和y轴旋转

2)旋转

在旋转函数Rotate中通过angle大小控制旋转角度。

cvMat初始化矩阵函数

语法:CvMat cvMat(int rows, int cols, int type, void *data=NULL)

参数:rows矩阵行数,cols矩阵列数,type元素类型,data可选项,指向分配给矩阵头的数据指针。

OpenCV中重要的矩阵变换函数,使用方法为cvMat* cvCreateMat ( int rows, int cols, int type ); 这里type可以是任何预定义类型,预定义类型的结构如下:CV_ (S|U|F)C。于是,矩阵的元素可以是32位浮点型数据(CV_32FC1),或者是无符号的8位三元组的整型数据(CV_8UC3),或者是无数的其他类型的元素。

cvGetQuadrangleSubPix 使用子像素精度提取像素四边形。该函数通过指定的变换矩阵对原图像进行相应的变换。

语法:void cvGetQuadrangleSubPix( const CvArr *src, CvArr *dst, const CvMat

*map_matrix)

参数:src 输入图像 dst 提取的四边形

map_matrix 为2*3的变换矩阵[A | b]

说明:此函数以子像素精度从图像src 中提取四边形,并将结果存储于dst ,计算公式如下:

dst[x + width(dst)/2, y+height(dst)/2] = src(11211b y A x A ++,22221b y A x A ++) 其中,A 和b 为几何形变参数,均来自映射矩阵map_matrix 。映射矩阵为:

map_matrix=⎥⎦

⎢⎣⎡222

21

11211

b A A b A A

此处,非整数坐标b y x A T +∙),(的像素点值通过双线性插值得到。多通道图像的每一个通道都单独计算。

这个函数旋转图像后,超出原图像部分,默认的是重复边界模式。

3)放大与缩小

首先定义一个缩放倍数,对图像尺寸变换后利用cvCreateImage 创建目的图像,利用cvResize 图像大小变换函数。

功能:函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI ,函数将按常规支持 ROI.

语法:void cvResize( const CvArr* src, CvArr* dst, int interpolation= CV_INTER_LINEAR ); 参数:src 输入图像

dst 输出图像

interpolation 插值方法,包括: (1) CV_INTER_NN - 最近邻插值 (2)CV_INTER_LINEAR - 双线性插值

(3)CV_INTER_AREA - 使用像素关系重采样。当图像缩小时,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法。 (4)CV_INTER_CUBIC - 立方插值

2.3图像增强

1)直方图均衡化

cvEqualizeHist

该函数为开放计算机视觉(OpenCV )库,用来使灰度图象直方图均衡化。 定义:

void cvEqualizeHist( const CvArr* src, CvArr* dst ); 参数:

src 输入的 8-比特 单信道图图像

dst 输出的图像与输入图像大小与数据类型相同

函数 cvEqualizeHist 采用如下法则对输入图像进行直方图均衡化 1:计算输入图像的直方图 H

2:直方图归一化,因此直方块和为255

相关文档
最新文档