文档详情

基于DSP的数字图像处理(3页).doc

发布:2015-09-05约字共3页下载文档
文本预览下载声明
实验目的: 1. 学习使用MATLAB读取图像,并输出.h文件 2. 学习使用TI IMGLIB库函数的使用方法 3. 理解掌握Sobel算子进行图像边缘检测的DSP实现 实验原理: 两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的表现。由于边缘是图像上灰度变化最剧烈的地方,边缘检测就是充分利用了这个特点,对图像各像素点进行微分或求二阶微分来确定边缘像素点。一阶微分图像的峰值处对应着图像的边缘点;二阶微分图像的过零点处对应着图像的边缘点。为了提取图像边缘,我们定义了图像的梯度为梯度算子,常用的梯度算子有Robert算子、Sobel算子、Prewitt算子和拉普拉斯算子等。 实验步骤: 一、对lenna.bmp图像的DSP处理 1. 用MATLAB读取图像并输出.h文件。本实验是对经典图像lenna.bmp的读取和数据分析。程序如下: [I,map]=imread(lenna.bmp); imshow(I) It(:,:,1) = I(:,:,1); I=double(I); fid=fopen(lenna.h,w); fprintf(fid,/*lenna image 256*256 */\n\n); fprintf(fid, sprintf(short lenna[256][256] = {\n)); for ii=1:65536 fprintf(fid, %3d,, I(ii)); if 0 == mod(ii, 8) fprintf(fid, \n); end end fprintf(fid,\n};\n); fclose(fid); 运行之后将产生一个lenna.h文件,文件内存取了256*256个数据,供CCS调用。 2. 使用TI IMGLIB实现Sobel边缘检测。 TI IMGLIB是图像/视频处理函数库,包含了许多经过优化的常用数字图像处理算法的函数。对于C6713 DSK,我们使用TI C62x IMGLIB(对C67x兼容)。 本实验实现Sobel边缘检测算法: 编写边缘检测程序sobel_edge_detect.c如下: #include img_sobel.h #include img_thr_le2min.h #include lenna.h #pragma DATA_SECTION(img_buf1, IRAM); #pragma DATA_ALIGN (img_buf1, 8); unsigned char img_buf1[N_PIXELS]; #pragma DATA_SECTION(img_buf2, IRAM); #pragma DATA_ALIGN (img_buf2, 8); unsigned char img_buf2[N_PIXELS]; static void sobel_edge_detect(unsigned char T) { IMG_sobel(img_s, img_buf2, Y_SIZE, X_SIZE); IMG_thr_le2min(img_buf2, img_buf1, Y_SIZE, X_SIZE, T); } void main() { /* process the image */ sobel_edge_detect((unsigned char)120); } 同时编写好img_sobel.h(边缘检测头文件)和img_thr_le2min.h(二值化头文件) 建立工程improc,添加源程序sobel_edge_detect.c,图像/视频库文件img62x.lib,头文件img_sobel.h、img_thr_le2min.h、lenna.h以及链接器命令文件dsk6713.cmd。编译链接后产生输出文件improc.out,将其载入,运行程序。 二、对已有的image.h文件进行边缘检测和二值化分析。与步骤一类似。 实验结果: 用CCS Graph 功能观察结果,CCS?View?Graph?Image 一、程序中img_buf2和img_buf1分别存储着边缘检测数据和二值化处理数据。 例如观察原图像进行如下设置: 原图像如下: 接着分别观察img_buf2和img_buf1 边缘检测后图像: 二值化处理后图像: 二、观察原图像配置如下: 原图像、边缘检测图像、二值化图像进行对比如下:
显示全部
相似文档