




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.软件架构项目报告目录1 项目概述42 需求分析42.1系统用例图和流程图42.2功能需求52.3非功能性需求62.3.1性能需求62.3.2 质量需求62.3.3安全性需求62.4可行性分析62.4.1技术可行性72.4.2经济可行性72.4.3操作可行性73 总体设计74 详细设计74.1感知哈希算法74.1.1算法概述74.1.2 算法详细步骤84.2 Levenshtein距离算法104.2.1算法概述104.2.2生成图片的指纹114.2.3计算编辑距离,得出相似度134.3 欧式距离相似度算法164.3.1算法概述164.3.2算法步骤164.4 加权最优解194.4.1算法概述1
2、94.4.2算法步骤195 系统实现205.1界面设计215.2系统集成215.2.1系统目录结构215.2.2 structs具体实现225.3系统环境和运行235.3.1系统环境235.3.2运行效果236 测试271 项目概述2 需求分析2.1系统用例图和流程图使用基于场景的用例分析方法可知,在操作系统的场景中用户可进行的操作如下:(1)用户加载目标股票的TXT文件,将目标股票的TXT文件生成股票走势图(2)将目标走势图与其他走势图进行比较,计算两两之间的相似度(3)选取与目标走势图相似度最高的走势图(4)输出结果并保存系统用例图如下所示:相应的流程图如下:2.2功能需求通过上面对系统的
3、分析可知,系统核心的功能主要有如下几种:(1) 批量导入样本文件;(2) 形成走势图,即股市中的K线图;(3) 计算相似度,并选取相似度最大的走势图;因此可以将整个系统分为两大功能模块,功能模块图如下所示:2.3非功能性需求2.3.1性能需求由于系统运行需要导入大量的数据,因此要求系统在算法实现上能保证尽可能的提供运行效率,降低反应时间。同时,本系统是对股市行情的研究比较,开发的系统要求结果准确。2.3.2 质量需求对于系统的相关质量的属性需求如下表:质量属性序列号 质量属性要求说明 1 有导入目标股票的TXT文件方法2 有三种不同算法来计算相似度3界面简洁大方,方便操作 2.3.3安全性需求
4、1. 服务器应该在合适温度、适度的环境下工作,避免剧烈的震动;2. 各种电源线和数据线的铺设要合理而安全,避免出现意外脱接现象的发生;3. 服务器所在地区应保持电压稳定及电源的持续供应,尽量避免高频率的人为断电现象(例如:错拉电闸、保险丝熔断等),以保持服务器中数据的一致性;4. 当提前获知断电时间时,应在网页上及时发布相关信息(例如:服务器将于几时几分关闭),避免站点的突然关闭;5. 服务器管理员应确保服务器密码不泄漏;6. 服务器所在房间应做好安全防盗工作,避免盗窃现象的发生。2.4可行性分析2.4.1技术可行性系统实现依靠相对比较熟悉的HTML、JavaScript、java语言,功能实
5、现也相对简单。因此完成此项目的风险较小。2.4.2经济可行性本系统所用到的应用软件、硬件系统都易于获得.因此,开发成本较低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。2.4.3操作可行性本系统是直接面对用户的,而用户往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。界面简洁友好,操作方便。3 总体设计4 详细设计4.1感知哈希算法4.1.1算法概述感知哈希算法pHash(Perc
6、eptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似.。为降低均值对算法的影响程度,pHash算法使用离散余弦变换(DCT)来获取图片的低频成分。而对于两张图片相似度的计算则是基于汉明距离的。离散余弦变换(DCT)是种图像压缩算法,它将图像从像素域变换到频率域。然后一般图像都存在很多冗余和相关性的,所以转换到频率域之后,只有很少的一部分频率分量的系数才不为0,大部分系数都为0(或者说接近于0)。汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,汉明距离描述的是两个n长码字x=(x1x2
7、xn),y=(y1y2yn)之间的距离,Dx,y=k=1nxkyk其中,表示模2加运算,xk0,1,yk0,1.D(x,y)表示两码字在相同位置上不同码符号的数目的总和,它能够反映两码字之间的差异,进而提供码字之间的相似程度的客观依据。4.1.2 算法详细步骤(1)缩小尺寸:pHash以小图片开始,但图片大于8*8,32*32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。具体的代码实现如下图:(2)简化色彩:将图片转化成灰度图像,进一步简化计算量。下图是转化为灰度图像的函数grayscale()的实现;(3)计算DCT:计算图片的DCT变换,得到32*32的DCT系数矩阵。下图是
8、进行二维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, 就说明
9、两张图片很相似, 如果大于10, 说明它们是两张不同的图片。这里是基于汉明距离来对相似度进行计算,定义的相似度计算公式为:sim=1-汉明距离位数下面两张图片分别是对汉明距离和相似度的实现函数,具体如下:. 4.2 Levenshtein距离算法4.2.1算法概述我们这里所要研究的相似度算法是这样进行的,UML图如上。4.2.2生成图片的指纹在我们的程序中,生成图片哈希值的方法是produceFingerPrint(),他返回的是一个String类型的字符串类型。这个方法里面主要涉及6个部分:(1)读取图片实现这个功能的方法是通过readImage(filename)方法来完成的,这个方法封装
10、在ImageRead类中,它通过获取图片的路径名来得到该图片。代码如下:(2)将图片缩小到固定尺寸因为我们得到的图片可能会大小不一致,多以我们需要将他们缩小成一致的格式,这里我们将他们缩小成8*8的尺寸,总共64个像素,除去了图片的细节,只保留了结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。实现方法是:thumb(BufferedImage source, int width,int height, boolean b),代码如下:(3)简化色彩将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。通过灰度值的计算来实现的,方法为rgbToGray()(4)计算平均
11、值计算64个像素的灰度平均值,通过方法average()来实现。代码如下:(5)比较像素灰度将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。(6)计算哈希值将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。代码如下:4.2.3计算编辑距离,得出相似度计算图片指纹的相似度。进而算出图片的相似度。(1)编辑距离概述Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符
12、,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。(2)举例说明a.首先是有两个字符串,这里写一个简单的 abc和abeb.将字符串想象成下面的结构。A处 是一个标记,为了方便讲解,不是这个表的内容。 abcabcabe0123a1A处b2e3c.来计算A处 出得值它的值取决于:左边的1、上边的1、左上角的0.按照Levenshtein distance的意思:上面的值和左面的值都要求加1,这样得到1+1=2。A处 由于是两个a相同,左上角的值加0.这样得到0+0=0。这是后有三
13、个值,左边的计算后为2,上边的计算后为2,左上角的计算为0,所以A处 取他们里面最小的0.d.于是表成为下面的样子abcabcabe0123a10b2B处e3在B处 会同样得到三个值,左边计算后为3,上边计算后为1,在B处 由于对应的字符为a、b,不相等,所以左上角应该在当前值的基础上加1,这样得到1+1=2,在(3,1,2)中选出最小的为B处的值。e.于是表就更新了 abcabcabe0123a10b21e3C处C处 计算后:上面的值为2,左边的值为4,左上角的:a和e不相同,所以加1,即2+1,左上角的为3。在(2,4,3)中取最小的为C处
14、 的值。f.于是依次推得到abc0123a1A处 0D处 1G处 2b2B处 1E处 0H处 1e3C处 2F处 1I处 1 I处: 表示abc 和abe 有1个需要编辑的操作。这个是需要计算出来的。同时,也获得一些额外的信息。A处: 表示a 和a 需要有0个操作。字符串一样B处: 表示ab 和a
15、60; 需要有1个操作。C处: 表示abe 和a 需要有2个操作。D处: 表示a 和ab 需要有1个操作。E处: 表示ab 和ab 需要有0个操作。字符串一样F处: 表示abe 和ab 需要有1个操作。G处: 表示a
16、0; 和abc 需要有2个操作。H处: 表示ab 和abc 需要有1个操作。I处: 表示abe 和abc 需要有1个操作。g.计算相似度先取两个字符串长度的最大值maxLen,用1-(需要操作数除maxLen),得到相似度。例如abc 和abe 一个操作,长度为3,所以相似度为1-1/3=0.666(3)具体实现具体实现代码如下:4.3 欧式距离相似度算法4.3.1算法概述该算法的核心思想是计算两条直线的欧氏距离
17、。4.3.2算法步骤运用道格拉斯-普克算法将折线简化,提取出折线的特征点。步骤如下,(1)在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离,如下图(1)。(2)选其最大者与阈值相比较,若大于阈值,则离该直线距离最大的点保留,否则将直线两端点间各点全部舍去,如下图(2),第4点保留。(3)依据所保留的点,将已知曲线分成两部分处理,重复第1、2步操作,迭代操作,即仍选距离最大者与阈值比较,依次取舍,直到无点可舍去,最后得到满足给定精度限差的曲线点坐标,如下图(3)、(4)依次保留第6点、第7点,舍去其他点,即完成线的化简。具体的代码实现如下:将两条折线A,B垂直平移至X轴,如下图二。将其中
18、一条折线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 系统实现整个系统架
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金色花荷叶母亲教学设计
- 2025唐山市乐亭县汀流河镇社区工作者考试真题
- 浙江省A9协作体2024-2025学年高一下学期4月期中联考试题化学
- 轻法式浪漫家居中的纳帕牛皮软装设计
- 颅底骨折个案护理查房
- 游戏闯关数学课件
- 膨胀加强带、后浇带施工方案
- 苏教版语文七年级上册第17课《夏》教学提纲
- 2025年高考政治选必二《法律与生活》主观题背诵模板
- 青春期性心理健康教育
- GB/T 22235-2008液体黏度的测定
- CAD输入文字时提示“找不到主词典无法启动拼写检查程序”怎么办
- -活出心花怒放的生命 课件 心理健康
- 给水泵检修方案
- 设备出入库管理办法
- KEGG代谢通路中文翻译
- 消火栓月检查表
- GB∕T 17832-2021 银合金首饰 银含量的测定 溴化钾容量法(电位滴定法)
- 低成本自动化的开展与案例77页PPT课件
- 人防工程竣工资料(全套)
- 梅州市部分饮用水源保护区调整方案
评论
0/150
提交评论