OpenCV学习笔记(五十一)——imge stitching图像拼接stitching

stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitcher类当中。这个类当中我们可能用到的成员函数有createDefault、estimateTransform、composePanorama、stitch。其内部实现的过程是非常繁琐的,需要很多算法的支持,包括图像特征的寻找和匹配,摄像机的校准,图像的变形,曝光补偿和图像融合。但这些模块的接口、调用,强大的OpenCV都为我们搞定了,我们使用OpenCV做图像拼接,只需要调用createDefault函数生成默认的参数,再使用stitch函数进行拼接就ok了。就这么简单!estimateTransform和composePanorama函数都是比较高级的应用,如果各位对stitching的流程不是很清楚的话,还是慎用。

实例也非常简单,下载链接哦:http://download.csdn.net/detail/yang_xian521/4321158。

输入原图(为了显示,我都压缩过):

OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。

距离2.4.0放出来才一个月。儿童节当天2.4.1就出炉了。。。。真心跟不上节奏啊,路漫漫其修远兮。。。。

这次主要的改变还是bug的修订,之前有朋友告诉我,说他的2.3.1版本说什么都不能成功配置CUDA,后来他用2.2版本就成功了,看来新出的版本bug还是很多的,也不能盲目求新。这次的2.4.1版本更新如下:

GPU模块支持了CUDA4.1、CUDA4.2版本,添加了一个文件字符串存储回读的API接口

完善了光流法的clacOpticalFlowPyrLK,支持了金字塔图像作为输入

完善了文档,使文档和版本更加对应

修正了SURF、MSER的python包装

修正了其他45处bug

最近更新比较慢,感觉没有学习OpenCV过程有新的太大收获,还请见谅

OpenCV学习笔记(五十三)——新版本2.4.2简介&FREAK和ORB特征描述子效果对比features2d

OpenCV 2.4.2简介

OpenCV从未放慢自己前进的步法,就在7月4日,最新版的2.4.2又放出来了。与之同时放出的还有两个网站http://opencv.org/和http://answers.opencv.org,前者作为一个正式的全新的官方用户网站,简单浏览了一下,应该是一个对应之前维基百科上的那个网站,是一个介绍性的新闻网站,对开发者的意义可能不是太大;后面这个网站就厉害了,是一个类似google讨论组一样的交流区,大家可以在上面提问,留言,解答,我也刚刚注册了个用户,刚成立没几天已经有60多个问题了,应该还是很活跃的一个讨论区。

还是老样子,介绍一下新版本的更新以及改动:

现在支持IOS操作系统了!开发iphone的朋友们,你们也可以用OpenCV了,是不是内牛满面。

添加了一个新的特征点描述算法FREAK,这也是今年的CVPR的一个新算法,也是一个2值的特征,文章里说是根据人视网膜的原理,挺玄乎的,据说是效果比ORB和SURF都好,我要试试看。

对GPU的模块进一步优化,对个别算法的性能有较大提升。

还修正了2.4.1的50多个bug。

介绍就这么多,感觉亮点就是网站的建设和这个FREAK特征,其他的还得慢慢摸索啊

FREAK和ORB特征描述子效果对比

ORB就是BRIEF的改进,BRIEF太简单了,就不介绍了,有兴趣的朋友自己看paper吧。ORB的paper我读下来,感觉改进主要有以下几点:用FAST作为特征点提取的算法,更快了,添加了特征点的主方向,这样就具有了旋转不变性。最后一点其实我也想到了,当时看BRIEF的时候就想应该可以优化,就是ORB采用贪婪穷举的方法得到了相关性较低的随机点对,还有一个改进就是对于随机点对,受噪声的影响很大BRIEF的办法就是对原图像滤波,降低噪声的影响,ORB不在使用像素点的直接比较,而是选择该像素为中心的一个小patch作为比较对象,提高了抗噪能力。

FREAK我只是大致看了下,理解可能不到位,我的理解是这个算法是基于人眼视网膜细胞的分布,中间密集,四周稀疏,从而在图像中构建很多的区域,当然越靠近中心的区域采样更密集,四周区域采样稀疏,随机对比各区域的像素得到一组2值特征,这个算法也关注了尺度和方向的问题,都有对应的解决办法,还根据了人眼看事物时眼睛不停的转动,设计了一种级联的搜索器,总而言之,我感觉这个算法也是受ORB和BRISK这种2值特征的启发下的一种改进吧。

下面就利用OpenCV对其进行一下对比,值得说明的是,在2.4.2中,FREAK给出了pattern的训练代码。

对比实验效果如下:(上图为ORB,下图为FREAK)

经过筛选之后的特征点如下图:(上图为ORB,下图为FREAK)

当然,我这里只是个简单的测试,其实并不能完全反应实际的性能,因为我这里FREAK的特征点位置的检测用的是SURF,而ORB用的是FAST。但从我这里的比较效果来看,ORB要好很多。下面让我来对比一下算法的运行时间:

  ORB FREAK detection FREAK extraction
debug 0.317s 0.301s 0.167s
release 0.094s 0.162s 0.085s

虽然两种算法不能直接比较,因为FREAK没有提供特征点位置检测的算法,个人感觉如果FREAK采用FAST来做detection,确实速度应该要逼ORB要快一些。

最后分享给大家我的工程链接:http://download.csdn.net/detail/yang_xian521/4421537

OpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib

在最新版的2.4.2中,文档的更新也是一大亮点,refrence manual扩充了200多页的内容,添加了contrib部分的文档。contrib就是指OpenCV中新添加的模块,但又不是很稳定,可以认为是一个雏形的部分。这次结合refman的阅读,介绍一下FaceRecognizer这个人脸识别类,这个类也是2.4.2更新日志里着重强调过的更新,配套的文档也是相当充实。这个类的基类也是Algorithm类,对于Algorithm类的简单介绍,请参看我之前的blogOpenCV学习笔记(五十)——Algorithm类介绍(core),这个类内的接口函数也是异常简单,人脸识别的任务也就是两大部分,训练和预测,分别对应着train函数和predict函数,还有对应的数据加载保存函数save和load。不过它当然还可以调用其基类Algorithm的函数。特别说明的是,人脸识别中预测的参数也是可以调节的,但这里只给出了train和predict函数,为啥没有setparameter的函数呢,那是因为各中人脸识别方法的参数并不相同,要通过Algorithm的get和set函数实时的调整~~v5啊!

先来说说训练的过程,train函数的两个参数也很简单,训练的图像组vector<Mat>和对应的标签组vector<int>,这个label标签只需保证同一个人的标签相同即可,不需要保证图像的按标签顺序输入,方便极了。对于预测,有两种调用,其中的参数有测试图像、返回的标签值和测试样本和标签样本的相似性。返回的标签值为-1,说明测试样本在训练集中无对应或距离较远。这里用个FisherFace作为示例说明一下如何训练和预测:

[cpp] view plain copy
  1. vector<Mat> images;
  2. vector<int> labels;
  3. // images for first person
  4. images.push_back(imread("person0/0.jpg", CV_LOAD_IMAGE_GRAYSCALE));
  5. labels.push_back(0);
  6. images.push_back(imread("person0/1.jpg", CV_LOAD_IMAGE_GRAYSCALE));
  7. labels.push_back(0);
  8. // images for second person
  9. images.push_back(imread("person1/0.jpg", CV_LOAD_IMAGE_GRAYSCALE));
  10. labels.push_back(1);
  11. images.push_back(imread("person1/1.jpg", CV_LOAD_IMAGE_GRAYSCALE));
  12. labels.push_back(1);
  13. Ptr<FaceRecognizer> model = createFisherFaceRecognizer();
  14. model->train(images, labels);
  15. Mat img = imread("person1/2.jpg", CV_LOAD_IMAGE_GRAYSCALE);
  16. int predicted = model->predict(img);

当然我们也不需要每次使用都进行一次训练,可以把训练好的模型通过save函数保存成一个文件,下次使用的时候只需load即可。

目前支持的3种人脸识别的方案:特征脸EigenFace、Fisher脸FisherFace、LBP直方图LBPHFace。分别调用函数createEigenFaceRecognizer、createFisherFaceRecognizer、createLBPHFaceRecognizer建立模型。

对于EigenFace两个输入参数,分别为PCA主成分的维数num_components和预测时的阈值threshold,主成分这里没有一个选取的准则,要根据输入数据的大小而决定,通常认为80维主成分是足够的。除了这两个输入参数外,还有eigenvalues和eigenvectors分别代表特征值和特征向量,mean参数为训练样本的平均值,projections为训练数据的预测值,labels为预测时的阈值。

对于FisherFace,和EigenFace非常相似,也有num_components和threshold两个参数和其他5个参数,FisherFace的降维是LDA得到的。默认值为c-1,如果设置的初始值不在(0,c-1]的范围内,会自动设定为c-1。

特别需要强调的是,EigenFace和FisherFace的训练图像和测试图像都必须是灰度图,而且是经过归一化裁剪过的。

对于LBPHFace,我想不用过多介绍,LBP简单和效果是大家都很喜欢的,参数包括半径radius,邻域大小即采样点个数neighbors,x和y方向的单元格数目grid_x,grid_y,还有两个参数histograms为训练数据得到的直方图,labels为直方图对应的标签。这个方法也要求训练和测试的图像是灰度图

接下来应该结合文档进一步研究一下这个人脸识别类。我之前大量的人脸实验都是在matlab下进行的,有了这个利器,我感觉会有越来越多的学生做老师和老板布置的project会选择用OpenCV,而不是Matlab。希望我们都爱的OpenCV越来越好,越来越强大。欢迎交流

OpenCV学习笔记(五十五)——用OpenCV做人脸识别和性别识别contrib

人脸识别的故事说也说不完,调研的事还是交给大家吧。这里说的是用OpenCV做人脸识别。

因为是真正的人脸识别,不是搞笑娱乐的东西,所以数据库一定要强大的,推荐个网站http://www.face-rec.org/databases/。这里有最全的人脸库的概述,希望大家能找到自己需要的人脸库(PS:我现在特别需要一个3d的人脸库,不知道哪位大侠知道如何free获取,或者愿意共享给我那更是极好的了,先谢过咯)。这里简单介绍两个库,ORL和Yale,ORL是一个轻量级的库,Yale更为复杂,但并不是免费的。

数据的准备:在我们程序里需要读取图像和对应的标签,这里采用CSV文件,是一种简单的数据交互格式,在我们最常用的Excel里就支持这种格式。这种格式每条信息占一行。信息格式为:文件名;标签,例如C:/ORL/image.jpg;0。只要创建了一个CSV文件和对应的图像,你就可以对任何一个数据库进行训练了。当然,这个CSV文件并不一定要自己手动的创建,也可以Python脚本自己生成自己需要的CSV文件,对应的脚本为\modules\contrib\doc\facerec\src\create_csv.py,唉,谁让咱对这个脚本不熟悉,只能偷懒了,直接调\modules\contrib\doc\facerec\etc\at.txt或者\samples\cpp\facerec_at_t.txt。这个txt对应的是ORL的数据库,其中的路径就按照其改一下就好了。

至于人脸识别的具体实现,我已经在blogOpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib提到了如何实现。\modules\contrib\doc\facerec\src很多很好的示例,我这里就不上传代码了。

最后再说一下人脸的标定。因为对Python也不是太熟悉,只给大家一个脚本文件吧,是\modules\contrib\doc\facerec\src\crop_face.py,通过这个脚本可以制作自己需要的人脸图片大小。

性别识别和视频中的识别在对应的demo里都有介绍,我这里就不详细说了,因为性别识别无非就是把训练样本的标签只有两类:男性和女性。需要说明的是,EigenFace是基于PCA的,是一种非监督的模型,不太适合性别识别的任务,这里的demo用的是FisherFace。对于视频的人脸识别,无非就是添加了个VideoCapture和一个人脸检测的CascadeClassifier。

关于训练的模型的保存和调用,就是用save和load函数,好简单的,就不介绍了吧。

最后说一下伪彩色图的这个函数applyColorMap,其中colorMap参数是用来选择伪彩色图的样式。因为人眼对颜色的敏感的程度要比对亮度的敏感程度要高,所以用伪彩色图 的对比效果要更好。这才医学图像处理中用的比较多,以前的B超现在都用彩超了,价格竟然要贵好多,其实就是一个伪彩色处理罢了,医院真黑啊!!

from: http://blog.csdn.net/yang_xian521/article/category/910716

OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五相关推荐

  1. C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。

    已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...

  2. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching

    stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitcher类当中.这个类当中我们可能用到的成员函数有createDefault.estimate ...

  3. 一步一步学习DVWA渗透测试(CSP Bypass绕过内容安全策略)-第十二次课

    小伙伴们,今天我们继续学习. Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行.翻译为中文就是绕过内容安全策略.是为了 ...

  4. 第十二章 牛市股票还会亏钱-外观模式(读书笔记)

    1.由于众多投资者对众多股票的联系太多,反而不利于操作,这在软件中是不是就称为耦合性过高.而有了基金以后,变成众多用户只和基金打交道,关心基金的上涨和下跌就可以了,而实际上的操作却是基金经理人在与上千 ...

  5. 深度学习入门笔记(十一):权重初始化

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  6. 20145240《信息安全系统设计基础》第十二周学习总结

    20145240<信息安全系统设计基础>第十二周学习总结 前三周博客链接 第九周学习总结 第十周学习总结 第十一周学习总结 视频学习内容总结 指针数组与数组指针 数组指针(也称行指针) 定 ...

  7. 《网络安全工程师笔记》 第十二章:域

    注:本笔记来自温晓飞老师的网络安全课程 第十二章:域 第一章:虚拟化架构与系统部署 第二章:IP地址详解 第三章:进制转换 第四章:DOS基本命令与批处理 第五章:用户与组管理 第六章:服务器远程管理 ...

  8. 中国大学生服务外包创新创业大赛近五届(八至十二)赛题汇总

    届次 赛题编号 命题企业 题目类别 专业方向 赛题 备注 十二 A01 今目标 应用类 企业服务 小微企业跨组织人才管理系统 1.企业服务--企业服务外包,如法务.财务.人力资源.知识产权.咨询策划. ...

  9. 十二种值得深交的男生和十一种值得深交的女生

    十二种值得深交的男生和十一种值得深交的女生 2008-06-04 16:11 十二种值得深交的男生 第一种,他懂得尊重你 他对你的爱比要求多,他对自己有主见,对你则不会太有主见.他尊重你作出的各种人生 ...

最新文章

  1. oracle技术之使用rman找回被误删除表空间
  2. 学python爬虫需要什么基础-Python爬虫需要学习那些东西?
  3. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )
  4. 陌陌联席总裁离职 股价大涨背后阿里收购传闻再起
  5. FTServer 1.1 发布,多语言全文搜索服务器
  6. linux查看火狐进程,Firefox 终于用上多进程技术了
  7. Win Phone 8 Emulator启动错误:提示无法创建虚拟机,Xde找不到主机的IPv4地址
  8. php网站模板怎么改动,ECshop网站模板修改详细教程 and 模板对应的文件
  9. python客户端软件开发_用 Python 实现一个简易版 HTTP 客户端
  10. 在网页中插入视频代码大全
  11. 【创建FTP】如何在内网创建属于自己的FTP
  12. python——sys模块
  13. spectral clustering谱聚类论文解读(上)
  14. 乐高太多没处放?解放女朋友双手,1 个顶 100 个的乐高智能分拣机来了!
  15. python将一张图片粘贴到另外一张图片上,按照指定坐标放置
  16. python多窗口显示内容_如何在一个窗口中显示多个页面?
  17. memcached启动脚本
  18. 美食地图-兵俤粉干店
  19. Spark全套知识体系,终于搞到了!
  20. 2014 top100

热门文章

  1. 2020年一季度中小微企业收入平均下降69.5%
  2. 大牛讲堂 | 邬书哲:物体检测算法的革新与传承
  3. 线性回归代码matlab
  4. hadoop入门-在windows上安装,测试hadoop
  5. SpringBoot - 优雅的实现【参数校验】高级进阶
  6. JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】
  7. Sping-Spring表达式语言SpEL
  8. 基础JavaScript_Day03
  9. bizmsg是什么文件可以删除吗_C盘里的文件夹都是什么?可以删除吗?哪些可以删除?...
  10. 爬虫学习笔记(十二)—— scrapy-redis(一):基本使用、介绍