当我们使用CCS5.5编写处理单张图像的算法工程时,涉及到如何导入硬盘里的图像数据到DSP指定内存里的问题。下面做一下介绍。(整个工程代码下载:http://download.csdn.net/detail/luokh327/9483582)
1、使用MATLAB将需要导入的图像转换成DSP能识别格式的二进制(.dat)文件;
function CreateImgDat() clc; close all; clear all; %说明:生成DSP实验所用的图像数据Dat文件 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% I = imread('D:\MyProject\Matlab\picture\lena2.BMP');%打开图像,这里改成自己的图像名及路径 %将图像缩小一点,不然数据量太大 I = imresize(I,[128,128],'bicubic');%<span style="color:#ff0000;">缩小成128*128、二维FFT时需要图像为2的n次方</span> figure,imshow(I);%显示图像 [N M dim] = size(I);%获取图像的高与宽 if(dim == 3) I = rgb2gray(I);%如果打开的是彩色图像,则转换成灰度图像 end fid = fopen('D:\MyProject\Matlab\data\lena128x128.dat','w');%保存.dat图像数据文件 fprintf(fid,'%d %d %s %d %d\n',1651,2,'8cc0',0,N*M);%写入二进制文件的第一行 %将图片数据写入Dat文件中 for n = 1:N for m = 1:M fprintf(fid,'%d\n',I(n,m)); end end fclose(fid); disp('Run OK')
2、配置MyFFTproject.cmd文件,为导入图像分配内存
-c -stack 0x00020000 /* Stack Size */ -heap 0x00020000 /* Heap Size */ MEMORY { VECS: o = 0x00000000 l = 0x00000080 IRAM: o = 0x00000080 l = 0x00007f80 /* 32 kBytes */ DRAM: o = 0x00010000 l = 0x00008000 /* 32 kBytes */ DDR2: o = 0x80000000 l = 0x04000000 /* 128 MBytes */ DDR2_VIDEO: o = 0x84000000 l = 0x04000000 /* 128 MBytes */ } SECTIONS { .bss > DDR2 .cinit > DDR2 .cio > DDR2 .const > DDR2 .data > DDR2 .far > DDR2 .stack > DDR2 .switch > DDR2 .sysmem > DDR2 .text > DDR2 .ddr2 > DDR2
.IMG > DDR2_VIDEO//导入图像的地址
//以下为二维FFT计算时需要用到的内存分配 .Source > DDR2_VIDEO .Scale > DDR2_VIDEO .Out > DDR2_VIDEO .tdd > DDR2_VIDEO .fdd > DDR2_VIDEO .W > DDR2_VIDEO .X1 >DDR2_VIDEO .X2 > DDR2_VIDEO .TempT > DDR2_VIDEO .TempF > DDR2_VIDEO }然后在main.c文件里连接内存,使用语句:
#pragma DATA_SECTION(IMG,"DDR2_VIDEO"); int IMG[16385];//此处数组大小为导入图像的大小(128 × 128),然后在接下来的函数中就可以使用图像数据了。
3、在CCS5.5的Tools-->Load Memory里加载数据;
4、运行算法(我的是单张图像的FFT及扩展2倍大小加入退化函数,然后滤波IFFT,若算法不一样,此项会不同);
二维图像的FFT及IFFT的DSP实现看:
利用DM6437/DM642实现单张图像的FFT、IFFT以及全逆滤波、维纳滤波
http://blog.csdn.net/luokh327/article/details/51083769
5、使用Tools-->Image Analyzer来显示出来过程中的图片:;
点击Image Analyzer后,在软件下发会出现下图,然后鼠标右键设置Properties:
设置图像显示的细节,包括图像大小,RGB/YUV的起始地址、灰度级等(里面的参数具体的值可以多试一试,直到显示正常为止):
最后在Image里右键Refresh显示图像:
总结:使用CCS3.3+TMS320DM342处理图像可参考《DSP原理及图像处理应用--赵小强》,里面对于单张图像的处理介绍很详细。