软件架构项目报告Word格式文档下载.docx

上传人:b****3 文档编号:16578562 上传时间:2022-11-24 格式:DOCX 页数:25 大小:1.27MB
下载 相关 举报
软件架构项目报告Word格式文档下载.docx_第1页
第1页 / 共25页
软件架构项目报告Word格式文档下载.docx_第2页
第2页 / 共25页
软件架构项目报告Word格式文档下载.docx_第3页
第3页 / 共25页
软件架构项目报告Word格式文档下载.docx_第4页
第4页 / 共25页
软件架构项目报告Word格式文档下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

软件架构项目报告Word格式文档下载.docx

《软件架构项目报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件架构项目报告Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。

软件架构项目报告Word格式文档下载.docx

4.4.2算法步骤19

5系统实现20

5.1界面设计21

5.2系统集成21

5.2.1系统目录结构21

5.2.2structs具体实现22

5.3系统环境和运行23

5.3.1系统环境23

5.3.2运行效果23

6测试27

1项目概述

2需求分析

2.1系统用例图和流程图

使用基于场景的用例分析方法可知,在操作系统的场景中用户可进行的操作如下:

(1)用户加载目标股票的TXT文件,将目标股票的TXT文件生成股票走势图

(2)将目标走势图与其他走势图进行比较,计算两两之间的相似度

(3)选取与目标走势图相似度最高的走势图

(4)输出结果并保存

系统用例图如下所示:

相应的流程图如下:

2.2功能需求

通过上面对系统的分析可知,系统核心的功能主要有如下几种:

(1)批量导入样本文件;

(2)形成走势图,即股市中的K线图;

(3)计算相似度,并选取相似度最大的走势图;

因此可以将整个系统分为两大功能模块,功能模块图如下所示:

2.3非功能性需求

2.3.1性能需求

由于系统运行需要导入大量的数据,因此要求系统在算法实现上能保证尽可能的提供运行效率,降低反应时间。

同时,本系统是对股市行情的研究比较,开发的系统要求结果准确。

2.3.2质量需求

对于系统的相关质量的属性需求如下表:

质量属性序列号

质量属性要求说明

1

有导入目标股票的TXT文件方法

2

有三种不同算法来计算相似度

3

界面简洁大方,方便操作

2.3.3安全性需求

1.服务器应该在合适温度、适度的环境下工作,避免剧烈的震动;

2.各种电源线和数据线的铺设要合理而安全,避免出现意外脱接现象的发生;

3.服务器所在地区应保持电压稳定及电源的持续供应,尽量避免高频率的人为断电现象(例如:

错拉电闸、保险丝熔断等),以保持服务器中数据的一致性;

4.当提前获知断电时间时,应在网页上及时发布相关信息(例如:

服务器将于几时几分关闭),避免站点的突然关闭;

5.服务器管理员应确保服务器密码不泄漏;

6.服务器所在房间应做好安全防盗工作,避免盗窃现象的发生。

2.4可行性分析

2.4.1技术可行性

系统实现依靠相对比较熟悉的HTML、JavaScript、java语言,功能实现也相对简单。

因此完成此项目的风险较小。

2.4.2经济可行性

本系统所用到的应用软件、硬件系统都易于获得.因此,开发成本较低。

而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。

所以,从经济的角度来看,该系统可行。

2.4.3操作可行性

本系统是直接面对用户的,而用户往往对计算机并不是非常熟悉。

这就要求系统能够提供良好的用户接口,易用的人机交互界面。

要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。

界面简洁友好,操作方便。

3总体设计

4详细设计

4.1感知哈希算法

4.1.1算法概述

感知哈希算法pHash(PerceptualHashAlgorithm),意思是为图片生成一个指纹(字符串格式),两张图片的指纹越相似,说明两张图片就越相似.。

为降低均值对算法的影响程度,pHash算法使用离散余弦变换(DCT)来获取图片的低频成分。

而对于两张图片相似度的计算则是基于汉明距离的。

离散余弦变换(DCT)是种图像压缩算法,它将图像从像素域变换到频率域。

然后一般图像都存在很多冗余和相关性的,所以转换到频率域之后,只有很少的一部分频率分量的系数才不为0,大部分系数都为0(或者说接近于0)。

汉明距离是以理查德·

卫斯里·

汉明的名字命名的。

在信息论中,汉明距离描述的是两个n长码字

之间的距离,

其中,

表示模2加运算,

.

表示两码字在相同位置上不同码符号的数目的总和,它能够反映两码字之间的差异,进而提供码字之间的相似程度的客观依据。

4.1.2算法详细步骤

(1)缩小尺寸:

pHash以小图片开始,但图片大于8*8,32*32是最好的。

这样做的目的是简化了DCT的计算,而不是减小频率。

具体的代码实现如下图:

(2)简化色彩:

将图片转化成灰度图像,进一步简化计算量。

下图是转化为灰度图像的函数grayscale()的实现;

(3)计算DCT:

计算图片的DCT变换,得到32*32的DCT系数矩阵。

下图是进行二维DCT变换的函数applyDCT()的实现。

(4)缩小DCT:

虽然DCT的结果是32*32大小的矩阵,但我们只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。

(5)计算平均值:

如同均值哈希一样,计算DCT的均值。

(6)计算hash值:

这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为“1”,小于DCT均值的设为“0”。

组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。

(7)对比图片指纹:

得到图片的指纹后,就可以对比不同的图片的指纹,计算出64位中有多少位是不一样的。

一般情况下,如果不相同的数据位数不超过5,就说明两张图片很相似,如果大于10,说明它们是两张不同的图片。

这里是基于汉明距离来对相似度进行计算,定义的相似度计算公式为:

下面两张图片分别是对汉明距离和相似度的实现函数,具体如下:

.

4.2Levenshtein距离算法

4.2.1算法概述

我们这里所要研究的相似度算法是这样进行的,UML图如上。

4.2.2生成图片的指纹

在我们的程序中,生成图片哈希值的方法是produceFingerPrint(),他返回的是一个String类型的字符串类型。

这个方法里面主要涉及6个部分:

(1)读取图片

实现这个功能的方法是通过readImage(filename)方法来完成的,这个方法封装在ImageRead类中,它通过获取图片的路径名来得到该图片。

代码如下:

(2)将图片缩小到固定尺寸

因为我们得到的图片可能会大小不一致,多以我们需要将他们缩小成一致的格式,这里我们将他们缩小成8*8的尺寸,总共64个像素,除去了图片的细节,只保留了结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

实现方法是:

thumb(BufferedImagesource,intwidth,intheight,booleanb),代码如下:

(3)简化色彩

将缩小后的图片,转为64级灰度。

也就是说,所有像素点总共只有64种颜色。

通过灰度值的计算来实现的,方法为rgbToGray()

(4)计算平均值

计算64个像素的灰度平均值,通过方法average()来实现。

(5)比较像素灰度

将每个像素的灰度,与平均值进行比较。

大于或等于平均值,记为1;

小于平均值,记为0。

(6)计算哈希值

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。

组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

4.2.3计算编辑距离,得出相似度

计算图片指纹的相似度。

进而算出图片的相似度。

(1)编辑距离概述

Levenshtein距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。

许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫LevenshteinDistance。

(2)举例说明

a.首先是有两个字符串,这里写一个简单的abc和abe

b.将字符串想象成下面的结构。

A处 

是一个标记,为了方便讲解,不是这个表的内容。

abc

a

b

c

abe

1

2

A处

e

c.来计算A处 

出得值

它的值取决于:

左边的1、上边的1、左上角的0.

按照Levenshteindistance的意思:

上面的值和左面的值都要求加1,这样得到1+1=2。

由于是两个a相同,左上角的值加0.这样得到0+0=0。

这是后有三个值,左边的计算后为2,上边的计算后为2,左上角的计算为0,所以A处 

取他们里面最小的0.

d.于是表成为下面的样子

B处

在B处 

会同样得到三个值,左边计算后为3,上边计算后为1,在B处 

由于对应的字符为a、b,不相等,所以左上角应该在当前值的基础上加1,这样得到1+1=2,在(3,1,2)中选出最小的为B处的值。

e.于是表就更新了

C处

C处 

计算后:

上面的值为2,左边的值为4,左上角的:

a和e不相同,所以加1,即2+1,左上角的为3。

在(2,4,3)中取最小的为C处 

的值。

f.于是依次推得到

D处 

G处 

B处 

E处 

H处 

F处 

I处 

I处:

表示abc和abe有1个需要编辑的操作。

这个是需要计算出来的。

同时,也获得一些额外的信息。

A处:

表示a 

和a 

需要有0个操作。

字符串一样

B处:

表示ab 

需要有1个操作。

C处:

表示abe 

需要有2个操作。

D处:

和ab 

E处:

F处:

和ab 

G处:

和abc 

H处:

表示ab 

和abc 

表示abe 

g.计算相似度

先取两个字符串长度的最大值maxLen,用1-(需要操作数除maxLen),得到相似度。

例如abc和abe一个操作,长度为3,所以相似度为1-1/3=0.666

(3)具体实现

具体实现代码如下:

4.3欧式距离相似度算法

4.3.1算法概述

该算法的核心思想是计算两条直线的欧氏距离。

4.3.2算法步骤

①运用道格拉斯-普克算法将折线简化,提取出折线的特征点。

步骤如下,

(1)在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离,如下图

(1)。

(2)选其最大者与阈值相比较,若大于阈值,则离该直线距离最大的点保留,否则将直线两端点间各点全部舍去,如下图

(2),第4点保留。

(3)依据所保留的点,将已知曲线分成两部分处理,重复第1、2步操作,迭代操作,即仍选距离最大者与阈值比较,依次取舍,直到无点可舍去,最后得到满足给定精度限差的曲线点坐标,如下图(3)、(4)依次保留第6点、第7点,舍去其他点,即完成线的化简。

具体的代码实现如下:

②将两条折线A,B垂直平移至X轴,如下图二。

③将其中一条折线A缩放一定比例得到A’;

使得A’上所有点的平均值与B相等,如下图三。

④通过A’上的点向B做垂线,求出垂距H,得出累计垂距Hs如下图四。

⑤相似度用1/Hs表示,当Hs=0时,取相似度为1,算法实现为代码二、代码三。

4.4加权最优解

4.4.1算法概述

上面三种算法或多或少有相应的侧重,因此我们小组决定根据上面三种算法提供一个加权的最优解。

在获得三种算法得出的相关的相似度值后,为每种算法赋予相关的加权值,通过加权运算获得最优的结果。

4.4.2算法步骤

(1)获得三面三种算法的结果;

(2)进行加权运算。

分别给算法A(感知哈希算法)、算法B(Levenshtein距离算法)和算法C(欧式距离相似度算法)权数为0.5、0.3、0.2。

具体代码实现如下:

5系统实现

整个系统架构思想是基于构件的软件开发思想,通过运用structs框架,将前端界面设计和后台功能实现相结合。

具体的界面设计和系统集成如下介绍。

5.1界面设计

界面设计秉承简单实用的设计思想,将整个系统需求的具体功能在首界面就全部展现出来了。

同时,为增加用户的体验好感度,运用了相关的JavaScript技术实现。

具体的界面效果如下图:

5.2系统集成

5.2.1系统目录结构

整个项目既有前台界面编写,又有后台算法实现,由于不同的模块代码编写的人员不同,最终需要进行代码的集成整合。

通过对代码的集成最后形成的代码系统目录如下图所示:

5.2.2structs具体实现

Structs部分的实现包括相关的VO层、action、service以及structs配置文件实现。

在这里就不对其一一截图展示了,其中核心的action源码如下图所示:

5.3系统环境和运行

5.3.1系统环境

集成开发环境为MyEclipse10

服务器部署环境为Tomcat

Java运行环境为JDK1.8

5.3.2运行效果

在首页进行导入样本文件后,可以分别进行三种算法的计算得出相应的结果。

然后还能进行加权最优解的获得。

(1)算法A(感知哈希算法)运行效果

后台运行如下图:

结果展示如下:

(2)算法B(Levenshtein距离算法运行效果

后台运行如下:

(3)算法C(欧式距离相似度算法运行效果

(4)加权最优解运行效果

6测试

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

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1