基于DSP的数字图像处理(3页).doc
文本预览下载声明
实验目的:
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
边缘检测后图像: 二值化处理后图像:
二、观察原图像配置如下:
原图像、边缘检测图像、二值化图像进行对比如下:
显示全部