数字图像处理实验实验三.docx

上传人:b****8 文档编号:9354117 上传时间:2023-05-18 格式:DOCX 页数:15 大小:18.80KB
下载 相关 举报
数字图像处理实验实验三.docx_第1页
第1页 / 共15页
数字图像处理实验实验三.docx_第2页
第2页 / 共15页
数字图像处理实验实验三.docx_第3页
第3页 / 共15页
数字图像处理实验实验三.docx_第4页
第4页 / 共15页
数字图像处理实验实验三.docx_第5页
第5页 / 共15页
数字图像处理实验实验三.docx_第6页
第6页 / 共15页
数字图像处理实验实验三.docx_第7页
第7页 / 共15页
数字图像处理实验实验三.docx_第8页
第8页 / 共15页
数字图像处理实验实验三.docx_第9页
第9页 / 共15页
数字图像处理实验实验三.docx_第10页
第10页 / 共15页
数字图像处理实验实验三.docx_第11页
第11页 / 共15页
数字图像处理实验实验三.docx_第12页
第12页 / 共15页
数字图像处理实验实验三.docx_第13页
第13页 / 共15页
数字图像处理实验实验三.docx_第14页
第14页 / 共15页
数字图像处理实验实验三.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字图像处理实验实验三.docx

《数字图像处理实验实验三.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验实验三.docx(15页珍藏版)》请在冰点文库上搜索。

数字图像处理实验实验三.docx

数字图像处理实验实验三

报告内容:

(目的和要求、原理、步骤、数据、计算、小结等)

实验三静态图像的DCT变换

一、实验目的

1、了解DCT和IDCT的概念。

2、了解DSP的EDMA技术

3、了解DSP的中断技术。

4、了解SDRM在静态数据采集中的作用。

5、了解DSK板上用户自定义开关的使用。

6、了解DSP和FPGA在视频数据采集中的同步原理。

二、实验设备

计算机、6711DSK、视频板、CCS软件、Webpack软件

三、实验原理

本实验有视频采集卡上的FPGA和DSK共同完成对摄入图像进行DCT变换。

DCT、IDCT广泛应用于各种视频压缩标准中,它充分利用了图像数据的空间相关性来实现数据压缩。

DCT、IDCT变换本身是无损的,只是由于有限精度的原因才回有精度上的损失。

采集下来的图像首先放到SDRAM中

DSP处理流程为:

首先进行图像采集,并由FPGA控制存入到SDRAM中。

当用户按下按钮SW2的USER_SW1位按钮后,开始进行图像的模糊处理。

变换完成后用EDMA将处理的结果送给视频板的SDRAM,并由FPGA控制视频信号数据从SDRAM同步送给AL250,完成显示功能。

四、实验步骤

1、有关DCT变换的基础知识

2、连接好摄相头、视频卡、FPGA下载电缆、6711DSK并口仿真电缆,上电。

3、下载FPGA程序。

选择下载文件“exp\exp5”目录下的“scapture.bit”

4、下载完成后,连接DSK的并口电缆和计算机的并口,双击“C6711DSKCCS”图标。

进入CCS软件开发环境。

打开“exp\exp5”的“Video.out”文件,并运行。

5、程序运行后按下视频板的复位按钮S2完成图像的静态采集。

6、图像采集好后,按下DSK板上的SW2的USER_SW1位按钮,DSP开始进行边缘提取,完成后,自动显示处理的结果。

此时显示器的图像将会出现进行过DCT和反IDCT后的图像,尽管在显示屏上没有明显的变换,但是DCT反IDCT后的图像依然具有一定的图像丢失。

7、如果要继续采集和处理新的图像,拨回DSK板上的SW2的USER_SW1位按钮重复步骤5和6。

8、完成这个实验的实验报告。

五、源程序清单

#defineEMIF_CE10x01800004

#defineGet_Switches((*(int*)0x90080000>>24)&0x07)

#defineLED1_on*(int*)0x90080000=0x0E000000

#defineLED2_on*(int*)0x90080000=0x0D000000

#defineLED3_on*(int*)0x90080000=0x0B000000

#defineLEDs_off*(int*)0x90080000=0x07000000

externcregistervolatileunsignedintCSR;

externcregistervolatileunsignedintIER;

intDct(unsignedchar*block,short*coeff);

intIdct(short*coeff,unsignedchar*block);

int*OPT_6,

*SRC_6,

*count_6,

*DST_6,

*index_6,

*link_6,

*OPT_reload_6,

*SRC_reload_6,

*count_reload_6,

*DST_reload_6,

*index_reload_6,

*link_reload_6,

*EER,

*ESR,

*ECR;

int*CIER=(int*)0x01A0FFE8;

int*CIPR=(int*)0x01A0FFE4;

shortcapture_flag=0;

shortline=0;

shortdata_ready=0;

shortprocess_finish=0;

#include

voidmain()

{inta;

unsignedchardata[64];

shortdata_dct[64];

shortdata_dct_1[64];

shortflag;

int*p,*r;

short*q;

shortk,h1,h2;

inti1,j1;

intdct_flag=0;

int*sw;

int*SDRAM_control,

*ER,

*OPT_7,

*SRC_7,

*count_7,

*DST_7,

*index_7,

*link_7,

*OPT_reload_7,

*SRC_reload_7,

*count_reload_7,

*DST_reload_7,

*index_reload_7,

*link_reload_7;

p=(int*)0xa0000018;

r=(int*)0xb0000014;

q=(short*)0x80000000;

data[0]=0x8080;

*(int*)EMIF_CE1=0xFFFFFF23;//CE1设置成32位模式

CSR=CSR|1;//在CPUCORE寄存器中把外部中断使能

IER=0x00000122;

*ECR|=0x000000C0;

*CIER=0x00000040;

ECR=(int*)0x01A0FFF8;

ER=(int*)0x01A0FFF0;

EER=(int*)0x01A0FFF4;

ESR=(int*)0x01A0FFFC;

OPT_6=(int*)0x01A00090;

SRC_6=(int*)0x01A00094;

count_6=(int*)0x01A00098;

DST_6=(int*)0x01A0009c;

index_6=(int*)0x01A000A0;

link_6=(int*)0x01A000A4;

OPT_reload_6=(int*)0x01A00210;

SRC_reload_6=(int*)0x01A00214;

count_reload_6=(int*)0x01A00218;

DST_reload_6=(int*)0x01A0021C;

index_reload_6=(int*)0x01A00220;

link_reload_6=(int*)0x01A00224;

OPT_7=(int*)0x01A000A8;

SRC_7=(int*)0x01A000AC;

count_7=(int*)0x01A000B0;

DST_7=(int*)0x01A000B4;

index_7=(int*)0x01A000B8;

link_7=(int*)0x01A000BC;

OPT_reload_7=(int*)0x01A00630;

SRC_reload_7=(int*)0x01A00634;

count_reload_7=(int*)0x01A00638;

DST_reload_7=(int*)0x01A0063c;

index_reload_7=(int*)0x01A00640;

link_reload_7=(int*)0x01A00644;

*EER=0x0000000C0;//EDMA通道6和通道7的使能打开

//具体配置EDMA通道6的寄存器参数,要注意这里采用了link的技术:

即EDMA完成一帧//的数据搬移后,利用link机制,把参数,表重新载入,自动进行后续的搬移,这对于图像的显示//来说是非常必要的

*OPT_6=0x49160003;

*SRC_6=0x80000000;

*count_6=0x027002D0;//origin

*DST_6=0xb0000014;

*index_6=0x06C00002;

*link_6=0x00000210;

*OPT_reload_6=0x49160003;//具体配置EDMA通道6的重新载入的参数

*SRC_reload_6=0x80000000;

*count_reload_6=0x027002D0;//origin

*DST_reload_6=0xb0000014;

*index_reload_6=0x06C00002;

*link_reload_6=0x00000210;

*OPT_7=0x48200003;//具体配置EDMA通道7的寄存器参数

*SRC_7=0xa0000018;

*count_7=0x027002D0;//origin

*DST_7=0x80000000;//origin

*index_7=0x03600001;

*link_7=0x00000630;

*OPT_reload_7=0x48200003;//具体配置EDMA通道6的重新载入的参数

*SRC_reload_7=0xa0000018;

*count_reload_7=0x027002D0;//origin

*DST_reload_7=0x80000000;//origin

*index_reload_7=0x00000000;

*link_reload_7=0x00000630;

*(int*)0x01800010=0x00000010;

*(int*)0x01800014=0x00000010;

a=*(int*)0x90080000;//第二个十六进制数控制开关,0表示按下去

sw=(int*)0x90080000;

for(;;)

{if(data_ready)

{

if(Get_Switches==0x00000006)//*aa&0x0f000000==0x0e000000)

{

for(j1=0;j1<78;j1++)

{

for(i1=0;i1<90;i1++)

{

//对亮度进行处理

for(h1=0;h1<8;h1++)

for(h2=0;h2<8;h2++)

{

data[h2+h1*8]=*(unsignedchar*)(0x80000000+j1*720*8*2+i1*8*2+h2*2+h1*720*2);

}

Dct(data,data_dct_1);

Idct(data_dct_1,data);

for(h1=0;h1<8;h1++)

for(h2=0;h2<8;h2++)

{

*(unsignedchar*)(0x80000000+j1*720*8*2+i1*8*2+h2*2+h1*720*2)=data[h2+h1*8];

}

}

}

*OPT_6=0x49160003;

*SRC_6=0x80000000;

*count_6=0x027002D0;//origin

*DST_6=0xb0000014;

*index_6=0x06C00002;

*link_6=0x00000210;

*OPT_reload_6=0x49160003;//具体配置EDMA通道6的重新载入的参数

*SRC_reload_6=0x80000000;

*count_reload_6=0x027002D0;//origin

*DST_reload_6=0xb0000014;

*index_reload_6=0x06C00002;

*link_reload_6=0x00000210;

*(int*)0x90080000=0x08000000;

data_ready=0;

}

}

}

}

/*

interruptvoidVS_isr()

{

//*(int*)0x90080000=0x07000000;}

*/

interruptvoidEDMA_finish_isr()

{

*(unsignedvolatileint*)CIPR|=0x00000040;

data_ready=1;

*(int*)0x90080000=0x07000000;

}

intDct(unsignedchar*block,short*coeff)

{

intj1,i,j,k;

floatb[8];

floatb1[8];

floatd[8][8];

floatf0=(float).7071068;

floatf1=(float).4903926;

floatf2=(float).4619398;

floatf3=(float).4157348;

floatf4=(float).3535534;

floatf5=(float).2777851;

floatf6=(float).1913417;

floatf7=(float).0975452;

for(i=0,k=0;i<8;i++,k+=8){

for(j=0;j<8;j++){

b[j]=(float)block[k+j];

}

/*Horizontaltransform*/

for(j=0;j<4;j++){

j1=7-j;

b1[j]=b[j]+b[j1];

b1[j1]=b[j]-b[j1];

}

b[0]=b1[0]+b1[3];

b[1]=b1[1]+b1[2];

b[2]=b1[1]-b1[2];

b[3]=b1[0]-b1[3];

b[4]=b1[4];

b[5]=(b1[6]-b1[5])*f0;

b[6]=(b1[6]+b1[5])*f0;

b[7]=b1[7];

d[i][0]=(b[0]+b[1])*f4;

d[i][4]=(b[0]-b[1])*f4;

d[i][2]=b[2]*f6+b[3]*f2;

d[i][6]=b[3]*f6-b[2]*f2;

b1[4]=b[4]+b[5];

b1[7]=b[7]+b[6];

b1[5]=b[4]-b[5];

b1[6]=b[7]-b[6];

d[i][1]=b1[4]*f7+b1[7]*f1;

d[i][5]=b1[5]*f3+b1[6]*f5;

d[i][7]=b1[7]*f7-b1[4]*f1;

d[i][3]=b1[6]*f3-b1[5]*f5;

}

for(i=0;i<8;i++){

for(j=0;j<4;j++){

j1=7-j;

b1[j]=d[j][i]+d[j1][i];

b1[j1]=d[j][i]-d[j1][i];

}

b[0]=b1[0]+b1[3];

b[1]=b1[1]+b1[2];

b[2]=b1[1]-b1[2];

b[3]=b1[0]-b1[3];

b[4]=b1[4];

b[5]=(b1[6]-b1[5])*f0;

b[6]=(b1[6]+b1[5])*f0;

b[7]=b1[7];

d[0][i]=(b[0]+b[1])*f4;

d[4][i]=(b[0]-b[1])*f4;

d[2][i]=b[2]*f6+b[3]*f2;

d[6][i]=b[3]*f6-b[2]*f2;

b1[4]=b[4]+b[5];

b1[7]=b[7]+b[6];

b1[5]=b[4]-b[5];

b1[6]=b[7]-b[6];

d[1][i]=b1[4]*f7+b1[7]*f1;

d[5][i]=b1[5]*f3+b1[6]*f5;

d[7][i]=b1[7]*f7-b1[4]*f1;

d[3][i]=b1[6]*f3-b1[5]*f5;

}

for(i=0;i<8;i++){

for(j=0;j<8;j++){

*(coeff+j*8+i)=(short)d[i][j];}

}

return0;

}

intIdct(short*coeff,unsignedchar*block)

{

intj1,i,j;

floatb[8],b1[8],d[8][8];

floatf0=.7071068;

floatf1=.4903926;

floatf2=.4619398;

floatf3=.4157348;

floatf4=.3535534;

floatf5=.2777851;

floatf6=.1913417;

floatf7=.0975452;

floate,f,g,h;

/*Horizontal*/

/*Descancoefficientsfirst*/

for(i=0;i<8;i++){

for(j=0;j<8;j++){

b[j]=*(coeff+j*8+i);

}

e=b[1]*f7-b[7]*f1;

h=b[7]*f7+b[1]*f1;

f=b[5]*f3-b[3]*f5;

g=b[3]*f3+b[5]*f5;

b1[0]=(b[0]+b[4])*f4;

b1[1]=(b[0]-b[4])*f4;

b1[2]=b[2]*f6-b[6]*f2;

b1[3]=b[6]*f6+b[2]*f2;

b[4]=e+f;

b1[5]=e-f;

b1[6]=h-g;

b[7]=h+g;

b[5]=(b1[6]-b1[5])*f0;

b[6]=(b1[6]+b1[5])*f0;

b[0]=b1[0]+b1[3];

b[1]=b1[1]+b1[2];

b[2]=b1[1]-b1[2];

b[3]=b1[0]-b1[3];

for(j=0;j<4;j++){

j1=7-j;

d[i][j]=b[j]+b[j1];

d[i][j1]=b[j]-b[j1];

}

}

for(i=0;i<8;i++){

for(j=0;j<8;j++){

b[j]=d[j][i];

}

e=b[1]*f7-b[7]*f1;

h=b[7]*f7+b[1]*f1;

f=b[5]*f3-b[3]*f5;

g=b[3]*f3+b[5]*f5;

b1[0]=(b[0]+b[4])*f4;

b1[1]=(b[0]-b[4])*f4;

b1[2]=b[2]*f6-b[6]*f2;

b1[3]=b[6]*f6+b[2]*f2;

b[4]=e+f;

b1[5]=e-f;

b1[6]=h-g;

b[7]=h+g;

b[5]=(b1[6]-b1[5])*f0;

b[6]=(b1[6]+b1[5])*f0;

b[0]=b1[0]+b1[3];

b[1]=b1[1]+b1[2];

b[2]=b1[1]-b1[2];

b[3]=b1[0]-b1[3];

for(j=0;j<4;j++){

j1=7-j;

d[j][i]=b[j]+b[j1];

d[j1][i]=b[j]-b[j1];

}

}

for(i=0;i<8;i++){

for(j=0;j<8;j++){

*(block+i*8+j)=(unsignedchar)(d[i][j]);

}

}

return0;

}六、实验出现的问题、实验结果分析

在运行程序前,要先下载FPGA程序,但是在下载时经常下载失败,解决方法是重新开始下载,多试几次,不然可以通过重启主机,检查各个接口是否接好。

有时也可能是下载线有问题。

电脑主机重启后将COMS中的I/OCONFIGRATION设置为EPP,则CCS软件会打不开。

似乎每次实验都有这样的问题,所以才更需要注意。

只有在对整个过程熟练后,才能保证每一步都准确无误。

DCT、IDCT变换充分利用了图像数据的空间相关性来实现数据压缩用A口和B口。

七、实验小结和思考

通过本次实验,我们了解DSP的EDMA技术,了解DSP的中断技术;对SDRM在静态数据采集中的作用有了一定的熟悉。

DCT变换实验说明DCT、IDCT变换本身是无损的,只是由于有限精度的原因才回有精度上的损失。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2