实验四位场边缘识别程序设计实验

合集下载

基于直方图均衡化与形态学处理的边缘检测

基于直方图均衡化与形态学处理的边缘检测

基于直方图均衡化与形态学处理的边缘检测王淑青;姚伟;陈进;潘健;张子蓬;袁晓辉【摘要】针对传统的边缘检测算子存在噪声干扰、边缘丢失和伪边缘干扰的问题,提出将传统的边缘检测与形态学处理和直方图均衡化有机结合的边缘检测方法。

算法通过抗噪性参数 P,引入权值将组合算法中图像增强处理与形态学的组合算法相融合获得较好的边缘。

通过不同形态学算法在四种组合下边缘检测的效果分析和抗噪性参数 P 比较,实验结果表明,图像在有无噪声情况下效果基本一致,边缘完整性得到了很大的提升。

该组合算法在抗噪能力、边缘丢失与伪边缘干扰处理上拥有较好的平衡,提高了边缘检测效果,为工业加工图形识别提供了一定的思路。

%In order to solve the problems of classical edge detection operator such as noise interference,edge missing and false edge interference,the paper presents an edge detection method which combines the classical edge detection with morphology processing and histogram equalisation in an organic way.By using anti-noise parameters P the algorithm introduces the weight value and fuses the image enhancement processing in combinatorial algorithm with the combinatorial algorithm of morphologyto obtain better edges.Through effect analysis on the edge detection by different morphological algorithms in four combinations and the comparison of anti-noise parameters P,the experimental results show that the image has almost the same effect no matter with or without noise,and the edge integrity gains great improvement as well.This combinatorial algorithm possesses quite good balance in anti-noise performance,edge missing and false edge interference processing,it improves edge detectioneffect.The research provides certain thought for industrial processing and pattern recogni-tion.【期刊名称】《计算机应用与软件》【年(卷),期】2016(033)003【总页数】4页(P193-196)【关键词】边缘检测;直方图均衡化;数学形态;轮辋【作者】王淑青;姚伟;陈进;潘健;张子蓬;袁晓辉【作者单位】湖北工业大学电气与电子工程学院湖北武汉 430068;湖北工业大学电气与电子工程学院湖北武汉 430068;湖北工业大学电气与电子工程学院湖北武汉 430068;湖北工业大学电气与电子工程学院湖北武汉 430068;湖北工业大学计算机学院湖北武汉 430068;华中科技大学水电与数字化工程学院湖北武汉430074【正文语种】中文【中图分类】TP391图像的边缘是图像中最重要的特征之一,它反映了图像的最基本特征[1]。

审计学专业实习报告(精选20篇)

审计学专业实习报告(精选20篇)

审计学专业实习报告(精选20篇)审计学专业实习报告一、审计学组成现代审计学科体系一般由理论审计学、应用审计学、审计技术学、历史审计学四个分学科组成。

理论审计学,主要研究审计基本概念、原理和规律,以及对不同类项、不同国家的审计进行比较研究等。

它包括审计学基础理论和比较审计等。

审计学原理属于理论审计学的范畴,主要研究审计基本概念、原理、知识和规律,它对于整个审计学科研究具有指导意义。

应用审计学,主要研究各类不同目标的审计和各个不同行业的审计以及审计法学。

审计技术学,主要研究各种审计方式、技术、方法和手段及其应用。

历史审计学,主要研究审计的产生、发展和兴衰存亡的规律性。

审计学科体系结构除上述四类分学科外,有人认为还应包括边缘审计学,也即是审计学和其他社会科学或自然科学交叉与融合的学科。

二、实习报告基本要求1、总结必须有情况的概述和叙述,有的比较简单,有的比较详细。

这部分内容主要是对工作的主客观条件、有利和不利条件以及工作的环境和基础等进行分析。

2、成绩和缺点。

这是总结的中心。

总结的目的就是要肯定成绩,找出缺点。

成绩有哪些,有多大,表现在哪些方面,是怎样取得的;缺点有多少,表现在哪些方面,是什么性质的,怎样产生的,都应讲清楚。

3、经验和教训。

做过一件事,总会有经验和教训。

为便于今后的工作,须对以往工作的经验和教训进行分析、研究、概括、集中,并上升到理论的高度来认识。

4.今后的打算。

根据今后的工作任务和要求,吸取前一时期工作的经验和教训,明确努力方向,提出改进措施等。

三、审计学专业实习报告(精选20篇)一段时间的实习生活又将谢下帷幕,我们肯定学习到了不少学问,让我们一起来学习写实习报告吧。

是不是无从下笔、没有头绪?下面是小编收集整理的审计学专业实习报告(精选20篇),希望对大家有所帮助。

审计学专业实习报告1自从走进了大学,就业问题就似乎总是围绕在我们的身边,成了说不完的话题。

为了拓展自身的知识面,扩大与社会的接触面,增加个人在社会竞争中的经验,锻炼和提高自我的本事,以便在以后毕业后能真正走入社会,能够适应国内外的经济形势的变化,并且能够在生活和工作中很好地处理各方面的问题,我参加了学校为期一个多月的ERP实习。

条码识别技术实验报告(3篇)

条码识别技术实验报告(3篇)

第1篇一、实验目的1. 了解条码识别技术的基本原理和应用。

2. 掌握条码识别系统的组成和功能。

3. 熟悉条码识别软件的使用方法。

4. 提高对条码识别技术的实际操作能力。

二、实验原理条码识别技术是一种自动识别技术,通过扫描条码符号,将条码信息转换为数字信息,从而实现信息的高效采集和传输。

条码识别技术广泛应用于商品流通、工业生产、图书管理、仓储标证管理、信息服务等领域。

实验原理主要包括以下三个方面:1. 条码符号的编码规则:条码符号由黑白相间的条形和空隙组成,按照一定的编码规则编制而成。

常见的编码规则有EAN-13、UPC、Code 39、Code 128等。

2. 条码识别系统:条码识别系统主要由条码扫描器、条码识别软件和计算机组成。

条码扫描器负责采集条码图像,条码识别软件负责对条码图像进行处理和识别,计算机负责存储和管理条码信息。

3. 条码识别算法:条码识别算法是条码识别系统的核心,主要包括图像预处理、特征提取、模式识别等步骤。

三、实验设备与材料1. 实验设备:条码扫描器、计算机、条码识别软件。

2. 实验材料:各种条码标签、商品、图书等。

四、实验步骤1. 熟悉条码识别软件的操作界面和功能。

2. 将条码标签粘贴在商品或图书上。

3. 使用条码扫描器对条码标签进行扫描,采集条码图像。

4. 将采集到的条码图像导入条码识别软件。

5. 对条码图像进行预处理,包括去噪、二值化、滤波等。

6. 提取条码特征,如条码的起始符、终止符、数据符等。

7. 使用模式识别算法对条码特征进行匹配,识别条码信息。

8. 将识别结果与商品或图书的标签信息进行比对,验证识别结果。

五、实验结果与分析1. 实验结果:本次实验成功识别了多种条码标签,包括EAN-13、UPC、Code 39、Code 128等。

识别准确率达到100%。

2. 分析:(1)条码识别系统的组成和功能:本次实验使用的条码识别系统由条码扫描器、条码识别软件和计算机组成,能够满足实际应用需求。

C语言程序设计实验指导书课后答案

C语言程序设计实验指导书课后答案
2.3.4 显示 1~10 平方,输出结果如下图所示: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49
8*8=64 9*9=81 10*10=100 #include<> int main(void) {
int i,a; for(i=1;i<=10;i++)
422有一个四位数千位上的数字和百位上的数字都被擦掉了已知十位上的数字是个位上的数字是2又知道这个数如果减去7就能被7整除减去8就能被8整除减去9就能被9整除
实验一
(1) 编程求 37+29 的值,实习 VC 环境。 #include<> void main() { int a,b,sum; a=37; b=29; sum=a+b; printf("sum=%d",sum); }
输入圆的半径,计算圆的面积,设圆周率为. #include<> int main() { float r,s; printf("请输入半径:"); scanf("%f",&r); s=*r*r; printf("圆的面积为%.6f",s); }
输入一个两位数,将其个位数和十位数互换后变成一个新的数,输出这个数。 #include <> int main(void) { int n,a,b; printf("input n:"); scanf("%d",&n); b=n%10; a=n/10; n=b*10+a; printf("%d\n",n); return 0; }
2.2.5 输入三个整数,用 if-else 结构求出其中的最大值。提示:首先求出两个 数的较大值放在一个变量里,然后用这个变量和第三个数再进行一次比 较。 #include<> int main() { int a,b,c,max; printf("请输入三个数"); scanf("%d,%d,%d",&a,&b,&c); if(a>b) max=a; else max=b; if(c>max) max=c; else max=a; printf("最大值为%d\n",max); return 0; }

实验4 选择结构程序设计

实验4 选择结构程序设计

实验四 选择结构程序设计(4学时)实验前必须做的操作.........——..新建文件夹:......首先在各自对应的计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为K02,航海1111班、学号后两位是02的、姓名为“张强”的同学,则其对应的文件夹名字是:航海111102张强。

然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验4”。

【实验目的】1、 理解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

2、 进一步巩固printf()和scanf()函数的使用方法。

3、 学会正确使用关系运算符和关系表达式、逻辑运算符和逻辑表达式。

4、 掌握if 语句三种形式的用法。

5、 掌握switch 、break 语句的用法。

6、 熟悉选择结构程序段中语句的执行过程。

7、 学会设计分支结构的程序,结合程序掌握一些基本的算法。

8、 巩固利用VC++对C 程序的查错方法,进一步提高修改程序错误的能力。

9、 学习跟踪调试程序,掌握简单的单步调试方法。

【实验内容】[实验任务一]:程序的跟踪调试和变量值的监视练习(可不上交、但必须操作、理解,掌握其方法) 程序跟踪调试实例4-1:程序跟踪调试和变量值的监视示例(请仔细按以下各步骤进行操作):输入x ,计算并输出下列分段函数 f(x) 的值(保留1位小数)。

(需要存盘)⎪⎩⎪⎨⎧=≠=0001)(x x x x f10.0f(10.00) = 0.1【操作步骤】:(1)输入源程序,并以error4_1.c 文件名最终保存在实验4文件夹里,然后执行“编译/Build ”—>“编译/Compile ”,出现第一个编译错误是:双击该出错信息,箭头指向else 所在行,出错信息指出在else 前缺少分号。

在y = 1 / x 后面补上分号后,重新编译,新出现的第一个出错信息(警告信息):双击该错误信息,箭头指向scanf("%f", x);所在行,出错原因是x 的前面少了&。

基于FPGA的车牌识别系统设计与实现

基于FPGA的车牌识别系统设计与实现

基于FPGA的车牌识别系统设计与实现车牌识别系统是一种应用广泛的智能交通技术,它能够通过图像处理和模式识别技术,自动提取图片中的车牌信息。

近年来,随着FPGA (现场可编程门阵列)技术的快速发展,基于FPGA的车牌识别系统成为一种高效、快速和准确的解决方案。

本文将详细介绍基于FPGA的车牌识别系统的设计与实现。

一、引言车牌识别系统在交通管理、车辆管理、停车场管理等领域有着广泛的应用。

传统的车牌识别系统主要依靠计算机进行图像处理和模式识别,但这种方式存在计算速度慢、实时性差等问题。

而基于FPGA的车牌识别系统通过并行计算和硬件加速,能够在保证识别准确率的同时提高处理速度,是一种高效的解决方案。

二、系统设计基于FPGA的车牌识别系统主要由图像采集模块、图像预处理模块、特征提取模块、模式识别模块和结果输出模块等组成。

1. 图像采集模块图像采集模块是整个车牌识别系统的输入模块,它负责从摄像头或图像存储设备中获取图像数据。

在FPGA中,可以通过外部接口模块与摄像头或图像存储设备进行通信,获取车辆图像信息。

2. 图像预处理模块图像预处理模块主要负责对获取的图像进行预处理,以便后续的特征提取和模式识别。

常用的图像预处理方法包括图像去噪、灰度化、二值化、边缘检测等。

在基于FPGA的车牌识别系统中,可以使用图像处理算法对图像进行预处理。

3. 特征提取模块特征提取模块是车牌识别系统中的核心模块,它主要负责提取车牌图像中的特征信息,以便后续的模式识别。

特征提取算法可以使用形状特征、颜色特征等方法对车牌图像进行特征提取,从而获得车牌的独特特征。

4. 模式识别模块模式识别模块是基于特征提取结果对车牌进行模式识别的模块,它可以采用机器学习算法或模式匹配算法进行识别。

常用的模式识别算法包括支持向量机(SVM)、卷积神经网络(CNN)等。

在FPGA中,可以通过设计硬件加速器来实现快速的模式识别。

5. 结果输出模块结果输出模块负责将识别结果显示或存储,以便后续的业务处理。

机器视觉-图像处理-计算机视觉-边缘计算实验室建设方案

机器视觉-图像处理-计算机视觉-边缘计算实验室建设方案

机器视觉-图像处理-计算机视觉-边缘计算实验室建设方案目录1机器视觉-图像处理-计算机视觉-边缘计算实验室 ................................. - 3 -1.1总体规划............................................................ - 3 -1.2实验设备............................................................ - 3 -1.2.1机器视觉教学平台................................................ - 3 -1.2.2智能监控实训平台............................................... - 19 -1机器视觉-图像处理-计算机视觉-边缘计算实验室1.1总体规划机器视觉-图像处理-计算机视觉-边缘计算实验室主要用于对机器视觉与图像处理、计算机视觉、图像处理、边缘计算等核心课程的知识点学习,能够服务于相关课程的实验和实训需求。

核心课程主要针对学科基础技术的培养,掌握对机器视觉与图像处理、计算机视觉、图像处理、边缘计算的配置、维护和开发,接入等知识。

核心课程采用全模块化的教学产品进行实验,具备优良的教学实验特性:全模块化的设计、开放式的硬件接口、开源的实验代码、完整的教学资源、贴心的售后服务。

1.2实验设备1.2.1机器视觉教学平台AI机器视觉教学平台(AI-HNP)是中智讯公司开发的一款面向人工智能相关专业的综合型实验设备,主要满足:Python程序设计、机器视觉、嵌入式Linux系统、边缘计算、人工智能中间件、智能+产业实践等课程的实验和实训,是基于新工科和工程教育思维和专业改革而设计的实验平台。

AI机器视觉教学平台打破了传统以硬件平台来定义实验的困局,创新性的从专业学科建设角度来重新定义产品,从市场调研定制专业人才培养方案,从人培方案和技术架构来设计适合国情校情的教学大纲,让课程来定义实验,让实验来定义设备,能够配合专业教材完成人工智能相关专业核心课程实验。

四位数码管动态显示

四位数码管动态显示

实验名称:实验名称四位数码管动态显示一、实验目的1.通过AT89C52单片机控制四位数码管动态显示数字“3210”。

2.用Protues设计、仿真以AT89C52为核心的四位数码管动态显示实验装置。

3.掌握四位数码管的控制方法。

二、实验任务P1端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,接通电源时,显示“”字样;三、实验设备微机1台、Proteus软件1套、GL10型51单片机学习开发板1台。

四、实验电路绘制五、汇编语言程序设计1.设计原理动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。

在进行数码显示的时候,要对显示单元开辟4个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。

对于显示的字形码数据我们采用查表方法来完成。

2.程序框图3.汇编程序ORG 0000H ;初始化START:MOV R0,#0FFH ;控制段选,给R0传递一个初值1111 1111MOV DPTR,#TABLE ;将表头的地址传递给数据指针NEXT:MOV A,R0 ;R0的值传给累加器AMOVC A,@A+DPTR ;查表指令,将TABLE的值按底标给AMOV P2,A ;A的值传给P2接口,显示数字0LCALL DELAY ;调用延时函数,延时INC R0 ;R0加一,MOV A,R0 ;R0的值再次传给A,控制位选移动MOV P1,A ;A的值传给P1口,CJNE R0,#04,NEXT ;判断R0是否等于4,若不等于,转NEXT继续执行,若等于,继续执行下一条程序SJMP START,相当于将值初始化,重新开始。

SJMP START ;跳转到START,R0,R1初始化,重新执行一轮。

DELAY:MOV R6,#4 ;延时程序DL2:MOV R7,#248DL1:DJNZ R7,$DJNZ R6,DL2RETTABLE:DB 3FH,06H,5BH,4FH ;以table为表头地址,依次存入二进制的0.1.2.3END六、Proteus软件模拟仿真七、GL10单片机仿真系统1.实验板连线2.实验操作步骤先把“单片机系统”区域中的P1.0/AD0-P1.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;再把“单片机系统”区域中的P2.0/A8-P2.3/A15用4芯排线连接到“动态数码显示”区域中的0-N端口上。

集成电路实习报告(通用6篇)精选全文

集成电路实习报告(通用6篇)精选全文

可编辑修改精选全文完整版集成电路实习报告艰辛而又充满意义的实习生活又告一段落了,想必都收获了成长和成绩,是时候回头总结这段时间的实习生活了。

你所见过的实习报告应该是什么样的?下面是小编帮大家整理的集成电路实习报告(通用6篇),仅供参考,大家一起来看看吧。

集成电路实习报告1一:实习目的1、学习焊接电路板的有关知识,熟练焊接的具体操作。

2、看懂收音机的原理电路图,了解收音机的基本原理,学会动手组装和焊接收音机。

3、学会调试收音机,能够清晰的收到电台。

4、学习使用protel电路设计软件,动手绘制电路图。

二:焊接的技巧或注意事项焊接是安装电路的基础,我们必须重视他的技巧和注意事项。

1、焊锡之前应该先插上电烙铁的插头,给电烙铁加热。

2、焊接时,焊锡与电路板、电烙铁与电路板的夹角最好成45度,这样焊锡与电烙铁夹角成90度。

3、焊接时,焊锡与电烙铁接触时间不要太长,以免焊锡过多或是造成漏锡;也不要过短,以免造成虚焊。

4、元件的腿尽量要直,而且不要伸出太长,以1毫米为好,多余的可以剪掉。

5、焊完时,焊锡最好呈圆滑的圆锥状,而且还要有金属光泽。

三:收音机的原理本收音机由输入回路高放混频级、一级中放、二级中放、前置低放兼检波级、低放级和功放级等部分组成接收频率范围为535千赫1065千赫的中段。

1、具体原理如下原理图所示:2、安装工艺要求:动手焊接前用万用表将各元件测量一下,做到心中有数,安装时先安装低矮和耐热元件(如电阻),然后再装大一点的元件(如中周、变压器),最后装怕热的元件(如三极管)。

电阻的安装:将电阻的阻值选择好后根据两孔的距离弯曲电阻脚可采用卧式紧贴电路板安装,也可以采用立式安装,高度要统一。

瓷片电容和三极管的脚剪的长短要适中,它们不要超过中周的高度。

电解电容紧贴线路板立式焊接,太高会影响后盖的安装。

、棒线圈的四根引线头可直接用电烙铁配合松香焊锡丝来回摩擦几次即可自动上锡,四个线头对应的焊在线路板的铜泊面。

图像边缘检测各种算子MATLAB实现以及实际应用

图像边缘检测各种算子MATLAB实现以及实际应用

《图像处理中的数学方法》实验报告学生姓名:***教师姓名:曾理学院:数学与统计学院专业:信息与计算科学学号:********联系方式:139****1645梯度和拉普拉斯算子在图像边缘检测中的应用一、数学方法边缘检测最通用的方法是检测灰度值的不连续性,这种不连续性用一阶和二阶导数来检测。

1.(1)一阶导数:一阶导数即为梯度,对于平面上的图像来说,我们只需用到二维函数的梯度,即:∇f=[g xg y]=[ðf ðxðfðy],该向量的幅值:∇f=mag(∇f)=[g x2+g y2]1/2= [(ðf/ðx)2+(ðf/ðy)2]1/2,为简化计算,省略上式平方根,得到近似值∇f≈g x2+g y2;或通过取绝对值来近似,得到:∇f≈|g x|+|g y|。

(2)二阶导数:二阶导数通常用拉普拉斯算子来计算,由二阶微分构成:∇2f(x,y)=ð2f(x,y)ðx2+ð2f(x,y)ðy22.边缘检测的基本思想:(1)寻找灰度的一阶导数的幅度大于某个指定阈值的位置;(2)寻找灰度的二阶导数有零交叉的位置。

3.几种方法简介(1)Sobel边缘检测器:以差分来代替一阶导数。

Sobel边缘检测器使用一个3×3邻域的行和列之间的离散差来计算梯度,其中,每行或每列的中心像素用2来加权,以提供平滑效果。

∇f=[g x2+g y2]1/2={[(z7+2z8+z9)−(z1+2z2+z3)]2+[(z3+2z6+z9)−(z1+2z4+z7)]2}1/2(2)Prewitt边缘检测器:使用下图所示模板来数字化地近似一阶导数。

与Sobel检测器相比,计算上简单一些,但产生的结果中噪声可能会稍微大一些。

g x=(z7+z8+z9)−(z1+z2+z3)g y=(z3+z6+z9)−(z1−z4−z7)(3)Roberts边缘检测器:使用下图所示模板来数字化地将一阶导数近似为相邻像素之间的差,它与前述检测器相比功能有限(非对称,且不能检测多种45°倍数的边缘)。

光电检测与显示实验六 面阵CCD应用实验:总结 计划 汇报 设计 可编辑

光电检测与显示实验六 面阵CCD应用实验:总结 计划 汇报 设计 可编辑
(一)面阵CCD原理及驱动实验
一、实验目的
1.掌握面阵CCD实验仪的基本操作和各个部件的功能;
2.掌握隔列转移型面阵CCD的基本工作原理;
3.掌握面阵CCD各路驱动脉冲波形及其所涉及部分的功能;
4.掌握面阵CCD输出的视频信号与PAL电视制式的关系。
二、实验仪器
1.带宽50MHz以上双踪迹(或四踪迹)同步示波器一台;
实验6面阵CCD应用技术实验
面阵CCD图像传感器主要用于采集物体图像信息。它所包含的内容很多,其中能够按PAL电视制式(或其他电视制式)形成视频电视信号的常被称为面阵CCD摄像头。面阵CCD实验指导主要针对面阵CCD摄像头展开的,通过对它的驱动波形分析使学生掌握面阵CCD的基本工作原理和特性。然后展开它的应用实验和如何与现代的计算机技术结合起来为机器安装“眼睛”与“大脑”。为达到利用面阵CCD完成“电眼”功能,还需要掌握有关《图像数字处理》方面的有关内容,为此实验指导增设了一些图像数字处理最为基础的实验内容。通过这些内容的学习能够使学生大体了解如何将面阵CCD摄像头输出的视频信号转变为数字图像,又如何从数字图像中提取出有用的信息。
2.YHACCD-Ⅲ型彩色面阵CCD多功能实验仪一台。
三、实验内容及步骤
1、开机过程
1)将被测的标准图片如图3-1所示,安装在“被测物夹持架”上,将USB接口线正确连接到计算机上;
2)打开计算机的电源开关,并确认YHACCD-Ⅲ型彩色面阵CCD实验仪的“面阵CCD尺寸测量实验”软件已经安装;
3)将外置面阵CCD摄像机的镜头盖打开;
3.面阵CCD行、场自扫描电视制式的测量;
4.视频输出信号的测量。
四、实验步骤
1)实验准备
①首先将示波器地线与实验仪上的地线连接好,并确认示波器的电源和实验仪的电源插头均已插在交流220V插座上;

4乘4键盘实验报告1(1)

4乘4键盘实验报告1(1)

4乘4键盘实验报告一、摘要本系统以89C51集成块为核心器件,制作一种4横4列的键盘。

采用16个按钮式键盘,以及一个硬件复位器。

在按下其中一个按钮时,在键盘扫描程序的作用下,通过键盘扫描识别后,在数码管上显示出来;按下硬件复位器,数码管只显示小数点,实现复位。

本次设计代码采用C语言编制,方便简单,易于调试。

关键词:89C51,键盘,按纽,数码管二、硬件设计2.1、89C51简介89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。

89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2.2、元件分析与工作原理VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

实验四 四位加法器的设计

实验四 四位加法器的设计

实验四四位加法器的设计一、实验目的1、掌握VHDL程序设计流程。

二、实验内容设计四位加法器,并在数码管上显示计算结果。

三、实验仪器1、ZY11EDA13BE型实验箱通用编程模块,配置模块,开关按键模块,数码显示模块。

2、并口延长线,JTAG延长线。

3、安装MAX+PLUSII 10.2软件的PC机。

四、实验原理用VHDL编辑四位加法器程序,用拨码开关输入,加数、被加数、进位,用数码管显示计算结果和,用发光二极管显示进位。

五、实验步骤:步骤1:输入VHDL程序,编译,仿真,锁定引脚并下载到目标芯片。

步骤2:验证设计结果。

六、实验报告1、列出VHDL源程序。

七、思考题1、怎样实现8位加法器?2、对于数码管显示,如何实现循环显示不同数字?library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity add8 isport(a,b:in std_logic_vector(3 downto 0);a0,b0,c0,c1:in std_logic;output:out std_logic_vector(6 downto 0);c2:out std_logic);end add8;architecture art of add8 issignal e:std_logic_vector(4 downto 0);beginprocess(a,b,c)begine<=a+b+c1;c2<=e(4);case e(3 downto 0) iswhen "0000" => output <="1111110";when "0001" => output <="0110000";when "0010" => output <="1101101";when "0011" => output <="1111001";when "0100" => output <="0110011";when "0101" => output <="1011011";when "0110" => output <="1011111";when "0111" => output <="1110000";when "1000" => output <="1111111";when "1001" => output <="1111011";when "1010" => output <="1110111";when "1011" => output <="0011111";when "1100" => output <="0001101";when "1101" => output <="0111101";when "1110" => output <="1001111";when "1111" => output <="1000111";when others => output <="0000000"; end case;a0 <='1';b0 <='1';c0<='1';end process;end art;entity scan_led isport(clk : in std_logic;sele : out std_logic_vector(1 downto 0);time1,time2 : out std_logic_vector(2 downto 0)); end;architecture a of scan_led issignal a : std_logic_vector(1 downto 0):="00";beginpro1:process(clk)beginif clk'event and clk='1' then a<=a+1; end if;end process pro1;pro2:process(a)begincase a iswhen "00" => time1<="111";time2<="001";when "01" => time1<="110";time2<="010";when "10" => time1<="101";time2<="100";when "11" => time1<="011";time2<="110";when others => null;end case;sele<=a;end process pro2;end a;。

虚拟现实实验报告doc

虚拟现实实验报告doc

虚拟现实实验报告篇一:虚拟现实技术实验报告虚拟现实技术实验报告实验一:Sketch Up软件熟悉与利用一、实验目的与要求:1. 目的通过本次实验,使学生掌握Sketch Up软件的大体架构,理解利用Sketch Up进行场景制作的大体步骤,能够熟练运用Sketch Up软件的主要功能及相关工具。

2. 要求每位学生进行Sketch Up软件的安装和配置,操作练习Sketch Up的主要功能及相关工具,理解体会各类操作的执行结果,并独立总结撰写完成实验报告。

二、Sketch Up的主要功能:边缘和平面:这是画图最大体的元素每一个 Sketch Up 模型皆由两种元素组成:边缘和平面。

边缘是直线,而平面是由几条边缘组成一个平面循环时所形成的平面形状。

例如,矩形平面是由四条边缘以直角角度彼此连接 在一路所组成的。

自己可在短时间内学会利用 Sketch Up 的简单工具,从而绘制边缘和平面来成立模型。

一切就是这么简单容易!推/拉:从 2D 迅速转为 3D利用 Sketch Up 专利设计的 [推/拉] 工具,可以将任何平面延伸成立体形状。

单击鼠标就可开始延伸,移动鼠标,然后再单击即可停止延伸。

自己可以将一个矩形推/拉成一个盒子。

或绘制一个楼梯 的轮廓并将其推/拉成立体的 3D 形状。

想绘制一个窗户吗?只需在墙上推/拉出一个孔即可。

Sketch Up 易于利用而广受欢迎,原因就在于其推/拉的功能。

精准测量:以精准度来进行作业处置Sketch Up 特别适合在 3D 环境中进行迅速的画图处置,可是它的功能不单单只是一只神奇的电子画笔算了。

因为当自己在计算机上进行画图处置时,自己在 Sketch Up 中所成立的一切对象都具有精准的尺寸。

当自己准备好要成立模型时,自己可以随意按照自己想要的精准度来进行模型的成立。

若是自己愿意,自己可以将模型的比例视图打印出来。

若是自己有 Sketch Up Pro,自己乃至还可将自己的几何图形导出到 AutoCAD 和 3ds MAX 等其他程序内。

第三单元少年程序设计师——侦测模块的使用教案中图版(五四学制)六年级

第三单元少年程序设计师——侦测模块的使用教案中图版(五四学制)六年级
- 侦测模块的分类:侦测模块主要包括鼠标位置、按键按下、声音大小和角色碰撞等四大类。
2. 侦测模块的功能:
- 鼠标位置:获取鼠标在屏幕上的当前位置,可以用来控制角色的移动或触发特定事件。
- 按键按下:检测键盘上某个键是否被按下,可以用来控制角色的动作或游戏玩法。
- 声音大小:获取当前计算机声音的大小,可以用来实现声音控制相关功能。
7. 教学工具:准备一些教学工具,如投影仪、电脑、音响等,以便进行多媒体教学和演示。同时,还需要准备一些教学辅助工具,如白板、粉笔等,以便在课堂上进行讲解和板书。
教学过程设计
1. 导入新课(5分钟)
目标: 引起学生对侦测模块的兴趣,激发其探索欲望。
过程:
开场提问:“你们知道什么是侦测模块吗?它在我们生活中的哪些场景中有应用?”
答案:
```
当绿旗被点击
侦测鼠标位置
将角色x坐标设置为侦测鼠标x坐标
将角色y坐标设置为侦测鼠标y坐标
重复执行
等待1毫秒
end
```
2. 例题二:制作一个按键控制游戏,玩家通过按键来控制角色的移动和跳跃。
答案:
```
当绿旗被点击
侦测按键按下
如果按键按下是空格键
重复执行
移动角色10个单位
等待1毫秒
end
如果角色碰撞是true
重复执行
显示文字“碰撞发生!”
等待1秒
end
end
```
5. 例题五:设计一个程序,让角色在屏幕上移动,当角色到达屏幕边缘时自动返回。
答案:
```
当绿旗被点击
侦测鼠标点击
如果鼠标点击是真
移动角色10个单位
侦测角色边缘
如果角色在边缘

面阵CCD测量物体尺寸

面阵CCD测量物体尺寸

三、实验所需仪器设备
① 计算机; ② YHACCD -Ⅲ型彩色面阵 CCD 多功能实验仪。
四、实验内容及步骤
1、开机过程
① 将被测的标准图片如图 3-1 所示,安装在“被 测物夹持架”上; ② 将外置面阵 CCD 摄像机的镜头盖打开; ③ 打开计算机电源开关;打开彩色面阵 CCD 多 功能实验仪的电源开关; ④ 确认“视频切换”按钮是否已经按下,切换指 示灯点亮表明采集外置 CCD 摄像机的图像信号; ⑤ 运行“面阵 CCD 尺寸测量实验”程序; ⑥ 点击 “连续采集”按钮,计算机界面将显示外置摄像头所采集到的图像,调整 CCD 摄像头与测量图片的相对位置使图像尽量清晰,点击“停止”按钮。或者,点击“单 帧”按钮,采集到一幅数据图像,并将其存入指定内存。
边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,也包括方向的确定。 大 多数使用基于方向导数掩模求卷积的方法。 2)内容介绍 (1)Roberts 边缘检测算子 Roberts 边缘检测算子是一种利用局部差分算子寻找边缘的算子。算子函数为
g ( x, y) = [ f ( x, y) −
式中
(x − x )x ⎧ ∆x = max min 0 ⎪ ⎪ β ⎨ ( ymax − ymin ) y0 ⎪ ∆y = ⎪ β ⎩
点的平均直径为:
(3-1)
d=
∆x + ∆y 2
(3-2)
点的中心坐标为:
(x + x )x ⎧ xi = max min 0 ⎪ ⎪ 2β ⎨ ( ymax + ymin ) y0 ⎪ yi = ⎪ 2β ⎩
575
767
图 3-3 水平曲线图
② 完成①的测量工作后,就基本掌握了通过数字图像的像元值数据找出图像中图形 边界的方法和原理。通过软件所提供的标定图像中任意一行(或列)数据边界的测量功能 来确定边界点。例如,在采集到的图像上把鼠标移至某一行上点击左键,软件会弹出一个 对话框,对话框中的曲线图表示了水平方向上各像元灰度的变化状况,如图 3-3 所示。 图 中的横坐标是水平方向上的像元位置, 纵坐标是各像元灰度值。 在曲线图上选择适当的灰 度值(纵坐标)点击鼠标左键即得到测量阈值(图中的“172” ) ,同时得到在此阈值(即 纵坐标) 下边界点的位置 (灰度曲线与此阈值水平方向交点 “149” 、 “159” , “540” 、 “550” ) 。 也可以在采集到的图像上把鼠标移至某一列上点击右键, 软件会弹出垂直方向上灰度变化 曲线图,如图 3-4 所示。图中横坐标是各像元灰度值,纵坐标是垂直方向上的像元位置。 在曲线图上选择适当的灰度值(横坐标)点击鼠标左键即得到测量阈值(图中的“209” ) , 同时得到在此阈值(即横坐标坐标)下边界点的位置(灰度曲线与此阈值垂直方向交点 “85” 、 “96” , “482” 、 “493” ) 。除了通过阈值法确定图形边界,还可以通过计算边界点附 近的灰度变化率来确定边界,灰度变化最快的像元位置即为边 界点坐标,试编写软件。 ③ 找出 x 方向与 y 方向的最大与最小位置值,可以计算 出被测点的大小与中心位置。

Python期末课程设计车牌识别

Python期末课程设计车牌识别

Python期末课程设计车牌识别一、教学目标本章节的教学目标是让学生掌握Python期末课程设计车牌识别的基本原理和方法,培养学生运用Python编程解决实际问题的能力。

具体分为以下三个部分:1.知识目标:使学生了解车牌识别技术的基本原理,理解Python编程中与车牌识别相关的关键技术,如图像处理、字符识别等。

2.技能目标:通过课程学习,使学生能够熟练使用Python编程语言进行车牌识别程序的设计与实现,提高学生的编程能力和问题解决能力。

3.情感态度价值观目标:培养学生对科技创新的兴趣,激发学生积极参与科技创新的热情,培养学生的团队合作意识和责任感。

二、教学内容本章节的教学内容主要包括以下几个部分:1.车牌识别技术概述:介绍车牌识别技术的基本原理、发展历程和应用领域。

2.Python编程基础:回顾Python编程语言的基本语法和常用库,为学生顺利进行车牌识别程序设计打下基础。

3.图像处理技术:讲解图像处理的基本方法,如图像读取、图像滤波、边缘检测等,培养学生运用图像处理技术进行车牌识别的能力。

4.字符识别技术:介绍字符识别的基本方法,如模板匹配、深度学习等,使学生能够运用字符识别技术完成车牌号码的识别。

5.车牌识别系统设计:引导学生结合所学知识,设计并实现一个车牌识别系统,提高学生解决实际问题的能力。

三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:通过讲解车牌识别技术的基本原理和关键技术,使学生掌握相关知识。

2.案例分析法:分析实际案例,让学生了解车牌识别技术在现实生活中的应用,提高学生的学习兴趣。

3.实验法:引导学生动手实践,设计并实现一个车牌识别系统,培养学生的实际操作能力和问题解决能力。

4.讨论法:学生进行小组讨论,分享学习心得和经验,促进学生之间的交流与合作。

四、教学资源为了支持本章节的教学内容和教学方法,将准备以下教学资源:1.教材:选用适合学生程度的Python编程教材,为学生提供系统性的学习资料。

OpenCV计算机视觉基础教程(Python版)教学教案

OpenCV计算机视觉基础教程(Python版)教学教案
作业、讨论题、思考题:
课后总结分析:
教学内容
实验内容
主要教学内容:
第2章图像处理基础
2.1 NumPy简介
2.1.1数据类型
2.1.2创建数组
2.1.3数组的形状
2.1.4索引、切片和迭代
2.1.5数组运算
2.2图像基础操作
2.2.1读、写、显示图像
2.2.2读、写、播放视频
2.2.3操作灰度图像
2.2.4操作彩色图像
第1章
1.4实验
1.4.1实验1:配置虚拟开发环境
1.4.2实验2:在VS Code中运行示例
授课题目:第2章图像处理基础
授课方式
(请打√)
理论课□ 讨论课□ 实验课□ 习题课□ 其他□
课时
安排
理论课:4
实验课:1
教学大纲要求:掌握NumPy简介、图像基础操作、图像运算。
教学重点及难点:
重点:NumPy简介、图像基础操作、图像运算。
教学重点及难点:
重点:窗口控制、绘图、响应鼠标事件、使用跟踪栏
作业、讨论题、思考题:
课后总结分析:
教学内容
实验内容
主要教学内容:
第3章图形用户界面
3.1窗口控制
3.1.1创建和关闭窗口
3.1.2调整窗口大小
3.2绘图
3.2.1绘制直线
3.2.2绘制矩形
3.2.3绘制圆
3.2.4绘制椭圆
3.2.5绘制多边形
教学难点重点
第1章:OpenCV起步
第2章:图像处理基础
第3章:图形用户界面
第4章:图像变换
第5章:边缘和轮廓
第6章:直方图
第7章:模板匹配和图像分割
第8章:特征检测

边缘检测和轮廓提取

边缘检测和轮廓提取

目录摘要 (2)Abstract (3)1概述 (4)1.1数字图像处理的意义 (4)1.2MATLAB简介 (4)1.3设计任务 (5)2边缘检测 (6)2.1图像的边缘 (6)2.2边缘检测的基本步骤 (6)2.3边缘检测算法 (7)2.3.1Reborts算子 (7)2.3.2Sobel算子 (8)2.3.3Prewitt 算子 (8)2.3.4Kirsch 算子 (9)2.3.5LOG算子 (10)2.3.6Canny算子 (11)3轮廓提取 (12)4实验仿真 (13)4.1 Sobel算子代码 (13)4.2轮廓提取算法 (15)4.3仿真结果及分析 (18)5实验小结 (19)6参考文献 (20)摘要图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。

而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。

而边缘检测算法则是图像边缘检测问题中经典技术难题之一,它的解决对于我们进行高层次的特征描述、识别和理解等有着重大的影响;又由于边缘检测在许多方面都有着非常重要的使用价值,所以人们一直在致力于研究和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题。

本此实验主要分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践中的应用结果进行研究,主要包括:Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子、Kirsch 边缘算子以及Laplacian 算子等对图像及噪声图像的边缘检测,根据实验处理结果讨论了几种检测方法的优劣.关键词:数字图像处理;边缘检测;算子AbstractThe edges of the image, one of the basic characteristics of the image tend to carry most of the information in the image. Edge exists in the irregular structure of the image and non-stationary phenomena, i.e. exist in a mutation point of the signal, these points are given the location of the image contours, these contours are often required in image edge detection is very important some of the characteristics of the condition, which we need to detect and extract its edge image. The edge detection algorithm is the classic one of the technical problems of image edge detection problems, the solution for our high-level characterization, recognition and understanding has a significant impact; edge detection are very important in many ways value in use, so people have been devoted to the study and solve the problem of how to construct edge detection operator with a good nature and good results.This experiment analysis of several used in digital image processing, edge detection operator research results according to their application in practice, including: The Robert Edge Operator child Prewitt edge operator, Sobel edge operator, Kirsch edge operator and Laplacian operator on the image and noise image edge detection discussed the pros and cons of several detection methods, according to the results of the experimental treatment.Keywords: digital image processing; edge detection; operator1概述1.1数字图像处理的意义数字图像处理技术的迅猛发展,其应用前景得到了不可限量的扩展,如今各行各业都在积极发展与图像相关的技术。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《重磁资料处理与解释》实验四位场边缘识别程序设计实验专业名称:地球物理学学生姓名:学生学号:指导老师:王万银、纪新林、纪晓琳、邱世灿提交日期:2016-1-31、基本原理地质目标体边缘时指断裂构造线、不同地质体的边界线,实际上是具有一定密度或磁性差异的地质体的边界线,在地质体的边缘附近,重、磁异常变化率较大,故所有的边缘识别方法均利用这一特点进行设计。

现在有重、磁位场边缘识别方法分为数理统计、数值计算以及其他三大类。

数值类边缘识别方法均利用极大值位置或零值位置确定地质体的边缘位置,其依据的理论基础是二度体铅垂台阶模型的重力异常特征。

在该模型边缘处重力异常总水平导数和解析信号振幅达到极大值、垂向导数达到零值。

故可以利用这些特征位置来确定二度体铅垂台阶的边缘位置,确定倾斜二度体、不规则二度体及三度体边缘位置的理论均为二度体铅垂台阶模型理论的推广,但确定的边缘位置和真实的位置有一定的偏差。

该偏差随着地质体边界形状、埋深、水平尺寸及物性差异等的变化而变化。

因此,边缘识别结果是一种定性或半定量解释结果,与定量解释结果有一定区别,识别结果可作为边缘位置定量反演的初值。

(1)垂向导数:垂向导数方法利用零值位置确定地质体的边缘位置,重力异常可以直接使用,对磁力异常必须转化为磁源重力异常或化极磁力异常才可以使VD R x y z:g(x, y, z)用VD Rx y去‘az ( 1.1)(2)解析信号振幅:解析信号振幅也是利用极大值位置来确定地质体的边缘位置适用于重、磁力异常ASM二THDR2 VDR2(3)总水平导数(THDR)2、输入/输出数据格式设计依据上述原理,现在对上述各种边缘识别方法进行程序设计。

(1-2)THDR(x, y,z)(1-3)2.1 输入数据格式设计2.3 参数文件数据格式设计将以上部分量保存在一个文件中,该文件名变量为 cmdfile ,字符串变量, 长度不超过 80,全路径名。

在该文件中保存的参数如下:输入数据文件名 input_file ,字符串变量,长度不超过 80;输出 vdr 数据文件名 output_file_vdr ,字符串变量,长度不超过 80; 输出 thdr 数据文件名 output_file_thdr ,字符串变量,长度不超过 80; 输出asm 数据文件名output_file_asm ,字符串变量,长度不超过 80factor_m :扩边比例因子,实型变量(>1);本次实验给了正演的重力异常数据,为例如: .GRD 格式,均为实型变量DSAA201 -1000.000000 -1000.000000 5.549671E-01 5.549671E-01 5.897312E-012011000.000000 1000.000000 23.539846 5.634658E-01 5.987253E-015.721339E-01 5.808522E-016.078691E-01 6.171604E-012.2 输出数据格式设计 计算结果输出数据格式与输入格式对应,例如: 格式为.GRD 格式,均为实型变量DSAA201 -1000.000 -1000.000 -0.1465084 -3.6523044E-02 -3.2688729E-02 -3.2654848E-02-3.3138681E-02201 1000.000 1000.000 0.3190881 -3.3485338E-02 -3.2723978E-02-3.3061244E-02 -3.2748722E-02 -3.2787599E-02 -3.2927759E-023.总体设计此次程序采用IPO结构设计,首先通过读取cmd文件,得到相关输入参数:输入数据文件名gravity.grd、输出vdr文件名field_vrd.grd、输出thdr文件名field_thdr.grd、输出asm文件名field_asm.grd、扩边比例因子factor_m ;然后确定确定扩边网格的大小,扩边数据点号位置;再从观测面位场数据文件中读取数据。

下一步,进行二维余弦扩边,将扩完边的数据进行快速二维傅里叶变换,转换到频率域;接下来在频率域求出在x,y,z方向的导数并反变换;最后求出 VDR、THDR ASM数据。

最后去除扩边部分后输出。

总体设计见表1。

输入参数:输入数据文件名gravity.grd、输出vdr文件名gravity_vrd.grd、输出thdr 文件名gravity_thdr.grd、输出asm文件名 gravity_asm.grd、扩边比例因子 factor_m。

确定扩边网格的大小 m*n(m,n均为2的幕次方)从输入数据文件名中读取数据对原始数据进行二维余弦扩边对扩边后的数据进行快速二维傅里叶正变换将傅里叶变换后的数据与导数因子相乘求出重力数据在x,y,z方向的导数对导数进行快速二维傅里叶反变换分别求出VDR THDR ASM值。

去除扩边部分后输出结果图4.1 总体设计N-S图4. 测试结果图4.4解析信号振幅(ASM ) 图4.5总水平导数(THDR )分析:由图4.3可看出,VDR 方法的零值线可较准确识别模型体的边界;由图 4.4可看出,ASM 的极大值点边界可大致识别模型体边界,但精度不是很高。

对 比图4.2到4.5可以看出,THDR 方法对模型边界的识别效果是最好的。

5结论及建议经测试,VDR 与THDR 对模型体的边界位置识别效果较好,而 ASM 对模 型体边界识别效果较差。

三种方法中, THDR 效果最好。

—— — 0 052◎阿呻仙P 0 打 蛙0302& 02?QQ 祐0Q12 0的 om OD>06 CKF04勺血iOCD7 C06$ C OG 0嘶 QD5 Q04& ㈣ 0冊M3CI02& 0 02 VD1& Ml coins d -0005 -0.01 &图4.3垂向导数(VDR )5 UT1 £ U15 百5 a r B EG - 5 5 J J 3 3 2- 1 1 D M 彷 曲 O 町 业 业 町 业fl o o ^tl '血—— ——UW9T生百4 咅2 1 O附录:边缘识别程序源代码!******************************************************************************************* *********! 程序功能:实现频率域位场导数运算进行边缘识别! cmd 文件参数 :! cmdfile: 存放有关参数的文件名变量! input_file: 观测面位场数据文件! output_file_vdr :场值的水平导数数据文件! output_file_thdr: 场值垂向导数数据文件! output_file_asm: 场值的解析信号振幅数据文件! factor_m :扩边因子! .grd 文件参数:! N_point,N_line :点数(x方向)、线数(y方向)! x_min,x_max : x的最小值和最大值! y_min,y_max : y的最小值和最大值! Ur: 初始观测面场值! 扩边参数:! m1,m2: x方向实际数据起点和终点点号位置! 1,m: x方向扩边后数据起点和终点点号位置! n1,n2: y方向实际数据起点和终点点号位置! 1,n3: y方向扩边后数据起点和终点点号位置! 求导参数:! field_re: 初始观测面信号的实部! field_im :初始观测面信号的虚部! Px_re:x方向导数信号的实部! Px_im:x方向导数信号的虚部! Py_re:y方向导数信号的实部! Py_im:y方向导数信号的虚部! Pz_re:z方向导数信号的实部! Pz_im:z方向导数信号的虚部! W(m,n) :径向圆频率! field_vdr: 对场值作水平导数的结果! field_thdr: 对场值作垂向导数的结果! field_asm: 场值的解析信号振幅的结果!******************************************************************************************* *********program deviationparameter(eigval=3.701411*1e5)character*(80)cmdfilecharacter*80 input_file,output_file_vdr,output_file_thdr,output_file_asm real,allocatable:: field_re(:,:),field_im(:,:) real,allocatable::Px_re(:,:),Px_im(:,:),Py_re(:,:),Py_im(:,:),Pz_re(:,:),Pz_im(:,:)real,allocatable:: field_vdr(:,:),field_thdr(:,:),field_asm(:,:)real,allocatable:: U(:),V(:),W(:,:)integer N_point,N_lineinteger m,n,m1,m2,n1,n2real factor_mreal xmin,xmax,ymin,ymax,dx,dycmdfile='deviation.cmd'call read_cmd(cmdfile,factor_m,input_file,output_file_vdr,output_file_thdr,output_file_asm)call read_grd(input_file,N_point,N_line,Xmin,Xmax,Ymin,Ymax)call calculate_mn(N_point,N_line,m,n,m1,m2,n1,n2,factor_m)allocate(field_re(1:m,1:n),field_im(1:m,1:n))allocate(Px_re(1:m,1:n),Px_im(1:m,1:n),Py_re(1:m,1:n),Py_im(1:m,1:n),Pz_re(1:m,1:n),Pz_im(1:m,1:n)) allocate(field_vdr(1:m,1:n),field_thdr(1:m,1:n),field_asm(1:m,1:n))allocate(U(1:m),V(1:n),W(1:m,1:n))call input_grd(field_re,input_file,m1,m2,n1,n2,m,n)call expand_cos_2D(m1,m2,m,n1,n2,n,field_re,field_im)call FFT2(field_re,field_im,m,n,2)CALL cal_dxdy(xmin,xmax,ymin,ymax,N_POINT,N_LINE,dx,dy)call WAVE2D(m,n,dx,dy,U,V,W)call factor(m,n,field_re,field_im,u,v,w,px_re,px_im,py_re,py_im,pz_re,pz_im)call FFT2(px_re,px_im,m,n,1)call FFT2(py_re,py_im,m,n,1)call FFT2(pz_re,pz_im,m,n,1)call deviration(m,n,px_re,py_re,pz_re,field_vdr,field_thdr,field_asm)call OUTPUT_GRD(field_vdr,output_file_vdr,m1,m2,n1,n2,m,n,eigval,xmin,xmax,ymin,ymax)call OUTPUT_GRD(field_thdr,output_file_thdr,m1,m2,n1,n2,m,n,eigval,xmin,xmax,ymin,ymax)call OUTPUT_GRD(field_asm,output_file_asm,m1,m2,n1,n2,m,n,eigval,xmin,xmax,ymin,ymax)deallocate(field_re,field_im,px_re,px_im,py_re,py_im,pz_re,pz_im,field_vdr,field_thdr,field_asm,u,v,w) end program!****************************************************************************! 子程序: read_cmd! 功能:读取参数文件! 输入参数说明:! cmdfile :参数文件名! 输出参数说明:! input_file: 观测面位场数据文件! output_file_vdr :对场值作水平导数处理后的数据文件! output_file_thdr: 对场值作垂向导数处理后的数据文件! output_file_asm: 对场值作总导数处理后的数据文件! factor_m :扩边因子!****************************************************************************Subroutine read_cmd(cmdfile,factor_m,input_file,output_file_vdr,output_file_thdr,output_file_asm) implicit nonecharacter*80 str character*(*)cmdfile character*(*)input_file,output_file_vdr,output_file_thdr,output_file_asm real factor_m open(10,file=cmdfile,status='old')read(10,*)str,input_file read(10,*)str,output_file_vdr read(10,*)str,output_file_thdrread(10,*)str,output_file_asm read(10,*)str,factor_m close(10) end Subroutine read_cmd!***************************************************************************! 子程序: read_grd! 功能:从原始观测 .grd 文件中读取相关参数! 输入参数说明:! filename_obser :输入文件名! 输出参数说明:! N_point,N_line :点数、线数! x_min,x_max : x 的最小值和最大值! y_min,y_max : y 的最小值和最大值!*************************************************************************** subroutineread_grd(input_file,N_point,N_line,Xmin,Xmax,Ymin,Ymax) implicit nonecharacter*(*)input_fileinteger N_point,N_linereal Xmin,Xmax,Ymin,Ymax open(10,file=input_file,status='old')Read(10,*)Read(10,*)N_line,N_pointRead(10,*)Xmin,XmaxRead(10,*)Ymin,YmaxClose(10)end subroutine read_grd!**************************************************************************! 子程序: calculate_mn! 功能:确定扩边数据点号位置! 输入参数说明:! factor_m: 扩边比例因子( >1.0 )! a,b:点数、线数! 输出参数说明:! m1,m2: x方向实际数据起点位置和终点位置点号! m:扩边后数据终点位置点号(起点位置点号为1)! n1,n2: y方向实际数据起点位置和终点位置点号! n:扩边后数据终点位置点号(起点位置点号为1)!**************************************************************************subroutine calculate_mn(a,b,m,n,m1,m2,n1,n2,factor_m)implicit noneinteger a,b,m,n,m1,m2,n1,n2integer mtemp,mu,nureal factor_mmtemp=aDO WHILE ((mod(mtemp,2).eq.0).and.(mtemp.ne.0))mtemp=mtemp/2End doIF (mtemp.eq.1) THENm=a*2ELSEmu=int(log(float(a))/0.693147+factor_m)m=2**muEND IFm1=1+(m-a)/2m2=m1+a-1write(*,*)m,apausemtemp=bDO WHILE ((mod(mtemp,2).eq.0).and.(mtemp.ne.0))mtemp=mtemp/2End doIF (mtemp.eq.1) THENn=b*2ELSEnu=int(log(float(b))/0.693147+factor_m)n=2**nuEND IF n1=1+(n-b)/2 n2=n1+b-1 write(*,*)m1,m2,n1,n2,m,n pauseend subroutine calculate_mn !************************************************************************* ! 子程序: INPUT_GRD! 功能:读取 grd 文件中的数据! 输入参数说明:! filename_obser :输入文件名! m1,m2: x 方向实际数据起点位置和终点位置点号! m:扩边后数据终点位置点号(起点位置点号为1)! n1,n2: y方向实际数据起点位置和终点位置点号! n:扩边后数据终点位置点号(起点位置点号为1)! 输出参数说明:! A :存放输出数据的二维数组名!*************************************************************************SUBROUTINE INPUT_GRD(A,input_file,m1,m2,n1,n2,m,n) character*(*)input_fileinteger m1,m2,n1,n2,m,nreal xmin,xmax,ymin,ymaxreal A(1:m,1:n)real i,j,kdo j=1,n,1do i=1,m,1A(i,j)=3.701411*1e10enddoenddoOpen(20,file=input_file,status='old') read(20,*) read(20,*)read(20,*)xmin,xmaxread(20,*)ymin,ymaxread(20,*)read(20,*) ((A(i,j),i=m1,m2),j=n1,n2)Close(20)END SUBROUTINE INPUT_GRD! 子程序: expand_cos_2D! 功能:二维扩边子程序并为信号虚部赋值! 输入参数说明:! m1,m2: x 方向实际数据起点位置和终点位置点号! m:扩边后数据终点位置点号(起点位置点号为1)! n1,n2: y方向实际数据起点位置和终点位置点号! n:扩边后数据终点位置点号(起点位置点号为1)! Ur: 初始观测面信号的实部! Ui :初始观测面信号的虚部! 输出参数说明:! Ur: 初始观测面信号的实部! Ui :初始观测面信号的虚部!*************************************************************************subroutine expand_cos_2D(m1,m2,m,n1,n2,n,Ur,Ui) implicit noneinteger m,n,m1,m2,n1,n2real Ur(1:m,1:n),Ui(1:m,1:n)real,allocatable::u(:),r(:)integer j,i,kallocate(u(1:m))do j=n1,n2,1do i=1,m,1u(i)=Ur(i,j)enddocall expand_cos_1d(1,m1,m2,m,u(1))do i=1,m,1Ur(i,j)=u(i)enddoenddo deallocate(u)allocate(r(1:n))do i=1,m,1do j=1,n,1r(j)=Ur(i,j)enddocall expand_cos_1d(1,n1,n2,n,r(1)) do j=1,n,1Ur(i,j)=r(j)enddoenddo deallocate(r)do i=1,mdo j=1,nUi(i,j)=0enddoenddoend subroutine expand_cos_2D!**************************************************************************! 子程序: expand_cos_1d! 功能:一维扩边子程序! 输入参数说明:! n0,n3:扩边后数据起点位置和终点位置! n1,n2:实际数据起点位置和终点位置! feild(i),(i=n1,n1+1,...,n2) :实际数据! 输出参数说明:! field(i),(i=n0,...,n1-1) :扩边后左边的数据! field(i),(i=n2+1,...,n3) :扩边后右边的数据!************************************************************************** Subroutine expand_cos_1d(n0,n1,n2,n3,Field)Real Field(n0:n3)pi=3.141592654Field (n0)=(Field (n1)+Field (n2))/2.0Field (n3)=Field (n0)i1=n0i2=n1DO i=i1,i2-1,1Field(i)=Field(i1)+cos(pi/2.0*(i2-i)/(i2-i1))*(Field(i2)-Field(i1)) End doi1=n2i2=n3DO i=i1+1,i2,1Field(i)=Field(i1)+cos(pi/2.0*(i2-i)/(i2-i1))*(Field(i2)-Field(i1)) End doEnd subroutine expand_cos_1d! 功能: FFT2! 功能:复数组2-D快速Fourier变换! 输入参数说明:! m0,m3: x 方向的起点和终点! n0,n3: y 方向的起点和终点! field :输入信号(需要赋值给Freal,实部)! m,n: x,y 方向扩边后数据终点点号位置(起始点号为 1)! NF: 正、反变换标志量 (1:反变换 ;2:正变换 )! 输出参数说明:! Freal:信号的实部! Fimage:信号的虚部(对于实信号而言,赋值为0)! 对应频率分布说明:! 数据Freal(m,n)和Fimage(m,n)对应的频率分布位置为:! m 方向: 0,1, ..... ,m/2-1,m/2,-(m/2-1), .. ,-1! n 方向: 0,1, ..... ,n/2-1,n/2,-(n/2-1), ,-1!************************************************************************ SUBROUTINE FFT2(Freal,Fimage,m,n,nf)implicit noneINTEGER m,n,nfREAL Freal(1:m,1:n),Fimage(1:m,1:n)real,ALLOCATABLE::Treal(:),Timage(:)integer nmmax,ierr,i,jnmmax=max(m,n) allocate(Treal(1:nmmax),Timage(1:nmmax),STAT=ierr) if(ierr.ne.0) STOPDO i=1,m,1IF (n.ne.1) THENdo j=1,n,1Treal(j)=Freal(i,j)Timage(j)=Fimage(i,j)end docall FFT(Treal,Timage,n,nf)do j=1,n,1Freal(i,j)=Treal(j)Fimage(i,j)=Timage(j)end doEND IFEND DODO j=1,n,1IF(m.ne.1) THENdo i=1,m,1Treal(i)=Freal(i,j)Timage(i)=Fimage(i,j)end docall FFT(Treal,Timage,m,nf)do i=1,m,1Freal(i,j)=Treal(i)Fimage(i,j)=Timage(i)end doEND IFEND DOdeallocate(Treal,Timage,STAT=ierr)END SUBROUTINE FFT2!****************************************************************** ! 子程序: FFT! 功能:复数组 1-D 快速 Fourier 变换! 输入参数说明:! Xreal(n): 输入数据实部! Ximage(n): 输入数据虚部! N: 点数( N 必须为 2 的幂次方)! NF: 正、反变换标志量 (1: 反变换 ;2:正变换 )! 输出参数说明:! Xreal(n): 变换后频谱实部! Ximage(n): 变换后频谱虚部! 对应频率分布说明:! 数据 Xreal(n) 和 Ximage(n) 对应的频率分布位置为! 0,1, ... ,n/2-1,n/2,-(n/2-1), . ,-1!***************************************************************** SUBROUTINE FFT(Xreal,Ximage,n,nf)implicit noneINTEGER n,nfREAL Xreal(1:n),Ximage(1:n)integer nu,n2,nu1,k,k1,k1n2,l,i,ibitrreal f,p,arg,c,s,treal,timagenu=int(log(float(n))/0.693147+0.001)n2=n/2nu1=nu-1f=float((-1)**nf)k=0DO l=1,nu,1DO while (k.lt.n)do i=1,n2,1p=ibitr(k/2**nu1,nu) arg=6.2831853*p*f/float(n) c=cos(arg) s=sin(arg) k1=k+1 k1n2=k1+n2treal=Xreal(k1n2)*c+Ximage(k1n2)*s timage=Ximage(k1n2)*c-Xreal(k1n2)*s Xreal(k1n2)=Xreal(k1)-trealXimage(k1n2)=Ximage(k1)-timage Xreal(k1)=Xreal(k1)+treal Ximage(k1)=Ximage(k1)+timage k=k+1 end dok=k+n2END DOk=0nu1=nu1-1 n2=n2/2 END DODO k=1,n,1i=ibitr(k-1,nu)+1 if(i.gt.k) then treal=Xreal(k) timage=Ximage(k) Xreal(k)=Xreal(i) Ximage(k)=Ximage(i) Xreal(i)=treal Ximage(i)=timage end ifEND DOIF(nf.ne.1) THENdo i=1,n,1Xreal(i)=Xreal(i)/float(n)Ximage(i)=Ximage(i)/float(n)end doEND IFEND SUBROUTINE FFTFUNCTION IBITR(J,NU) implicit none integer ibitr,j,nu integer j1,itt,i,j2 j1=j itt=0 do i=1,nu,1 j2=j1/2 itt=itt*2+(j1-2*j2) ibitr=ittj1=j2end doEND FUNCTION IBITR!***************************************************************************! 子程序: cal_dxdy! 功能:计算 x,y 方向的点距! 输入参数说明:! x_min,x_max : x 的最小值和最大值! y_min,y_max : y 的最小值和最大值! N_point,N_line :点数(x方向)、线数(y方向)! 输出参数说明:! dx,dy: x,y方向的点距!***************************************************************************subroutine cal_dxdy(xmin,xmax,ymin,ymax,N_POINT,N_LINE,dx,dy) implicit nonereal xmin,xmax,ymin,ymaxinteger N_POINT,N_LINEreal dx,dydx=(xmax-xmin)/N_POINTdy=(ymax-ymin)/N_LINEend subroutine cal_dxdy !******************************************************************! 子程序: WAVE2D! 功能:计算 2D 径向圆频率 W! 输入参数说明:! dx: x 方向点距! dy: y 方向线距! m: 点数( M 必须为 2 的幂次方)! n: 线数( N 必须为 2 的幂次方)! 输出参数说明:! W(m,n): 径向圆频率!******************************************************************SUBROUTINE WAVE2D(m,n,dx,dy,U,V,W)implicit noneINTEGER m,nREAL dx,dyREAL W(1:m,1:n),U(1:m),V(1:n)real pi,delx,delyinteger midm,midn,i,j,xx,yy midm=m/2+1 midn=n/2+1 delx=float(m)/dx dely=float(n)/dy do j=1,n,1 yy=j if(yy.gt.midn) yy=yy-n v(j)=dely*(yy-1) end do do i=1,m,1 xx=i if(xx.gt.midm) xx=xx-m u(i)=delx*(xx-1) end do do j=1,n,1do i=1,m,1 w(i,j)=sqrt(u(i)*u(i)+v(j)*v(j)) end doend doEND SUBROUTINE WAVE2D!***********************************************************************************! 子程序: factor! 功能:计算 x,y,z 方向导数的实部和虚部!! 输入参数说明:! m: 点数( M 必须为 2 的幂次方)! n: 线数( N 必须为 2 的幂次方)! field_re: 初始观测面信号的实部! field_im :初始观测面信号的虚部! W(m,n) :径向圆频率! 输出参数说明:! Px_re:x 方向导数信号的实部! Px_im:x 方向导数信号的虚部! Py_re:y 方向导数信号的实部! Py_im:y 方向导数信号的虚部! Pz_re:z 方向导数信号的实部! Pz_im:z 方向导数信号的虚部!***********************************************************************************subroutine factor(m,n,field_re,field_im,u,v,w,px_re,px_im,py_re,py_im,pz_re,pz_im)implicit noneinteger m,nreal field_re(1:m,1:n),field_im(1:m,1:n)real px_re(1:m,1:n),px_im(1:m,1:n),py_re(1:m,1:n),py_im(1:m,1:n),pz_re(1:m,1:n),pz_im(1:m,1:n) real U(1:m),V(1:n),W(1:m,1:n)integer i,jreal pipi=3.1415926do i=1,m,1do j=1,n,1px_re(i,j)=field_im(i,j)*u(i)*(-1)*pi*2.0px_im(i,j)=field_re(i,j)*u(i)*pi*2.0py_re(i,j)=field_im(i,j)*v(j)*(-1)*pi*2.0py_im(i,j)=field_re(i,j)*v(j)*pi*2.0pz_re(i,j)=field_re(i,j)*w(i,j)*pi*2.0pz_im(i,j)=field_im(i,j)*w(i,j)*pi*2.0end doend doend subroutine factor!***************************************************************************! 子程序: deviration! 功能:计算异常的水平导数、垂向导数及总导数!! 输入参数说明:! m: 点数( M 必须为 2 的幂次方)! n: 线数( N 必须为 2 的幂次方)! Px_re:x 方向导数信号的实部! Px_im:x 方向导数信号的虚部! Py_re:y 方向导数信号的实部! Py_im:y 方向导数信号的虚部! Pz_re:z 方向导数信号的实部! Pz_im:z 方向导数信号的虚部! 输出参数说明:! field_vdr: 对场值作水平导数的结果! field_thdr: 对场值作垂向导数的结果! field_asm: 对场值作总导数的结果!************************************************************************** subroutine deviration(m,n,px_re,py_re,pz_re,field_vdr,field_thdr,field_asm) implicit noneinteger m,nreal px_re(1:m,1:n),py_re(1:m,1:n),pz_re(1:m,1:n)real field_vdr(1:m,1:n),field_thdr(1:m,1:n),field_asm(1:m,1:n)integer i,jdo i=1,m,1do j=1,n,1field_vdr(i,j)=pz_re(i,j) field_thdr(i,j)=sqrt(px_re(i,j)**2+py_re(i,j)**2)field_asm(i,j)=sqrt(field_vdr(i,j)**2+field_thdr(i,j)**2) end doend do end subroutine deviration!***************************************************************************! 子程序: OUTPUT_GRD! 功能:输出结果!! 输入参数说明:! A :存放输出数据的二维数组! m: 点数( M 必须为 2 的幂次方)! n: 线数( N 必须为 2 的幂次方)! m1,m2:实际数据x方向起点位置和终点位置! n1,n2:实际数据y方向起点位置和终点位置! 输出参数说明:! x_min,x_max : x的最小值和最大值! y_min,y_max : y的最小值和最大值! filename:存放输出结果的文件名! field_vdr: 对场值作水平导数的结果! field_thdr: 对场值作垂向导数的结果! field_asm: 场值的解析信号振幅的结果!**************************************************************************SUBROUTINE OUTPUT_GRD(A,filename,m1,m2,n1,n2,m,n,eigval,xmin,xmax,ymin,ymax) real eigval integer m1,m2,n1,n2,m,nreal A(1:m,1:n) character*(*) filename real amin,amax amin=HUGE(amin) amax=-HUGE(amax)write(*,*)m1,m2,n1,n2,m,n pauseeigval=3.701411*1e5DO j=n1,n2,1 do i=m1,m2,1 if(ABS(A(i,j)).lt.eigval) then amin=MIN(amin,A(I,j)) amax=MAX(amax,A(I,j)) end ifend doEND DOOPEN(20,file=filename,status='unknown',form='formatted') write (20,'(A)')'DSAA' write (20,*)m2-m1+1,n2-n1+1 write (20,*)xmin,xmax write (20,*)ymin,ymaxwrite(20,*)amin,amaxDo j=n1,n2,1 write(20,*) (A(i,j),i=m1,m2) End doClose(20)END subroutine OUTPUT_GRD。

相关文档
最新文档