77范文网 - 专业文章范例文档资料分享平台

数字图像处理实验教程-V3.1-zsj(8)

来源:网络收集 时间:2019-04-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

数字图像处理实验教程 V3.1

IplImage* MedianFilter_5_5(IplImage* src){ IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels); cvSmooth(src,dst,CV_MEDIAN,5); return dst;

} 对比其处理效果。

1. int sum(int val[N]) 2. {

3. int i,j;// 循环变量 4. char bTemp; 5.

6. // 用冒泡法对数组进行排序 7. for (j = 0; j < N- 1; j ++) 8. {

9. for (i = 0; i < N - j - 1; i ++) 10. {

11. if (val[i] > val[i + 1]) 12. {

13. // 互换

14. bTemp = val[i];

15. val [i] = val [i + 1]; 16. val [i + 1] = bTemp; 17. } 18. } 19. } 20.

21. // 计算中值 22. if ((N & 1) > 0) 23. {

24. // 数组有奇数个元素,返回中间一个元素 25. bTemp = val[(N + 1) / 2]; 26. } 27. else 28. {

29. // 数组有偶数个元素,返回中间两个元素平均值 30. bTemp = ( val [N / 2] + val [N / 2 + 1]) / 2; 31. } 32.

33. return bTemp; 34. }

【高层进阶】

请编写程序,实现用户可选多种滤波器的功能,将不同类型的滤波器分别用函数实现,在主程序中增加用户交互,如用户可选用某种滤波器、可选择滤波器

36

数字图像处理实验教程 V3.1

不同尺寸等。此题目旨在训练代码模块化及集成开发能力。 5. 实验报告要求

实验报告要求写明以下7方面内容: (1) 写明实验目的。

(2) 写明实验内容和步骤。

(3) 写出图像处理函数代码,并对算法程序部分加详细的注释。 (4) 描绘并解释实验结果,并对实验结果进行分析。 (5) 写明实验中存在的不足,以及改进的方法。 (6) 回答实验中涉及到的问题。 (7) 写出本次实验的体会。 6. 预习内容

(1) 自己查阅资料,学习图像分割的概念,了解图像边界、区域检测的原理并

预习图像边缘提取的基本算法。

(2) 请预习图像颜色空间的分类和特点以及颜色空间的转换方法。 7. 参考程序代码 /* 程序名:filter1.c

功 能:编程实现均值滤波器,对图像进行滤波 */

#include

#include #include

#define FILENAME \

#define N 9//滤波器的阶数(模板尺寸,N=9时表示模板大小为 3*3)

int sum(int val[N])//求平均值 {

int s=0,i;

for (i=0;i

int main( int argc, char** argv ) {

IplImage *src = 0, *dst = 0; int x,y,val[N],value;

src = cvLoadImage(FILENAME, 0);// 0:强制转化为灰度图再处理,否则下面的滤波无效

dst = cvCloneImage( src ); cvNamedWindow(\ cvShowImage(\

for (y=1;yheight-1;y++)//边界不处理 for (x=1;xwidth-1;x++)

37

数字图像处理实验教程 V3.1

{ val[0]=(uchar)src->imageData[src->widthStep * (y-2) + (x-2)];

val[1]=(uchar)src->imageData[src->widthStep * (y-2) + (x -1) ]; val[2]=(uchar)src->imageData[src->widthStep * (y-2) + x];

val[3]=(uchar)src->imageData[src->widthStep * (y-2) + (x +1) ]; val[4]=(uchar)src->imageData[src->widthStep * (y-1) + (x+2)]; val[5]=(uchar)src->imageData[src->widthStep * (y-1) + (x-2)]; val[6]=(uchar)src->imageData[src->widthStep * (y-1) + ( x -1 ) ]; val[7]=(uchar)src->imageData[src->widthStep * (y-1) + x];

val[8]=(uchar)src->imageData[src->widthStep * (y-1) + (x +1) ];

val[9]=(uchar)src->imageData[src->widthStep * (y-1) + (x +2) ];

val[10]=(uchar)src->imageData[src->widthStep * y + (x-2)]; val[11]=(uchar)src->imageData[src->widthStep * y + (x -1) ]; val[12]=(uchar)src->imageData[src->widthStep * y + x];

val[13]=(uchar)src->imageData[src->widthStep * y + (x +1) ]; val[14]=(uchar)src->imageData[src->widthStep * y + (x+2)]; val[15]=(uchar)src->imageData[src->widthStep * (y+1) + (x-2)]; val[16]=(uchar)src->imageData[src->widthStep * (y+1) + (x -1) ]; val[17]=(uchar)src->imageData[src->widthStep * (y+1) + x];

val[18]=(uchar)src->imageData[src->widthStep * (y+1) +( x+1)]; val[19]=(uchar)src->imageData[src->widthStep * (y+1) + (x +2) ]; val[20]=(uchar)src->imageData[src->widthStep * (y+2) + (x-2)];

val[21]=(uchar)src->imageData[src->widthStep * (y+2) + (x -1) ]; val[22]=(uchar)src->imageData[src->widthStep * (y+2) + x];

val[23]=(uchar)src->imageData[src->widthStep * (y+2) +( x+1)]; val[24]=(uchar)src->imageData[src->widthStep * (y+2) + (x +2) ];

value = sum(val);

dst->imageData[dst->widthStep * y +x]=value;//给目标图像中对应像素赋灰度值 }

cvNamedWindow(\ cvShowImage(\

cvSaveImage(\保存图像 cvWaitKey(0);

cvReleaseImage( &src ); cvReleaseImage( &dst ); return 0; }

/* 程序名:filter2.c

功 能:使用不同的模板(滤波器)对图像进行滤波 */

#include

#include

38

数字图像处理实验教程 V3.1

#include

#define FILENAME \

int main( int argc, char** argv ) {

IplImage *src = 0, *dst = 0, *dst2 = 0; float k[9] = { 1, 1, 1, 0, 0, 0, -1,-1,-1}; /* float g[9] = { 1, 0, -1, 1, 0, -1,

1, 0, -1}; */ CvMat Km;

Km = cvMat( 3, 3, CV_32F, k );

src = cvLoadImage(FILENAME, 0);// 0: force to gray image dst = cvCloneImage( src ); cvNamedWindow(\ cvShowImage(\

cvNamedWindow(\

cvFilter2D( src, dst, &Km, cvPoint(-1,-1));//使用模板Km对图像进行二维滤波 cvShowImage(\cvSaveImage(“filter2.jpg”, dst); cvWaitKey(0);

cvReleaseImage( &src ); cvReleaseImage( &dst ); return 0; }

8. OpenCV函数解释

cvInitMatHeader初始化矩阵头函数 cvMat给矩阵赋值函数。

cvFilter2D对图像做卷积运算

语法:void cvFilter2D( const CvArr *src, CvArr *dst, const CvMat *kernel, CvPoint anchor=cvPoint(-1,-1)); 参数:src 输入图像。

dst 输出图像。

kernel 卷积核(即滤波器的模板),单通道浮点矩阵。

anchor:核的锚点,表示一个被滤波的点在核内的位置。默认为(-1,-1)表示锚点在核中心。

cvSmooth 低通滤波(去噪声)

39

数字图像处理实验教程 V3.1

语法:CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,

int smoothtype CV_DEFAULT(CV_GAUSSIAN), int param1 CV_DEFAULT(3), int param2 CV_DEFAULT(0), double param3 CV_DEFAULT(0), double param4 CV_DEFAULT(0));

cvLaplace计算图像的 Laplacian 变换(拉普拉斯锐化)

语法:void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 ); 参数: src 输入图像.

dst 输出图像.

aperture_size 核大小 (与 cvSobel 中定义一样).

功能:函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:

对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:

类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。

40

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数字图像处理实验教程-V3.1-zsj(8)在线全文阅读。

数字图像处理实验教程-V3.1-zsj(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/597195.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: