计算机考研面试题目_第1页
计算机考研面试题目_第2页
计算机考研面试题目_第3页
计算机考研面试题目_第4页
计算机考研面试题目_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8086/8088的内部中断主要有5种。

(1)除法错中断

(2)单步中断

(3)断点中断

(4)溢出中断

(5)用户自定义的软件中断

在8086/8088内存的开始1K字节建立了一个中断向量表,每个中断向量由4个字节组

成,低两位是IP值,高两位是CS值,这个CS:IP地址表示当相应中断发生时,中断

处理程序的入口地址。

关闭中断标识,重要数据入栈,处理中断服务功能(你要实现的功能),数据出栈,恢复中

断标识,开中断.

ExtJS

不同其他的JavaScript库,ExtJS为您的开发夯实了基础,只

需几行代码,你就可以制作出丰富的用户界面。

Ext库是对雅虎YUI的一个拓展,提供了它所不支持的特性:良好的APL真实的控

件。虽然YUI致力于用户界面,但是它却没有提供许多有用的功能。?

Ext的产生源自于开发者、开源贡献者们将YUI扩展成一个强大的客户端应用程序库

的努力。?

Ext提供了一个简单丰富的用户界面,如同桌面程序一般。这使得开发者能够

把精力更多的转移到实现应用的功能上。Ext官网上的示例会让你知道它是如何的不

可思议:

Ext让通过如下的方式来让web应用的开发变的十分简单:?

??提供简单的,跨浏览器的控件,如:窗口、表格、表单。这些组件都是能够适应

市场上的主流浏览器的。我们不需要做任何改动。?

??用户是通过EventManager来和浏览器做交互的,相应的事件有:用户的键盘输

入,鼠标击打,浏览器监听(窗口改变大小,改变字休)等等;?

??在和用户交互时不需要刷新页面,一切在后台进行。它允许你从服务器通过AJAX

来获取或者提交数据并且在第一时间执行你的反馈。

JavaEE

MVC:开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制

器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的

表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保

M和V的同步,一旦M改变,V应该同步更新。[1-2]

Hibernate是一个实现数据持久化的工具项目,它可以被嵌入到J2EE服务器中使

用,也可以直接从客户端调用,通常的使用方式是将Hibernate嵌入到Tomcat和JBoss

等服务器中使用。

简单的说就是在表的记录与与表对应的持久化类的实例之间进行转换。

Spring:Spring表示是一个开源框架,是为了解决企业应用程序开发复杂性。框架的

主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE

应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB

完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松

耦合的角度而言,任何Java应用都可以从Spring中受益。

♦目的:解决企业应用开发的复杂性

♦功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

♦范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(loC)和面向切面(AOP)的容器框架。

♦轻量一一从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在

一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。

此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

♦控制反转一一Spring通过一种称作控制反转(loC)的技术促进了松耦合。当应用

了loC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创

建或者查找依赖对象。你可以认为loC与JNDI相反一一不是对象从容器中查找依赖,

而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

♦面向切面一一Spring提供了面向切面编程的丰富支持,允许通过分离应用的'业务

逻辑与系统级服务(例如审计〔auditing)和事务(transaction)管理)进行内聚性的开

发。应用对象只实现它们应该做的一一完成业务逻辑一一仅此而已。它们并不负责(甚

至是意识)其它的系统级关注点,例如日志或事务支持。

♦容器一一Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种

容器,你可以配置你的每个bean如何被创建一一基于一个可配置原型(prototype),你

的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例一一以及它们是

如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是

庞大与笨重的,难以使用。

♦框架一一Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应

用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事

务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

♦MVC——Spring的作用是整合,但不仅仅限于整合,Spring框架可以被看做是一

个企业解决方案级别的框

架。客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,

控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来

处理请求。HandlerMapping将请求映射到对应的处理器Controller(相当于Action)在

Spring当中如果写一些处理器组件,一般实现Controller接口,在Controller中就可以

调用一些Service或DAO来进行数据操作ModelAndView用于存放从DAO中取出的

数据,还可以存放响应视图的一些数据。如果想将处理结果返回给用户,那么在Spring

框架中还提供一个视图组件ViewResolver,该组件根据Controller返回的标示,找到对

应的视图,将响应response返回给用户。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。

它们也为Spring中的各种模块提供了基础支持“

JAVAEE:是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化

旦规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。核心是一组技术规

范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循架构

的不同平台之间,存在良好兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部

或外部难以互通的窘境。

Struts:struts是开源软件。使用Struts的目的是为:帮助我们减少在运用MVC

设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立

可扩展的应用,struts是一个不错的选择。它采用MVC模式,能够很好地帮助java开发

者利用J2EE开发Web应用。和其他的java架构一样,Struts也是面向对象设计,将MVC

模式〃分离显示逻辑和业务逻辑〃的能力发挥得淋漓尽致。Structs框架的核心是一个弹

性的控制层,基于如JavaServlets,JavaBeans,Resource3undl.es与XML等标准技术,

以及JakartaCommons的一些类库。

JSON:JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基

1.C的结构体和C++结构体的区别

1.1C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所

以C的结构体是没有构造函数、析构函数、和this指针的。

1.2C的结构体对内部成员变量的访问权限只能是public,而C++允许

public,protected,private三种。

L3C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

以上都是表面的区别,实际区别就是面向过程和面向对象编程思路的区另不

C的结构体只是把数据变量给包裹起来了,并不涉及算法。

而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不

同的访问权限。

C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

2.C++的结构体和C++类的区别

2.1C++结构体内部成员变量及成员函数默认的访问级别是public,而C++类的内部成员变量

及成员函数的默认访问级别是private。

2.2C++结构体的继承默认是public,而C++类的继承默认是privateo

静态链接库、动态链接库与COM组件的区别

i.动态链接库与静态链接库的区别。

i.i静态链接库作为代码的•部分,在编译时被链接。

1.2动态链接库有两种使用方式:

一种是静态加载,跳在应用程序启动时被加载:

•种是动态加载,即是该动态链接库在被使用时才被应用程序加载。

2.动态链接库和C0U组件的区别

2.1动态链接库的表现形式只能是dll[变态该名的除外],COM组件的表现形式可以是dll

也可以是exe。

注:其实字体、驱动等也算是动态链接库的一种,这里略去.•・

2.2动态链接库的生成和编译器及系统相关,在Windows/Linux下系统,需要分别编译才

能使用。

COM组件是二进制编码,在Windows和Linux下可以直接使用,不需要重新编译。

2.3COM组件是按照COM规范实现的dll或者exe;动态链接库是一个可以导出函数的函数

集合。

2.4动态链接库只能在本机被调用,COM组件支持分布式使用。

MAC地址是不能通过IP来查询的!

局域网如何根据ip查mac

cmd

pingip地址

arp-a

即使ping不通,只要他机开着,都可以看到MAC!!

显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存和包含一个或多个表,它们用

于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌

环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则arp命令将显示帮助信息。

-a[InetAddr][-NIfaceAddr]

显示所有接口的当前ARP缓存表,要显示特定IP地址的ARP缓存项,请使用带有IiieUddi

参数的arp-a,此处的InetAddr代表IP地址。如果未指定InetAddr,则使用第一个适用的

接口。要显示特定接口的ARP缓存表,请将-NIfaceAddr参数与-a参数一起使用,此处的

IfaceAddr代表指派给该接口的IP地址。-N参数区分大小写。

BIOS

BIOS设置程序是储存在BTOS芯片中的,BIOS芯片是主板上一块长方形或正方形芯片,只有

在开机时才可以进行设置。

BIOS是:直译过来后中文名称就是“基本输入输出系统”。其实,它是•组固化到计算机内主

板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、a

机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和

控制。

数学中的梯度是什么意思?

在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最

快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧氐空间Rn到R的函数的梯度是

在Rn某一点最佳的线性近似。在这个意义上,梯度是雅戈比矩阵的一个特殊情况。

在单变量的实值函数的情况,梯度只是导数,或者,对于一个线性函数,也就是线的斜率。

梯度一词有时用于斜度,也就是一个曲面沿着给定方向的倾斜程度。可以通过取向量梯度和

所研究的方向的点积来得到斜度。梯度的数值有时也被成为梯度。

如果你是问在纯数学中的作用,那就是反映那个量变化的有多剧烈;多元微积分中则还反映在哪

个方向上变化最剧烈.

云计算

云计算111是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网

来提供动态易扩展且经常是虚拟化的资源。定义:“云计算是通过网络提供可伸缩的廉

价的分布式计算能力”。

云计算代表了以虚拟化技术为核心、以低成木为目标的动态可扩展网络应用基础设

施,是近年来最有代表性的网络计算技术与模式。

云计算是:分布式计算、并行计算、效用计算、[3]网络存储、虚拟化、负载均衡等

传统计算机和网络技术发展融合的产物。

右计算是遇过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器

中,企业数据中心的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用

上,根据需求访问计算机和存储系统。

好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可

以作为一种商品进行流通,就像煤气、水电一样,取用方便,费用低廉。最大的不同在

于,它是通过互联网进行传输的。

网格计算:分布式计算的一种,由一群松散耦合的计算机组成的一个超级虚拟计算机,常用来执

行一些大型任务;

效用计算:IT资源的一种打包和计费方式,比如按照计算、存储分别计量费用,像传统的电力等

公共设施一样;

算法的时间复杂度

一个算法花费的时间与算法中语句的执行次数或正比例U一个算法中的语句执行次数

称为语句频度或时间频度。记为T(n)。

计算方法

1.般情况下,算法的基本操作重史执行的次数是模块n的某个函数f(n),因此,算法的时间

复杂度记做:T(n)=O(f(n))

分析:随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,

算法的时间复杂度越低,算法的效率越高;

2.在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,

再找出T(n)的同数量级(它的同数曷级有以下:1,log(2)n,n,nlog(2)n,n的平方,n的三次方,

2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)

=O(f(n))

十种程序设计语言

PASCAL,C、Ada

FORTRAN、BASIC、VisualBasicJava、C++、Go、Delphi、F#

SQL,PowerBuilder,

static全局变量与普通的全局变量有什么区别?

全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变

量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式

上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程

序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在

同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件

内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变

了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范

围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该

说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文

件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头

文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止

在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一

次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个

被调用中维持一份拷贝

C语言中讲讲static变量和static函数有什么作用

static关键字有两种意思,你看上下文来判断

1,表示变量是静态存储变量

表示变量存放在静态存储区.

2,表示该变量是内部连接

(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static)

,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).

当static加在函数前面的时候

表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.

不加static的函数默认为是全局的.

也就是说在其他的.cpp中只要中明一下这个函数,就可以使用它.

1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有

什么区别?static困数与普通函数有什么区别?

答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局

变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方

式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源

程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局

变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源

文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件

内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变

了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范

围。

static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文

件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定

义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数

的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防

止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下

一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每

个被调用中维持一份拷贝

2、如何引用一个已经定义过的全局变量?

答:extern

可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引

用某个在头文件中声明的全局受理,假定你将那个变写错了,那么在编译期间会报错,

如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在

连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此

变量赋初值,此时连接不会出错。

比较两个浮点数大小

在计算机中表示一个浮点数,其结构如下:

尾数部分(定点小数)阶码部分(定点整数)

是2的指数形式来表示小数。因此一个小数用浮点数来表示,肯定是有误差的。

比如说两个运算过程,它们的结果都是2,但是由于浮点运算浮点数比较相等的时候,

用两个数的相减,当小于一个比较小的值时,就认为相等。

3D打印

3D打印,即快速成型技术的一种,它是一种以数字模型文件为基础,运用粉末状金属或塑

料等可粘合材料,通过逐层打印的方式来构造物体的技术。

3D打印通常是采用数字技术材料打卬机来实现的。常在模具制造、工业设计等领域被用于

制造模型,后逐渐用于一些产品的直接制造,已经有使用这种技术打印而成的零部件。该技术在

珠宝、鞋类、工业设计、建筑、工程和施工(AEC)、汽车,航空航天、牙科和医疗产业、教育、

地理信息系统、土木工程、枪支以及其他领域都有所应用。[1]

而所谓的3D打印机与普通打印机工作原理基本相同,只是打印材料有些不同,普通打印机

的打印材料是墨水和纸张,而3D打印机内装有金属、陶瓷、塑料、砂等不同的“打印材料”,

是实实在在的原材料,打印机与电脑连接后,通过电脑控制可以把“打印材料”一层层叠加起来,

最终把计算机上的蓝图变成实物。通俗地说,3D打印机是可以“打印”出真实的3D物体的一

种设备,比如打印一个机器人、打印玩具车,打印各种模型,甚至是食物等等。之所以通俗地称

其为“打印机”是参照了普通打ER机的技术原理,因为分层加工的过程与喷墨打印十分相似。这

项打印技术称为3D立体打印技术。[2]

大数据

分析新数据源的业务需求

数据挖掘需要人工智能、数据库、机器语言和统计分析知识等很多跨学科的知识。再

者,数据挖掘的出现需要条件,第一个条件:海量的数据;第二个条件:计算机技术大

数据量的处理能力;第三个条件:计算机的存储与运算能力;第四个条件:交叉学科的

发展。

大数据只是数据挖掘的出现的一个条件。

更为复杂的新数据已经出现,而且生成的速度达到了前所未有的程度

社交网络数据、网络日志、存档数据和传感器数据都属于人们在分析中关注的新数据源

尽管传统环境不断发展,但如今出现了许多更为复杂的新数据类型,企业需要分析这些数据类型,

以便充实其已知信息。此外,这些新数据的生成速度远远超过了以往的纪录。

客户和潜在客户正在社交网络和评论网站中创建大量的新数据。此外,在线新闻项目、气象数据、

竞争对手网站内容,甚至是数据市场如今都已经成为可供企业使用的候选数据源。

在企业内部,随着客户转变为以在线渠道作为开展商业交易及与企业互动的首选方法,网络日志

也在不断增加。分析所用的存档数据再次增多,为监测和优化业务运营而部署的传感器网络和机

燃数量也越来越多。结果就生成了大量新数据源、快速增加的数据量和迅速增加的新数据流,需

要分析所有这些新数据。

在信息量如此庞大的背景下,为找寻关键问题的答案,现在的企业战略对于信

息管理和利用能力的依赖性更胜于以往。

伴随着井喷式的数据增长,孤立的数据存储是造成信息管理和集成成本激增的主要原因。面对着

分赦于不同数据库的孤立数据,企业主管无法确保自己能够全面掌握客户、产品和供应商的情况。孤

立的信息同样也令遵守行业或政府法规的难度加大。

在岩息集成战略和技术的帮助下,能够在正确时间从任意来源检索数据,编排格式后再提供给企业内

外的任意目标。值息集成能够帮助企业执行许多关键任务,其中包括将多个来源的数据加载到仓库当

中,整合应用程序实例,以及将不同部门和分部的信息关联起来。通过将企业信息整合成单一来源(不

论恃息存储于什么位置),企业能够快速处理信息,缩短停机时间,减少客户服务问题,并在尽量不

影响性能的情况下分配信息。

IBM信息集成解决方案用于集成及转化数据和内容,进而提供权威'一致、及时、完整的信息,并

且在数据的整个生命周期内控制数据质量。其近线性的无缝扩展能力以及以元数据为驱动的设计能够

帮助企业将不同数据库统一成单一的整合信息库,以及识别和更正不准确或冗余的数据。

给你解释一下这些术语:

云升和:就是个炒得很热的商业概念,其实说白了就是将计完任务转移到服务器端,用户只需要个显

示器就行了,不过服务器的计算资源可以转包。当然,要想大规模商业化,这里还有些问题,特别是

隐私保护问题。

大数据:说白了就是数据太多了。如今几兆的数据在20年前也是大数据。但如今所说的大数据特殊在

哪昵?如今的问题是数据实在是太多了,这已经超过了传统计算机的处理能力(区别与量子计算机),

所以对于大数据我们不得不用一些折衷的办法(比如数据挖掘),就是说没必要所有数据都需要精确

管理,实际上有效数据很有限,用数据挖掘的方法把这些有限的知识提取出来就行了。•此外,数据

抽洋,数据压缩也是解决大数据问题的一些策略。

数据挖掘:从数据中提取潜在知识,这些知识可以描述或者预测数据的特性。有代表性的数据挖掘任

务包括关联规则分析、数据分类、数据聚类等,这些你在任一本数据挖掘教材都可以了解。下面我说

说和大数据的区别:数据挖掘只是大数据处理的一个方法。乌云所说的大数据,或者如今商业领域所

说的大数据,实际上指的就是数据挖掘,其实真正所谓大数据,或者Science杂志中提到的大数据,

或者奥巴马提出的大数据发展战略,我的理解是,这些都远远大于数据挖掘的范畴,当然数据挖掘是

其中很重要的一个方法。真正A的是如何将大数据进行有效管理。

机搭学习:这个词很虚,泛指了一大类计算机算法。重点是学习这个词,如果想让计算机有效学习,

目前绝大多数方法都采用了迭代的方法。所以在科研界,只要是采用了这种迭代并不断逼近的策略,

•般都可以归到机器学习的范畴。火外,所谓学习,肯定要知道学什么,这就是所谓训练集,从训练

集数据中计算机要学到其中的某个一般规律,然后用一些别的数据(即测试集)来看看学得好不好,

之后才能用于实际应用。所以,选取合适的训练集也是个学问。

模式识别:意思就是模式的识别。模式多种多样,可以是语言,可以是图像,可以是事物一些有意义

的磅块,这些都算。所以总体来说,模式识别这个词我是觉得有点虚,倒是具体的人脸图像识别、声

音识别等,这些倒是挺实在的。也许是我不太了解吧。

另外说说你的其他问题。

传统分析方法不包括数据挖掘。对了数据分析这块我不是很了解,不过可以肯定的是,传统分析都有

•定的分析方向,比如我就想知道这两个商品的关联情况,那我查查数据库就行了。数据挖掘虽说有

些历史,不过也挺时髦的,它是自动将那些关联程度大的商品告诉你,这期间不需要用户指定数据分

析的具体对象。

如果想应对大数据时代,数据挖掘这门课是少不了的。此外对数据库,特别是并行数据库、分布式数

据库,最好r解点。至于机器学习和模式识别,这些总的来说和数据挖掘关系不太大,除r一些特殊

的领域外。

总之,概念挺热,但大数据还很不成熟,无论从研究上还是商业化上。我目前在作大数据背景下的算

法研究,说实话,目前基本没有拓展性非常强的算法,所以未来大数据的发展方向,我也挺迷茫。

PS:将数据挖掘应用于商业,最最重要的就是如何确定挖掘角度,这需要你对具体应用的领域知识

非常了解,需要你有非常敏锐的眼光。至于数据挖掘的具体算法,这些就交给我们专门搞研究的吧!

(对算法的理解也很重要,这可以把算法拓展到你的应用领域)

直方图

灰度直方图的定义

灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横

坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。

[OpenCV]数字图像灰度直方图

灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的

结陶和应用。

灰度直方图的定义

灰度直万图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横

坐赤是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。

一堆直方图的结构表示为

高雄直方图可以理解为图像在每个维度上灰度级分布的直方图。常见的是二维直方图。如红•蓝

直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。其图像坐标(Dr,Db)

处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。这是基于多

光谱--每个像素有多个变量--的数字图像,二维中对应每个像素统计个变量。

OpenCV中的直方图CvHistogram

注意我们在上面理解直方图的意义时更多把他想象成一幅“图”,继而理解图中横坐标,纵坐标的意

义。而在OpenCV中,应该更多把直方图看做“数据结构”来理解。

OpenCV中用CvHistogram表示多维直方图():

1typedefstructCvHistogram

2{

3inttype;

4CvArr*bins;〃存放每个灰度级数目的数组指针

5floatthresh[CV_MAX_DIM][2];〃均匀直方图

6float**thresh2;〃非均匀直方图

7CvMatNDmat;〃直方图数组的内部数据结构

8}

9CvHistogram;

这个结构看起来简单(比Ipllmage*元素少多了。。。)其实并不太好理解。

第一个成员type用来指定第二个成员bins的类型。OpenCv中常见到CvArr"的接口,可以用以指定

诸如CvMat、CvMatND.Ipllmage的类型,其实CvArr"的是一个指向void的指针。在函数内部有时

需要得到确切的指向类型,这就需要type来指定。

thresh用来指定统计直方图分布的上下界。比如[0255]表示用来统计羽像中像素分别在灰度级[0255]

区间的分布情况,CV_MAX_DIM对应直方图的维数,假如设定二维红•蓝直方图的thresh为[0255;100

200],就是分别统计红色图像灰度级在[0255]以及蓝色图像在灰度级[100200]的分布情况。

thresh用以指定均匀直方图的分布,我们按每个像素理解自然是“均匀分布”,其实也可以统计像素

在几个区间的分布。如果统计像素在2个区间的分布,则对应[0255]的上下界,均匀分布统计的区间

即[0127][127255]分布的概率,这也是为什么thresh第二个维数默认为2—会自动均分上下界;

而thresh2指定非均匀的分布,这就需要指定每个区间的上下界,如果要统计直方图在区间(0,

10,100,255)的分布,那需要指定由伊卜2的一个维度为[010100255],所以用float**形式表示。

mat简单说就是存储了直方图的信息,即我们统计的直方图分布概率。

创建直方图cvCreateHist()

OpenCV中用cvCreateHist()创建一个直方图:

10CvHistogram*cvCreateHist(

11intdims,〃直方图维数

12int*sizes,//直翻图维数尺寸

13inttype,〃直方图的表示格式

14float**ranges=NULLJ〃图中方块范围的数组

15intuniform=l〃归一化标识

16);

size数组的长度为dims,每个数表示分配给对应维数的bin的个数。如dims=3,则size中用[s1,s2,s3]

分别指定每维bin的个数。

type有两种:CVHIST_ARRAY意味着直方图数据表示为多维密集数组CvMatND;

CV_HIST_TREE意味着直方图数据表示为多维稀疏数组CvSparseMato

ranges就是那个复杂的不好理解的thresh的范围,他的内容取决于uniform的值。uniform为。是均

匀的,非。时不均匀。

计算图像直方图的函数为CalcHist():

I7voidcvCalcHist(

18Ipllmage**image,〃输入图像(也可用CvMat**)

19CvHistogram*hist,〃宜方图指针

20intaccumulated,〃累il标识。如果设置,则立方图在开始时不被清零.

21constCvArr*mask=NULL//操作mask,确定输入图像的哪个象素被计数

22);

要注意的是这个函数用来计算一张[或多张)单通道图像的出方图,如果要计算多通道,则用这个函

数分别计算图像每个单通道。

实践:一维直方图

下面实践一下用OpenCV生成图像的一维直方图

23intmain()

24{

25Ipllmage*src=cvLoadImage("baboon.jpg");

26Ipllmage*gray_plane=cvCreateImage(cvGetSize(src),8,1);

cvCvtColor(src,gray_plane,CV_BGR2GRAY);

28inthist_size=256;〃直方图尺寸

29inthist_height=256;

30floatrange"={0,255};〃灰度级的范围

31float*ranges[]={range};

32〃创建一维直方图,统计图像在[0255]像素的均匀分布

CvHistogram*gray_hist=cvCreateHist(l,&hist_size,CV_HIST_ARRAY,ranges,1);

34〃计算灰度图像的一维直方图

35cvCalcHist(8gray_plane,gray_histJ0,0);

36〃归一化直方图

37cvNormalizeHist(gray_hist,1.0);

38intscale=2;

39〃创建一张一维直方图的“图”,横坐标为灰度级,纵坐标为像素个数<*scale)

40Ipllnidge*liibl_inidge=<.vCredleIriidge(<.vSize(liibl_bize*b<.dle,liibl_lieighL),8,3);

41cvZero(hist_image);

42〃统计直方图中的最大直方块

43floatmax_value=0;

44cvGetMinMaxHistValue(gray_hist,0,&max_value,0,0);

45〃分别将每个直方块的值绘制到图中

46for(inti=0;i<hist_size;i++)

47{

48floatbin_val=cvOueryHistValue_lD(gray_hist,i);〃像素i的概率

49intintensity=cvRound(bin_val*hist_height/max_value);〃要绘制的高度

50cvRectangle(hist_inage,

51cvPoint(i*scale,hist_height-l),

52cvPoint((i+1)*scale-1,hist_height-intensity),

53CV_RGB(255,255J255));

54}

55cvNamedWindow("GraySource",1);

56cvShowImage("GraySource",gray_plane);

57cvNamedWindow("H-SHistogram",1);

58cvShowImage("H-SHistogram",hist_image);

59cvWaitKey(0);

60}

试脸结果:

对应的,我们可以用•样的思路统计每个通道的直方图,并绘制图像每个通道像素的分布:

实践:二维直方图

我TJ也可以结合OpenCV的例/•生成二维直方图:

61Ipllmage*r_plane=cvCreateImage(cvGetSize(src),8,1);

62Ipllmage*g_plane=cvCreateImage(cvGetSize(src),8,1);

63Ipllmage*bplane=cvCreateImage(cvGetSize(src),8,1);

64Ipllmage*planes[]={r_plane,g_plane};

65〃将HSV图像分离到不同的通道中

66cvCvtPixToPlane(src,b_plane,g_plane,r_plane,0);

67//生成二维直方图数据结构

68intr_bins=256,b_bins=256;

69CvHistogram*hist;

70{

71inthist_size[]={r_bins,b_bins};

72floatr_ranges[]={0,255};//hueis[0,180]

73fludlb_r<ingej»[]=(0,255

74float*ranges[]={r_ranges,b_ranges};

hist=cvCreateHist(2,hist_size,CV_HIST_ARRAY,ranges,1);

%)

77〃计算一张或多张单通道图像image(s)的直方图

78cvCalcHist(planes,hist,0,0);

刚才的图我们是对应每个横坐标绘制纵坐标的直方块,二维的图需要绘制每个点:

79for(inth=0;h<r_bins;h++){

80for(ints=0;s<b_bins;s++){

81floatbin_val=cvQueryHistValue_2D(hist,h,s);//ff询直方块的值

82intintensity=cvRound(bin_val*255/max_value);

83cvRectangle(hist_img,

84cvPoint(h*scale,s*scale),

85cvPoint((h+l)*scale-1,(s+l)*scale-1),

86CV_RGB(intensity,intensity,intensity),

87CV_FILLED);

88}

89}

最终生成二维直方图:

直方图的应用以后再讨论。

[OpenCV]直方图应用:直方图均衡化,直方图匹配,对比直方图

前面介绍了数字图像灰度直方图,现在来尝试直方图的应用。

直方图均衡化

直方图均衡化(HistogramEqualization)是直方图最典型的应用,是图像点运算的一种。对于一幅

输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决

定,即:

直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相

同的象素点数过程。从分布图上的理解就是希望原始图像中y轴的值在新的分布中尽可能的展开。变

换寸程是利用累积分布函数对原始分布进行映射,生成新的均匀拉伸的分布。因此对应每个点的操作

是寻找原始分布中y值在均匀分布中的位置,如下图是理想的单纯高斯分布映射的示意图:

(图片来源:<LearnningOpenCV>p189)

OpenCV中的cvEqualizeHist

OpenCV中有灰度直方图均衡化的函数cvEqualizeHist,接口很明朗:

QOvoidrvFquali7PHifvArr*t”,CvArr*);

注意此函数只能处理单通道的灰色图像,对于彩色图像,我们可以把每个信道分别均衡化,再Merge

为彩色图像。

实践:图像直方图均衡化

91intmain()

92{

93Ipllmage*image=cvLoadImage("baboon.jpg");

94〃显示原图及直方图

95myShowHist("Source",image);

96Ipllmage*eqlimage=cvCreateImage(cvGetSize(image),image->depth>3);

97〃分别均衡化每个信道

98Ipllmage*redImage=cvCreateImage(cvGetSize(image),image->depthJl);

99Ipllmage*greenImage=cvCreateImage(cvGetSize(image),image->depth,l);

100Ipllmage*blueImage=cvCreateImage(cvGetSize(image),inage->depthJl);

101cvSplit(image,bluelmage,greenlmage,redlmage,NULL);

102cvEqualizeHist(redlmage,redlmage);

103cvEqualizeHist(greenimage,greenimage);

104cvEqualizeHist(blueimage,bluelmage);

105〃均衡化后的图像

106cvMerge(blueImage,greenimage,redlmage,NULL,eqlimage);

107myShowHist("Equalized",eqlimage);

108)

原蛤图像及灰度直方图如下:

均衡化后的直方图:

直方图匹配

直方图匹配乂叫直方图规定化(His:ogramNormalization/Matching)是指对•副图像进行变换,使

其直方图与另一幅图像的直方图或特定函数形式的直方图进行匹配。应用场景如不同光照条件下的两

幅图像,我们可以在比较两幅图像前先进行匹配变化。

参考shlkl99上传的直方图匹配代码,将图像规定化为高斯分布函数。

109〃将图像与特定函数分布histv□兀配

110voidmyHistMatch(IplImage*img,doublehistv[])

Hl{

112intbins=256;

113intsizes[]={bins};

114CvHistogram*hist=cvCreateHist(1,sizes,CV_HIST_ARRAY);

115cvCalcHist(&img,hist);

116cvNormalizeHist(hist,l);

117doubleval_l=0.0;

118doubleval_2=0.0;

119ucharI[2bb]=

120doubleS[256]={0};

121doubleG[256]={0};

122for(intindex=。;index<256;++index)

123{

124val_l+=cvQueryHistValue_lD(hist,index);

125val_2+=histv[index];

126G[index]=val_2;

127S[index]=val_l;

128}

129doublemin_val=0.0;

130intPG=0;

131for(inti=0;i<256;++i)

132{

133min_val=1.0;

134for(intj=0;j<256;++j)

135

136if((G[j]-S[i])<min_val&&(G[j]-S[i])>=0)

137

138min.val=(G[j]-S[i]);

139PG=j;

140}

141}

142T[i]=(uchar)PG;

143)

144uchar叩=NULL;

145fur(inix=0;x<irng->heiglil

146(

147p=(uchar*)(img->imageData+img->widthStep*x);

148for(inty=0;y<img->width;++y)

149{

150P[y]=T[p[y]];

151)

152)

153)

154//生成高斯分布

155voidGenerateGaussModel(doublemodel[])

156{

157doubleml,m2,signal,sigma2,Al,A2,K;

158ml=0.15;

159m2=0.75;

160sigmal=0.05;

161sigma2■0.05;

162Al=1;

163A2=0.07;

164K=0.002;

165doublecl=Al*(1.0/(sqrt(2*CV_PI))*sigmal);

166doublekl=2*sigmal*sigmal;

167doublec2=A2*(1.0/(sqrt(2*CV_PI))*sigma2);

168doublek2=2*sigma2*sigma2;

169doublep=0.0,val=0.0,z-0.0;

170for(intzt=0;zt<256;++zt)

171{

172val=K+cl*exp(-(z-ml)*(z-ml)/kl)+c2*exp(-(z-m2)*(z-m2)/k2);

173model[zt]=val;

174

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论