导航:首页 > 源码编译 > 最值算法实现评价实验报告

最值算法实现评价实验报告

发布时间:2022-09-25 23:31:16

① 在十个数里找最大值和最小值和次大直次小值,用两种以上算法实现,并且比较时间复杂度和空间复杂度

设10个数为a[1]...a[10]1、a[1]与a[2]比,较大值与a[3]比,再取较大值与a[4]比,以此类推,得到最大值;同理求得最小值2、a[1]与a[2]比,a[3]与a[4]比,以此类推,分为五组,得出五个较大的值;再将这五个较大值两两一组余一个值,每组选出较大值,于是得到3个值;再把这三个值分为两个一组余一个值,用同样的方法最终得到最大值。同理求得最小值。#include<stdio.h>voidmain(){inta[10];inti,min,max;printf("输入10个数:");for(i=0;i<10;i++)scanf("%d",&a[i]);min=a[0];for(i=0;i<10;i++)if(min>a[i])min=a[i];max=a[0];for(i=0;i<10;i++)if(max<a[i])max=a[i];printf("max=%dmin=%d",max,min);}

② 最优化原理的算法实现

动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。使用动态规划求解问题,最重要的就是确定动态规划三要素:问题的阶段,每个阶段的状态以及从前一个阶段转化到后一个阶段之间的递推关系。递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处。确定了动态规划的这三要素,整个求解过程就可以用一个最优决策表来描述,最优决策表示一个二维表,其中行表示决策的阶段,列表示问题状态,表格需要填写的数据一般对应此问题的在某个阶段某个状态下的最优值(如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。下面分别以求解最大化投资回报问题和最长公共子序列问题为例阐述用动态规划算法求解问题的一般思路。
实例:
最大化投资回报问题
某人有一定的资金用来购买不同面额的债卷,不同面额债卷的年收益是不同的,求给定资金,年限以及债卷面额、收益的情况下怎样购买才能使此人获得最大投资回报。
程序输入约定:第一行第一列表示资金(1000的倍数)总量,第二列表示投资年限;第二行表示债卷面额总数;从第三行开始每行表示一种债卷,占用两列,前一列表示债卷面额,后一列表示其年收益,如下输入实例,
10000 1
2
4000 400
3000 250
程序实现如下,注释几乎说明了一切,所以不再另外分析。
/// 此数组是算法的关键存储结构,用来存储不同阶段各种债卷
/// 组合下对应可获取的最大利息。
int saifa[80005];
/// 此函数用于计算当前债卷在不同购买额下的最优利息情况,
/// 注意此时的利息情况是基于上一次债卷的情况下计算得到的,
/// 也就是说当前利息最优是基于上一次利息最优的基础上计算出来的,
/// 这也正好体现了动态规划中“最优化原则”:不管前面的策略如何,
/// 此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。
/*
动态规划的求解过程一般都可以用一个最优决策表来描述,
对于本程序,以示例输入为例,对于第一年,其最优决策表如下:
0 1 2 3 4 5 6 7 8 9 10(*1000) -- (1)
0 0 0 0 400 400 400 400 800 800 800 -- (2)
0 0 0 250 400 400 500 650 800 900900 -- (3)
(1) -- 表示首先选利息为400的债卷在对应资金下的最优利息。
(2) -- 表示可用来购买债卷的资金。
(3) -- 表示在已有状态下再选择利息为300的债卷在对应资金下的最优利息。
注意上面表格,在求购买利息为300的债卷获得的最优收益的时候,
参考了以前的最优状态,以3行8列的650为例,7(*1000)可以
在以前购买了0张4000的债卷的基础上再2张3000的,也可以在以前购
买了1张4000的基础上再买1张3000,经比较取其收益大的,这就是典
型的动态规划中的当前最优状态计算。
本程序中把上面的最优决策二维表用一个一维数组表示,值得借鉴。
*/
void add(int a,int b)
{
cout << a << << b << endl; // for debug
for(int i=0;i<=80000;i++)
{
if(i+a > 80000)
{
break;
}
if(saifa[i]+b > saifa[i+a]) // 累计同时购买多种债卷时的利息
{
saifa[i+a] = saifa[i] + b;
}
if(i<200) // for debug
cout << i << -<< saifa[i] << ;
}
cout << endl; // for debug
}
int main(void)
{
int n,d,money,year,pay,bond;
int ii,i;
scanf(%d,&n);
for(ii=0;ii<n;ii++)
{
memset(saifa,0,sizeof(saifa));
scanf(%d%d,&money,&year);
scanf(%d,&d);
for(i=0;i<d;i++)
{
scanf(%d%d,&pay,&bond);
add(pay/1000,bond);
}
// 计算指定年限内最优组合的本金利息总额
for(i=0;i<year;i++)
{
cout << saifa[money/1000]<< ; // for debug
money += saifa[money/1000];
}
cout << endl; // for debug
printf(%d ,money);
}
return 0;
}
上述程序实现方法同样适合于背包问题,最优库存问题等,只是针对具体情况,最优决策表的表示和生成会有所不同。

③ 求一篇数值分析实验报告

数值分析实验报告

姓名: 学号:

实验1:

1. 实验项目的性质和任务

通过上机实验,对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。

2.教学内容和要求

1)对高阶多多项式

编程求下面方程的解

并绘图演示方程的解与扰动量 的关系。(实验2.6)

2)对 ,生成对应的Hilbert矩阵,计算矩阵的条件数;通过先确定解获得常向量b的方法,确定方程组

最后,用矩阵分解方法求解方程组,并分析计算结果。(第三章,实验题4)

3)对函数

的Chebyshev点

编程进行Lagrange插值,并分析插值结果。(第四章 实验1)

项目涉及核心知识点

病态方程求解、矩阵分解和方程组求解、Lagrange插值。

重点与难点

算法设计和matlab编程。

1)a.实验方案:

先创建一个20*50的零矩阵X,然后利用Matlab中的roots()和poly()函数将50个不同的ess扰动值所产生的50个解向量分别存入X矩阵中。然后再将ess向量分别和X的20个行向量绘图。即可直观的看出充分小的扰动值会产生非常大的偏差。即证明了这个问题的病态性。

b.编写程序:

>> X=zeros(20,50);

>> ve=zeros(1,21);

>> ess=linspace(0,0.00001,50);k=1;

>> while k<=50

ve(2)=ess(k);

X(1:20,k)=roots(poly(1:20)+ve);

k=k+1;

end

>> m=1;

>> while m<=20

figure(m),plot(ess,X(m,:));

m=m+1;

end

C.实验结果分析和拓展

由上面的实验结果可以看出一个充分小的扰动值可以让方程的解产生非常大的偏差,而且这个偏差随着ess的变大偏差也随即变大。但可以看出在相对小的根处根比较稳定,也就是说这些根关于ess并不敏感,而在较大根处时,根很不稳定,即这些解关于ess的变化是敏感的。这就说明了这个问题本身就是一个病态问题,与算法好坏无关。

若扰动在x^18处,只要把程序中的ve(2)改为ve(3)即可,其图形和此类似。

d.实验结论:

高次多项式扰动求方程解问题是一个病态问题。

2)a.实验方案:

先创建一个20*20的零矩阵A,再通过给定解x和Hilbert矩阵求出列向量b,然后通过LU分解法求出方程HX=b的解X,然后将x-X’这一行向量存入A矩阵中,形成一循环,最后,如果Hilbert矩阵非病态的话,则可输出一个20*20的对角矩阵。

b.编写程序:

>> n=2;

>> A=zeros(20,20);

>> while n<=20

x=1:n;

H=hilb(n);

b=H*x';

[L U]=lu(H);

y=L\b;X=U\y;

A(n,1:n)=x-X';

n=n+1;

end

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 4.455948e-017.

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 7.948463e-017.

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 1.798429e-016.

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 7.626119e-018.

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 6.040620e-017.

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 5.444860e-017.

>> A

A =

1.0e+003 *

Columns 1 through 10

0 0 0 0 0 0 0 0 0 0

-0.0000 0.0000 0 0 0 0 0 0 0 0

-0.0000 0.0000 -0.0000 0 0 0 0 0 0 0

-0.0000 0.0000 -0.0000 0.0000 0 0 0 0 0 0

0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0 0 0 0

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0 0 0 0

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0 0

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0001 -0.0003 0.0006 -0.0007 0.0005

0.0000 -0.0000 0.0000 -0.0001 0.0005 -0.0027 0.0096 -0.0223 0.0348 -0.0361

0.0000 -0.0000 0.0000 -0.0004 0.0030 -0.0098 0.0080 0.0593 -0.2570 0.5154

0.0000 -0.0000 0.0000 -0.0001 0.0005 -0.0029 0.0095 -0.0171 0.0086 0.0347

0.0000 -0.0000 0.0000 -0.0000 0.0003 -0.0016 0.0059 -0.0133 0.0145 0.0094

0.0000 -0.0000 0.0000 -0.0001 0.0009 -0.0042 0.0118 -0.0182 0.0082 0.0185

0.0000 0.0000 -0.0000 0.0002 -0.0027 0.0187 -0.0762 0.1806 -0.2249 0.0813

0.0000 0.0000 -0.0000 0.0001 -0.0017 0.0120 -0.0497 0.1224 -0.1699 0.1064

0.0000 -0.0000 0.0000 -0.0003 0.0028 -0.0137 0.0371 -0.0464 -0.0164 0.1243

Columns 11 through 20

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

-0.0000 0 0 0 0 0 0 0 0 0

-0.0002 0.0000 0 0 0 0 0 0 0 0

0.0238 -0.0091 0.0015 0 0 0 0 0 0 0

-0.6091 0.4336 -0.1727 0.0296 0 0 0 0 0 0

-0.0944 0.1170 -0.0824 0.0318 -0.0053 0 0 0 0 0

-0.0624 0.1107 -0.1110 0.0674 -0.0232 0.0035 0 0 0 0

-0.0289 0.0059 0.0103 0.0082 -0.0263 0.0181 -0.0042 0 0 0

0.0524 0.1690 -0.3743 -0.1862 1.0944 -1.2171 0.6004 -0.1156 0 0

-0.0327 0.1652 -0.3051 -0.0485 0.7195 -0.9387 0.5714 -0.1699 0.0191 0

-0.1120 -0.0421 0.0883 0.0222 -0.0628 0.1013 -0.2902 0.3783 -0.2173 0.0469

C.实验结果分析和拓展:

当Hilbert矩阵的阶数比较小时,其解X和给定解x偏差不大;但当Hilbert矩阵的阶数变大时,偏差就会变大。这就说明了Hilbert矩阵是一组病态矩阵,从Matlab运行中的Warning可以看出,其条件数相当大。

d.实验结论:

Hilbert矩阵是一组病态矩阵,用它来做线性方程的系数矩阵时,往往会得出与精确解相差较大的解。

3)a.实验方案:

在区间【-1,1】上取点,先按Chebyshev取点,即xk=cos((2k-1)pi/2/(n+1))取点,然后再进行拉格朗日插值,绘出图和插值点。而后再进行均匀取点再拉格朗日插值。将两种插值结果进行比较。

b.编程实现:

for a=1:10

b=a+1;

for c=1:b

X(c)=cos((2*c-1)*pi/2/(a+1));

Y(c)=1/(1+25*X(c)^2);

x=-1:0.05:1;

end

m=length(x);

for i=1:m

z=x(i);s=0;

for k=1:b

L=1;

for j=1:b

if j~=k

L=L*(z-X(j))/(X(k)-X(j));

end

end

s=s+L*Y(k);

end

y(i)=s;

end

figure(1)

plot(x,y,'r');

hold on;

figure(2)

plot(X,Y,'b*')

hold on

end

for a=2:2:10

b=a+1;

X=linspace(-1,1,b);

Y=1./(1+25*X.^2);

x=-1:0.05:1;

m=length(x);

for i=1:m

z=x(i);s=0;

for k=1:b

L=1;

for j=1:b

if j~=k

L=L*(z-X(j))/(X(k)-X(j));

end

end

s=s+L*Y(k);

end

y(i)=s;

end

figure(1)

plot(x,y,'r');

hold on;

figure(2)

plot(X,Y,'b*')

hold on

end

C.实验结果分析及拓展:

均匀插值时,当n比较大时,就会出现多项式插值的Runge现象,即当插值节点的个数n增加时,Lagrange插值多项式对原来函数的近似并非越来越好。当进行非等距节点插值时,其近似效果明显要比均匀插值是要好。原因是非均匀插值时,在远离原点处的插值节点比较密集,所以其插值近似效果要比均匀插值时的效果要好。

d.实验结论:

利用Chebyshev点进行非等距节点插值的对原函数的近似效果要比均匀节点插值的好。

④ :数据结构 对学习过程评价课程内容要求的5个实验根据相应章节的算法思想,编写程序 ,分别写出实验报告

写实验报告?

⑤ 实验报告格式

实验名称

要用最简练的语言反映实验的内容。如验证某程序、定律、算法,可写成“验证×××”;分析×××。

学生姓名、学号、及合作者

实验日期和地点(年、月、日)

实验目的

目的要明确,在理论上验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。[2]

实验设备(环境)及要求

在实验中需要用到的实验用物,药品以及对环境的要求。

实验原理

在此阐述实验相关的主要原理。

实验内容

这是实验报告极其重要的内容。要抓住重点,可以从理论和实践两个方面考虑。这部分要写明依据何种原理、定律算法、或操作方法进行实验。详细理论计算过程。

实验步骤

只写主要操作步骤,不要照抄实习指导,要简明扼要。还应该画出实验流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。

具体的范文模板
链接:链接: https://pan..com/s/1cXhjjCVFxjqu_hYLWaTnRg

?pwd=xjak 提取码: xjak

⑥ 分析i+i*i,使用算法优先分析其过程,实验报告问题,求解答,急急急~~~

按照优先级来说*在+之前,所以会先计算i*i,然后算出结果之后在用这个结果去加上之前的i,举个例子
假设i的值等于2,那么i+i*i的结果就是:
先计算i*i,也就是2*2,等于4
然后在用i去加上这个值,也就是2+4
最后等于6

⑦ 图像边缘检测算法的研究与实现 的开题报告

摘 要 针对基于PC实现的图像边缘检测普遍存在的执行速度慢、不能满足实时应用需求等缺点,本文借助于TI公司的TMS320DM642图像处理芯片作为数字图像处理硬件平台,DSP/BIOS为实时操作系统,利用CCS开发环境来构建应用程序;并通过摄像头提取视频序列,实现对边缘检测Sobel算子改进[1]。
关键词 DM642;Sobel算子;程序优化;图像边缘检测

1 引言
边缘是图像中重要的特征之一,是计算机视觉、模式识别等研究领域的重要基础。图像的大部分主要信息都存在于图像的边缘中,主要表现为图像局部特征的不连续性,是图像中灰度变化比较强烈的地方,也即通常所说的信号发生奇异变化的地方。经典的边缘检测算法是利用边缘处的一阶导数取极值、二阶导数在阶梯状边缘处呈零交叉或在屋顶状边缘处取极值的微分算法。图像边缘检测一直是图像处理中的热点和难点。
近年来,随着数学和人工智能技术的发展,各种类型的边缘检测算法不断涌现,如神经网络、遗传算法、数学形态学等理论运用到图像的边缘检测中。但由于边缘检测存在着检测精度、边缘定位精度和抗噪声等方面的矛盾及对于不同的算法边缘检测结果的精度却没有统一的衡量标准,所以至今都还不能取得令人满意的效果。另外随着网络和多媒体技术的发展,图像库逐渐变得非常庞大;而又由于实时图像的目标和背景间的变化都不尽相同,如何实现实时图像边缘的精确定位和提取成为人们必须面对的问题。随着DSP芯片处理技术的发展,尤其是在图像处理方面的提高如TMS320C6000系列,为实现高效的、实时的边缘检测提供了可能性[5]。在经典的边缘检测算法中,Sobel边缘检测算法因其计算量小、实现简单、处理速度快,并且所得的边缘光滑、连续等优点而得到广泛的应用。本文针对Sobel算法的性能,并借助于TMS320DM642处理芯片[3],对该边缘检测算法进行了改进和对程序的优化,满足实时性需求。
2 Sobel边缘检测算法的改进
经典的Sobel图像边缘检测算法,是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个是检测垂直边缘,一个是检测水平边缘。算法的基本原理:由于图像边缘附近的亮度变化较大,所以可以把那些在邻域内,灰度变化超过某个适当阈值TH的像素点当作边缘点。Sobel算法的优点是计算简单,速度快。但由于只采用了两个方向模板,只能检测水平方向和垂直方向的边缘,因此,这种算法对于纹理较复杂的图像,其边缘检测效果欠佳;同时,经典Sobel算法认为,凡灰度新值大于或等于阈值的像素点都是边缘点。这种判定依据是欠合理的,会造成边缘点的误判,因为多噪声点的灰度新值也很大。
2.1 图像加权中值滤波
由于图像中的边缘和噪声在频域中均表现为高频成分,所以在边缘检测之前有必要先对图像进行一次滤波处理,减少噪声对边缘检测的影响。中值滤波是一种非线性信号的处理方法[2],在图像处理中,常用来保护边缘信息;保证滤波的效果。加权中值滤波,首先对每个窗口进行排序,取适当的比例,进行曲线拟合,拟合后的曲线斜率表征了此窗口的图像特征,再根据图像各部分特性适当的选择权重进行加权。
2.2 增加方向模板
除了水平和垂直两方向外,图像的边缘还有其它的方向,如135o和45o等,为了增加算子在某一像素点检测边缘的精度,可将方向模板由2个增加为8个即再在经典的方向模板的基础上增加6个方向模板,如图1所示。
2.3 边缘的定位及噪声的去除
通常物体的边缘是连续而光滑的,且边缘具有方向和幅度两个特征,而噪声是随机的。沿任一边缘点走向总能找到另一个边缘点,且这两个边缘点之间的灰度差和方向差相近。而噪声却不同,在一般情况下,沿任一噪声点很难找到与其灰度值和方差相似的噪声点[4]。基于这一思想,可以将噪声点和边缘点区分开来。对于一幅数字图像f(x,y),利用上述的8个方向模板Sobel算子对图像中的每个像素计算,取得其中的最大值作为该点的新值,而该最大值对应的模板所表示的方向为该像素点的方向。若|f(x,y)-f(x+i,y+j)|>TH2,对于任意i=0,1,-1;j=0,1,-1均成立,则可判断点(x,y)为噪声点。图2给出了图像边缘检测系统改进算法的软件流程图。

图1 边缘检测8个方向模板

图2 系统结构图
3 基于TMS320DM642的图像处理的设计及算法优化
3.1 TMS320DM642功能模块及图像处理系统的硬件结构
DSP以高速数字信号处理为目标进行芯片设计,采用改进的哈佛结构(程序总线和数据总线分开)、内部具有硬件乘法器、应用流水线技术、具有良好的并行性和专门用于数字信号处理的指令及超长指令字结构(VLIW)等特点;能完成运算量大的实时数字图像处理工作。
TMS320DM642是TI公式最近推出的功能比较强大的TMS320C6x系列之一,是目前定点DSP领域里性能较高的一款[6]。其主频是600MHz,8个并行运算单元、专用硬件逻辑、片内存储器和片内外设电路等硬件,处理能力可达4800MIPS。DM642基于C64x内核,并在其基础上增加了很多外围设备和接口,因而在实际工程中的应用更为广泛和简便。本系统使用50 MHz晶体震荡器作为DSP的外部时钟输入,经过内部锁相环12倍频后产生600 MHz的工作频率。DM642采用了2级缓存结构(L1和L2),大幅度提高了程序的运行性能。片内64位的EMIF(External Memory Interface)接口可以与SDRAM、Flash等存储器件无缝连接,极大地方便了大量数据的搬移。更重要的是,作为一款专用视频处理芯片,DM642包括了3个专用的视频端口(VP0~VP2),用于接收和处理视频,提高了整个系统的性能。此外,DM642自带的EMAC口以及从EMIF 口扩展出来的ATA口,还为处理完成后产生的海量数据提供了存储通道。
本系统是采用瑞泰公司开发的基于TI TMS320DM642 DSP芯片的评估开发板——ICETEK DM642 PCI。在ICETEK DM642 PCI评估板中将硬件平台分为五个部分,分别是视频采集、数据存储、图像处理、结果显示和电源管理。视频采集部分采用模拟PAL制摄像头,配合高精度视频A/D转换器得到数字图像。基于DSP的视频采集要求对视频信号具备采集,实时显示、对图像的处理和分析能力。视频A/D采样电路—SAA7115与视频端口0或1相连,实现视频的实时采集功能。视频D/A电路—SAA7105与视频口2相连,视频输出信号支持RGB、HD合成视频、PAL/NTSC复合视频和S端子视频信号。通过I2C总线对SAA7105的内部寄存器编程实现不同输出。
整个系统过程由三个部分组成:图像采集—边缘处理—输出显示,如图2所示。摄像头采集的视频信号经视频编码器SAA7115数字化,DM642通过I2C总线对SAA7115进行参数配置。在SAA7115内部进行一系列的处理和变换后形成的数字视频数据流,输入到核心处理单元DM642。经过DSP处理后的数字视频再经过SAA7105视频编码器进行D/A转换后在显示器上显示最终处理结果。
3.2 图像处理的软件设计和算法优化的实现
由于在改进Sobel边缘检测算子性能的同时,也相对增加了计算量,尤其是方向模板的增加,每个像素点均由原来的2次卷积运算增加为8次卷积运算,其实时性大大减弱。为了改进上述的不足,在深入研究处理系统和算法后,针对TMS320DM642的硬件结构特点,研究适合在TMS320DM642中高效运行的Sobel改进算法,满足实时处理的要求。整个程序的编写和调试按照C6000软件开发流程进行,流程分为:产生C代码、优化C代码和编写线性汇编程序3个阶段。使用的工具是TI的集成开发环境CCS。在CCS下,可对软件进行编辑、编译、调试、代码性能测试等工作。在使用C6000编译器开发和优化C代码时[7-8],对C代码中低效率和需要反复调用的函数需用线性汇编重新编写,再用汇编优化器优化。整个系统的控制以及数字图像处理是用C程序实现,大部分软件设计采用C程序实现,这无疑提高了程序的可读性和可移植性,而汇编程序主要是实现DM642的各部分初始化。其边缘检测优化算法在DM642中的实现步骤具体如下:
S1:根据DM642的硬件结构要求和控制寄存器设置,初始化系统并编写实现边缘检测算法的C程序。
S2:借助CCS开发环境的优化工具如Profiler等产生.OUT文件。
S3:根据产生的附件文件如.MAP文件,分析优化结果及源程序结构,进一步改进源程序和优化方法。
S4:使用CCS中调试、链接、运行等工具,再生成.OUT可执行文件。
S5:运行程序,如果满足要求则停止;否则重复步骤S2~S4直至满足使用要求。
4 实验结果
本文以Lena图像为例根据上述的硬件环境和算法实现的原理和方法,图4~图6分别给出了在该系统下采集的视频Lena图像及使用边缘检测算子和改进后处理的结果。由实验结果可以看出,在该系统下能实时完成视频图像的处理,并且给出的边缘检测算子能较好的消除噪声的影响,边缘轮廓清晰。该算法不仅能抑制图像中大部分噪声和虚假边缘,还保证了较高的边缘点位精度。

图4 Lena原始图像 图5 传统Sobel算子 图6 改进Sobel算子

5 总结
本文实现了在TMS320DM642评估板上用改进的Sobel算子对实时图像进行边缘检测,无延迟地得到边缘图像。边缘检测效果较好,既提高了图像检测的精度又满足了实时性的要求。从检测结果看,利用该改进后的算子在边缘精确定位、边缘提取都达到了很好的效果,且抗噪声能力强,并为目标跟踪、无接触式检测、自动驾驶、视频监控等领域的应用提供了坚实的基础。
参考文献
[1] 王磊等. 基于Sobel理论的边缘提取改善方法[J].中国图像图形学报,2005.10
[2] 陈宏席. 基于保持平滑滤波的Sobel算子边缘检测.兰州交通大学学报,2006,25(1):86—90
[3] 熊伟. 基于TMS320DM642的多路视频采集处理板卡硬件设计与实现[ M]. 国外电子元器件,2006
[4] 朱立.一种具有抗噪声干扰的图像边缘提取算法的研究[J].电子技术应用.2004,25(1)
[5] 刘松涛,周晓东.基于TMS320C6201的实时图像处理系统[J].计算机工程,2005(7):17—23
[6] TI TMS320DM642 video/imaging fixed-point digital signal processor data manual,2003
[7] TMS320C6x Optimizing C Compiler User’s Guide’ TEXAS INSTRUMENTS”,2002
[8] TMS320C32x Optimizing C/C++ Compiler User's Guide,Texas Instruments Incorporated,2001

阅读全文

与最值算法实现评价实验报告相关的资料

热点内容
企业网搭建及应用pdf 浏览:742
symanteclinux 浏览:876
程序员朋友化妆改造 浏览:491
应用被加密但不知道密码 浏览:584
百度云黑马android 浏览:773
java格式化long 浏览:893
汽车如何加密文档 浏览:625
公司理财第9版pdf 浏览:524
微信个人表情在文件夹 浏览:833
加密狗密码监控 浏览:437
重载发生在编译时 浏览:417
怎么用app买东西 浏览:532
ug后处理多坐标宏命令 浏览:34
性教育pdf 浏览:863
解释方式编译方式名词解释 浏览:851
wrf编译出现module 浏览:616
插入算法最基础代码 浏览:27
powermill和ug编程 浏览:843
vf命令按钮 浏览:283
涂鸦王国app怎么 浏览:37