2008年7月1日星期二

利用光流法计算人体运动的速度与方向

1.方向的计算
首先计算图像各个象素的光流(opencv LK),然后建立4*4窗口对X,Y方向分别做统计求和,
然后求得 atan(yy/xx)作为光流方向,即为运动的方向.
2.速度的计算
利用帧差分得到运动图像,然后建立4*4窗口对图像进行统计求和,求和值作为权重,表示速度的比例.
即运动区域白色(255)面积越大,速度越大.

3.结果
大部分运动方向计算正确,少部分有错误,还需要改进算法.(利用统计?)

4.代码:

WW_RETURN HumanMotion::ImgOpticalFlow(IplImage *pre_grey,IplImage *grey)
/*************************************************
Function:
Description: 光流法计算运动速度与方向
Date: 2006-6-14
Author:
Input:
Output:
Return:
Others:
*************************************************/
{

IplImage *velx = cvCreateImage( cvSize(grey->width ,grey->height),IPL_DEPTH_32F, 1 );
IplImage *vely = cvCreateImage( cvSize(grey->width ,grey->height),IPL_DEPTH_32F, 1 );

velx->origin = vely->origin = grey->origin;
CvSize winSize = cvSize(5,5);
cvCalcOpticalFlowLK( prev_grey, grey, winSize, velx, vely );

cvAbsDiff( grey,prev_grey, abs_img );
cvThreshold( abs_img, abs_img, 29, 255, CV_THRESH_BINARY);

CvScalar xc,yc;
for(int y =0 ;yheight; y++)
for(int x =0;xwidth;x++ )
{
xc = cvGetAt(velx,y,x);
yc = cvGetAt(vely,y,x);


float x_shift= (float)xc.val[0];
float y_shift= (float)yc.val[0];
const int winsize=5; //计算光流的窗口大小


if((x%(winsize*2)==0) && (y%(winsize*2)==0) )
{

if(x_shift!=0 || y_shift!=0)
{

if(x>winsize && y>winsize && x <(velx->width-winsize) && y<(velx->height-winsize) )
{

cvSetImageROI( velx, cvRect( x-winsize, y-winsize, 2*winsize, 2*winsize));
CvScalar total_x = cvSum(velx);
float xx = (float)total_x.val[0];
cvResetImageROI(velx);

cvSetImageROI( vely, cvRect( x-winsize, y-winsize, 2*winsize, 2*winsize));
CvScalar total_y = cvSum(vely);
float yy = (float)total_y.val[0];
cvResetImageROI(vely);

cvSetImageROI( abs_img, cvRect( x-winsize, y-winsize, 2*winsize, 2*winsize));
CvScalar total_speed = cvSum(abs_img);
float ss = (float)total_speed.val[0]/(4*winsize*winsize)/255;
cvResetImageROI(abs_img);

const double ZERO = 0.000001;
const double pi = 3.1415926;
double alpha_angle;

if(xx-ZERO)
alpha_angle = pi/2;
else
alpha_angle = abs(atan(yy/xx));

if(xx<0>0) alpha_angle = pi - alpha_angle ;
if(xx<0 alpha_angle =" pi">0 && yy<0) alpha_angle =" 2*pi">



CvScalar line_color;
float scale_factor = ss*100;
line_color = CV_RGB(255,0,0);
CvPoint pt1,pt2;
pt1.x = x;
pt1.y = y;
pt2.x = static_cast(x + scale_factor*cos(alpha_angle));
pt2.y = static_cast(y + scale_factor*sin(alpha_angle));

cvLine( image, pt1, pt2 , line_color, 1, CV_AA, 0 );
CvPoint p;
p.x = (int) (pt2.x + 6 * cos(alpha_angle - pi / 4*3));
p.y = (int) (pt2.y + 6 * sin(alpha_angle - pi / 4*3));
cvLine( image, p, pt2, line_color, 1, CV_AA, 0 );
p.x = (int) (pt2.x + 6 * cos(alpha_angle + pi / 4*3));
p.y = (int) (pt2.y + 6 * sin(alpha_angle + pi / 4*3));
cvLine( image, p, pt2, line_color, 1, CV_AA, 0 );

/*
line_color = CV_RGB(255,255,0);
pt1.x = x-winsize;
pt1.y = y-winsize;
pt2.x = x+winsize;
pt2.y = y+winsize;
cvRectangle(image, pt1,pt2,line_color,1,CV_AA,0);
*/

}
}
}
}


cvShowImage( "Contour", abs_img);
cvShowImage( "Contour2", vely);

cvReleaseImage(&velx);
cvReleaseImage(&vely);
cvWaitKey(20);

return WW_OK;

}

模糊数学(Fuzzy mathematics)及其应用

模糊数学(Fuzzy mathematics)及其应用
一 :引言
有一个古老的希腊悖论,是这样说的:“一粒种子肯定不叫一堆,两粒也不是,三粒也不是……另一方面,所有的人都同意,一亿粒种子肯定叫一堆。那么,适当的界限在哪里?我们能不能说,123585粒种子不叫一堆而123586粒就构成一堆?”
确 实,“一粒”和“一堆”是有区别的两个概念。但是,它们的区别是逐渐的,而不是突变的,两者之间并不存在明确的界限。换句话说,“一堆”这个概念带有某种 程度的模糊性。类似的概念,如“年老”、“高个子”、“年轻人”、“很大”、“聪明”、“漂亮的人”、“价廉物美”等等,不胜枚举。
经 典集合论中,在确定一个元素是否属于某集合时,只能有两种回答:“是”或者“不是”。我们可以用两个值0或1加以描述,属于集合的元素用1表示,不属于集 合的元素用0表示。然而上面提到的“年老”、“高个子”、“年轻人”、“很大”、“聪明”、“漂亮的人”、“价廉物美” 等情况要复杂得多。假如规定身高1.8米算属于高个子范围,那么,1.79米的算不算?照经典集合论的观点看:不算。但这似乎很有些悖于情理。如果用一个 圆,以圆内和圆周上的点表示集A,而且圆外的点表示不属于A。A的边界显然是圆周。这是经典集合的图示。现在,设想将高个子的集合用图表示,则它的边界将 是模糊的,即可变的。因为一个元素(例如身高1.75米的人)虽然不是100%的高个子,却还算比较高,在某种程度上属于高个子集合。这时一个元素是否属 于集合,不能光用0和1两个数字表示,而可以取0和1之间的任何实数。例如对1.75米的身高,可以说具有70%属于高个子集合的程度。这样做似乎罗嗦, 但却比较合乎实际。
精 确和模糊,是一对矛盾。根据不同情况有时要求精确,有时要求模糊。比如打仗,指挥员下达命令:“拂晓发起总攻。”这就乱套了。这时,一定要求精确:“×月 ×日清晨六时正发起总攻。”我们在一些旧电影中还能看到各个阵地的指挥员在接受命令前对对表的镜头,生怕出个半分十秒的误差。但是,物极必反。如果事事要 求精确,人们就简直无法顺利的交流思想——两人见面,问:“你好吗?”可是,什么叫“好”,又有谁能给“好”下个精确的定义?
有些现象本质上就是模糊的,如果硬要使之精确,自然难以符合实际。例如,考核学生成绩,规定满60分为合格。但是,59分和60分之间究竟有多大差异,仅据1分之差来区别及格和不及格,其根据是不充分的。
不 仅普遍存在着边界模糊的集合,就是人类的思维,也带有模糊的特色。有些现象是精确的,但是,适当的模糊化可能使问题得到简化,灵活性大为提高。例如,在地 里摘玉米,若要找一个最大的,那很麻烦,而且近乎迂腐。我们必须把玉米地里所有的玉米都测量一下,再加以比较才能确定。它的工作量跟玉米地面积成正比。土 地面积越大,工作越困难。然而,只要稍为改变一下问题的提法:不要求找最大的玉米,而是找比较大的,即按通常的说法,到地里摘个大玉米。这时,问题从精确 变成了模糊,但同时也从不必要的复杂变成意外的简单,挑不多的几个就可以满足要求。工作量甚至跟土地无关。因此,过分的精确实际成了迂腐,适当的模糊反而 灵活。
显 然,玉米的大小,取决于它的长度、体积和重量 。大小虽是模糊概念,但长度、体积、重量等在理论上都可以是精确的。然而,人们在实际判断玉米大小时,通常并不需要测定这些精确值。同样,模糊的“堆”的 概念是建立在精确的“粒”的基础上,而人们在判断眼前的东西叫不叫一堆时,从来不用去数“粒”。有时,人们把模糊性看成一种物理现象。近的东西看得清,远 的东西看不清,一般的说,越远越模糊。但是,也有例外的情况:站在海边,海岸线是模糊的;从高空向下眺望,海岸线却显得十分清晰。太高了,又模糊。精确与 模糊,有本质区别,但又有内在联系,两者相互矛盾、相互依存也可相互转化。所以,精确性的另一半是模糊。
对 模糊性的讨论,可以追溯得很早。20世纪的大哲学家罗素(B.Russel)在1923年一篇题为《含糊性》(Vagueness)的论文里专门论述过我 们今天称之为“模糊性”的问题(严格地说,两者稍有区别),并且明确指出:“认为模糊知识必定是靠不住的,这种看法是大错特错的。”尽管罗素声名显赫,但 这篇发表在南半球哲学杂志的文章并未引起当时学术界对模糊性或含糊性的很大兴趣。这并非是问题不重要,也不是因为文章写得不深刻,而是“时候未到”。罗素 精辟的观点是超前的。长期以来,人们一直把模糊看成贬义词,只对精密与严格充满敬意。20世纪初期社会的发展,特别是科学技术的发展,还未对模糊性的研究 有所要求。事实上,模糊性理论是电子计算机时代的产物。正是这种十分精密的机器的发明与广泛应用,使人们更深刻地理解了精密性的局限,促进了人们对其对立 面或者说它的“另一半”——模糊性的研究。
集 合是现代数学的基础,模糊集合一提出,“模糊”观念也渗透到许多数学分支。模糊数学的发展速度也是相当快的。从发表的论文看,几乎是指数般的增长。模糊数 学的研究可分三个方面:一是研究模糊数学的理论,以及它和精确数学、统计数学的关系;二是研究模糊语言和模糊逻辑;三是研究模糊数学的应用。在模糊数学的 研究中,目前已有模糊拓扑学、模糊群论、模糊凸论、模糊概率、模糊环论等分支。虽然模糊数学是一门新兴学科,但它已初步应用于自动控制、模式识别、系统理 论、信系检索、社会科学、心理学、医学和生物学等方面。将来还可能出现模糊逻辑电路、模糊硬件、模糊软件和模糊固件,出现能和人用自然语言对话、更接近于 人的智能的新的一类计算机。所以,模糊数学将越来越显示出它的巨大生命力。
二: 模糊数学的产生
二 十世纪六十年代,产生了模糊数学这门新兴学科。 现代数学是建立在集合论的基础上。集合论的重要意义就一个侧面看,在与它把数学的抽象能力延伸到人类认识 过程的深处。一组对象确定一组属性,人们可以通过说明属性来说明概念(内涵),也可以通过指明对象来说明它。符合概念的那些对象的全体叫做这个概念的外 延,外延其实就是集合。从这个意义上讲,集合可以表现概念,而集合论中的关系和运算又可以表现判断和推理,一切现实的理论系统都一可能纳入集合描述的数学 框架。
但是,数学的发展也是阶段性的。经典集合论只能把自己的表现力限制在那些有明确外延的概念和事物上,它明确地限定:每个集合都必须 由明确的元素构成,元素对集合的隶属关系必须是明确的,决不能模棱两可。对于那些外延不分明的概念和事物,经典集合论是暂时不去反映的,属于待发展的范 畴。
在较长时间里,精确数学及随机数学在描述自然界多种事物的运动规律中,获得显著效果。但是,在客观世界中还普遍存在着大量的模糊现象。以前人们回避它,但是,由于现代科技所面对的系统日益复杂,模糊性总是伴随着复杂性出现。
各门学科,尤其是人文、社会学科及其它“软科学”的数学化、定量化趋向把模糊性的数学处理问题推向中心地位。更重要的是,随着电子计算机、控制论、系统科学的迅速发展,要使计算机能像人脑那样对复杂事物具有识别能力,就必须研究和处理模糊性。
我们研究人类系统的行为,或者处理可与人类系统行为相比拟的复杂系统,如航天系统、人脑系统、社会系统等,参数和变量甚多,各种因素相互交错,系统很复杂,它的模糊性也很明显。从认识方面说,模糊性是指概念外延的不确定性,从而造成判断的不确定性。
在 日常生活中,经常遇到许多模糊事物,没有分明的数量界限,要使用一些模糊的词句来形容、描述。比如,比较年轻、高个、大胖子、好、漂亮、善、热、远……。 在人们的工作经验中,往往也有许多模糊的东西。例如,要确定一炉钢水是否已经炼好,除了要知道钢水的温度、成分比例和冶炼时间等精确信息外,还需要参考钢 水颜色、沸腾情况等模糊信息。因此,除了很早就有涉及误差的计算数学之外,还需要模糊数学。
人与计算机相比,一般来说,人脑具有处理模糊 信息的能力,善于判断和处理模糊现象。但计算机对模糊现象识别能力较差,为了提高计算机识别模糊现象的能力,就需要把人们常用的模糊语言设计成机器能接受 的指令和程序,以便机器能像人脑那样简洁灵活的做出相应的判断,从而提高自动识别和控制模糊现象的效率。这样,就需要寻找一种描述和加工模糊信息的数学工 具,这就推动数学家深入研究模糊数学。所以,模糊数学的产生是有其科学技术与数学发展的必然性。
模糊数学的研究内容
1965年,美国控制论专家、数学家查德发表了论文《模糊集合》,标志着模糊数学这门学科的诞生。
模糊数学的研究内容主要有以下三个方面:
第 一,研究模糊数学的理论,以及它和精确数学、随机数学的关系。察德以精确数学集合论为基础,并考虑到对数学的集合概念进行修改和推广。他提出用“模糊集合 ”作为表现模糊事物的数学模型。并在“模糊集合”上逐步建立运算、变换规律,开展有关的理论研究,就有可能构造出研究现实世界中的大量模糊的数学基础,能 够对看来相当复杂的模糊系统进行定量的描述和处理的数学方法。
在模糊集合中,给定范围内元素对它的隶属关系不一定只有“是”或“否”两种 情况,而是用介于0和1之间的实数来表示隶属程度,还存在中间过渡状态。比如“老人”是个模糊概念,70岁的肯定属于老人,它的从属程度是 1,40岁的人肯定不算老人,它的从属程度为 0,按照查德给出的公式,55岁属于“老”的程度为0.5,即“半老”,60岁属于“老”的程度0.8。查德认为,指明各个元素的隶属集合,就等于指定了 一个集合。当隶属于0和1之间值时,就是模糊集合。
第二,研究模糊语言学和模糊逻辑。人类自然语言具有模糊性,人们经常接受模糊语言与模糊信息,并能做出正确的识别和判断。
为了实现用自然语言跟计算机进行直接对话,就必须把人类的语言和思维过程提炼成数学模型,才能给计算机输入指令,建立和是的模糊数学模型,这是运用数学方法的关键。查德采用模糊集合理论来建立模糊语言的数学模型,使人类语言数量化、形式化。
如 果我们把合乎语法的标准句子的从属函数值定为1,那么,其他文法稍有错误,但尚能表达相仿的思想的句子,就可以用以0到1之间的连续数来表征它从属于“正 确句子”的隶属程度。这样,就把模糊语言进行定量描述,并定出一套运算、变换规则。目前,模糊语言还很不成熟,语言学家正在深入研究。
人们的思维活动常常要求概念的确定性和精确性,采用形式逻辑的排中律,既非真既假,然后进行判断和推理,得出结论。现有的计算机都是建立在二值逻辑基础上的,它在处理客观事物的确定性方面,发挥了巨大的作用,但是却不具备处理事物和概念的不确定性或模糊性的能力。
为了使计算机能够模拟人脑高级智能的特点,就必须把计算机转到多值逻辑基础上,研究模糊逻辑。目前,模糊罗基还很不成熟,尚需继续研究。
第 三,研究模糊数学的应用。模糊数学是以不确定性的事物为其研究对象的。模糊集合的出现是数学适应描述复杂事物的需要,查德的功绩在于用模糊集合的理论找到 解决模糊性对象加以确切化,从而使研究确定性对象的数学与不确定性对象的数学沟通起来,过去精确数学、随机数学描述感到不足之处,就能得到弥补。在模糊数 学中,目前已有模糊拓扑学、模糊群论、模糊图论、模糊概率、模糊语言学、模糊逻辑学等分支。
模糊数学的应用
模糊数学是一门新兴学 科,它已初步应用于模糊控制、模糊识别、模糊聚类分析、模糊决策、模糊评判、系统理论、信息检索、医学、生物学等各个方面。在气象、结构力学、控制、心理 学等方面已有具体的研究成果。然而模糊数学最重要的应用领域是计算机职能,不少人认为它与新一代计算机的研制有密切的联系。
目前,世界上 发达国家正积极研究、试制具有智能化的模糊计算机,1986年日本山川烈博士首次试制成功模糊推理机,它的推理速度是1000万次/秒。1988年,我国 汪培庄教授指导的几位博士也研制成功一台模糊推理机——分立元件样机,它的推理速度为1500万次/秒。这表明我国在突破模糊信息处理难关方面迈出了重要 的一步。
模糊数学还远没有成熟,对它也还存在着不同的意见和看法,有待实践去检验。
四:模糊数学的主要应用
1 模糊数学自身的理论研究进展迅速。我国模糊数学自身的理论研究仍占模糊数学及其应用学科的主导地位,所取得的研究成果在《模糊数学》、《模糊系统与数学》 等数十种学术期刊和全国高校学报中经常可见,模糊聚类分析理论、模糊神经网络理论和各种新的模糊定理及算法不断取得进展。
2.模糊数学目前在自动控制技术领域仍然得到最广泛的应用,所涉及的技术复杂繁多,从微观到宏观、从地下到太空无所不有,在机器人实时控制、电磁元件自适应控制、各种物理及力学参数反馈控制、逻辑控制等高新技术中均成功地应用了模糊数学理论和方法。
3.模糊数学在计算机仿真技术、多媒体辨识等领域的应用取得突破性进展,如图像和文字的自动辨识、自动学习机、人工智能、音频信号辨识与处理等领域均借助了模糊数学的基本原理和方法。
4. 模糊聚类分析理论和模糊综合评判原理等更多地被应用于经济管理、环境科学、安全与劳动保护等领域,如房地价格、期货交易、股市情报、资产评估、工程质量分 析、产品质量管理、可行性研究、人机工程设计、环境质量评价、资源综合评价、各种危险性预测与评价、灾害探测等均成功地应用了模糊数学的原理和方法。
5.地 矿、冶金、建筑等传统行业在处理复杂不确定性问题中也成功地应用了模糊数学的原理和方法,从而使过去凭经验和类比法等处理工程问题的传统做法转向数学化、 科学化,如矿床预测、矿体边界确定、油水气层的识别、采矿方法设计参数选择、冶炼工艺自动控制与优化、建筑物结构设计等都有应用模糊数学的成功实践。
6. 我国医药、生物、农业、文化教育、体育等过去看似与数学无缘的学科也开始应用模糊数学的原理和方法,如计算机模糊综合诊断、传染病控制与评估、人体心理及 生理特点分析、家禽孵养、农作物品种选择与种植、教学质量评估、语言词义查找、翻译辨识等均有一些应用模糊数学的实践,并取得很好效果。
模糊数学目前在自动控制技术领域仍然得到最广泛的应用,所涉及的技术复杂繁多,从微观到宏观、从地下到太空无所不有,在机器人实时控制、电磁元件自适应控制、各种物理及力学参数反馈控制、逻辑控制等高新技术中均成功地应用了模糊数学理论和方法。
模糊数学在计算机仿真技术、多媒体辨识等领域的应用取得突破性进展,如图像和文字的自动辨识、自动学习机、人工智能、音频信号辨识与处理等领域均借助了模糊数学的基本原理和方法。
模 糊聚类分析理论和模糊综合评判原理等更多地被应用于经济管理、环境科学、安全与劳动保护等领域,如房地价格、期货交易、股市情报、资产评估、工程质量分 析、产品质量管理、可行性研究、人机工程设计、环境质量评价、资源综合评价、各种危险性预测与评价、灾害探测等均成功地应用了模糊数学的原理和方法。
地 矿、冶金、建筑等传统行业在处理复杂不确定性问题中也成功地应用了模糊数学的原理和方法,从而使过去凭经验和类比法等处理工程问题的传统做法转向数学化、 科学化,如矿床预测、矿体边界确定、油水气层的识别、采矿方法设计参数选择、冶炼工艺自动控制与优化、建筑物结构设计等都有应用模糊数学的成功实践。
我 国医药、生物、农业、文化教育、体育等过去看似与数学无缘的学科也开始应用模糊数学的原理和方法,如计算机模糊综合诊断、传染病控制与评估、人体心理及生 理特点分析、家禽孵养、农作物品种选择与种植、教学质量评估、语言词义查找、翻译辨识等均有一些应用模糊数学的实践,并取得很好效果。
五:
但是一些概率论 学者认为模糊数学不过是概率论的一个应用而已。一些搞理论数学的人说这不是数学。搞应用的人则说道理说的很好,但真正的实际效果没有。然而,国际著名的应 用数学家考夫曼(A.Kauffman)教授在访华时说:“他们的攻击是毫无道理的,不必管人家说什么,我们努力去做就是。”
模糊数学是一门崭新的数学学科,它的产生不仅拓广了经典数学的基础,而且是使计算机科 学向人们的自然机理方面发展的重大突破。它在科学技术、经济发展和社会学等问题的广泛应用领域中显示了巨大的力量。它虽然只有二十多年的历史,但已被国内 外数学界以及信息、系统、计算机和自动控制科学、人员的普遍关注,它是正在迅速发展中的有着广阔应用前景的一门崭新学科。