阅读更多
1.概述
《Vision-based User Interface Programming in Java》这本书介绍了如何用java做摄像头程序和游戏,可以作为一个计算机视觉的启蒙读物。
作者是泰国的Dr. Andrew Davison,这本书的在线浏览网址是
http://fivedots.coe.psu.ac.th/~ad/vbi/index.html
不过计算机视觉对数学要求很高,里面还有许多理论,要想完全吃透还是需要参考一些别的书籍和论文。
这本书依赖于OpenCV和JavaCV早期版本,所以要想运行书中的程序,请注意软件的版本如下。
OpenCV 2.4.5
JavaCV 0.5
2. 各章简单介绍
Chapter 1. What is a VBI?
VBI介绍,没有网络版本
Chapter 2. Webcam Snaps Using JavaCV
使用JavaCV实现摄像头拍照
一上来简单介绍了OpenCV,JavaCV
然后一个简单的HelloWorld程序用JavaCV显示一张图片
最后实现摄像头拍照
并且介绍了3个测试摄像头的工具
CommandCam
DevCon
FFmpeg
Chapter 3. Webcam Snaps Using VLC
使用 vlcj实现摄像头拍照
首先一个简单的程序介绍如何用vlcj播放各种格式的视频
然后实现摄像头拍照
Chapter VBI-3.5. Webcam Snaps Using JMF
使用JMF实现摄像头拍照
JMF比较老了,所以参考参考就行。
Chapter 4. Motion Detection
解释了如何用摄像头来检测场景的变化或移动。因为这是视频系统的基本需求,所以作者介绍了3种不同的方法来实现这个功能。
第一种方法,基于连贯的视频帧的图像差异比较
第二种方法,使用背景前景分割
第三种方法,光流法
Chapter VBI-4.5. A Motion-tracking Missile Launcher
一个程序实现了导弹发射器瞄准人的头部,并发射导弹。当然这个导弹只是一个玩具。
Chapter 5. Blobs Drumming
击鼓游戏。需要使用颜色鲜艳的方形道具(塑料片)来触碰鼓达到击鼓的效果。屏幕被分为9个鼓,当道具的中心点落入9个鼓中的一个时,PC的音箱会发出相应的鼓声。本人用一本全天蓝色封面的大词典试验成功。
首先介绍轮廓寻找技术,如何检测出道具的轮廓。需要用到HSVSelector程序先将道具的颜色识别出来。
Chapter 6. Hand and Finger Detection
手掌与5根手指检测
需要一副纯色的手套作为道具。
同样首先需要用到HSVSelector程序先将道具的颜色识别出来。
这个程序在我的电脑上没有试验成功,手指的识别率比较低。
Chapter 7. Finger Tracking with TopCodes
手指追踪。把TopCodes贴在手指上,达到鼠标的移动和点击效果。
TopCodes可以识别出多达99种图案。
Chapter 8. Fingerprint Recognition
指纹识别
用到 biometricsdk来建立指纹模板,作指纹比对。
Chapter 9. Face Detection and Tracking
人脸检测与跟踪
这个功能是OpenCV自带的,用到哈尔算法来检测人脸,用到人脸数据库文件haarcascade_frontalface_alt.xml
Chapter 10. Face Recognition
人脸识别,这一章比上一章更进了一步,用特征脸(eigenfaces)技术识别人脸,包含三个部分:
第一部分,Colt PCA
PCA(Principal Components Analysis)主成分分析,是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
colt是一组高性能的科学和数学计算的 Java 库。不过有点老了。
作者用colt实现了一个简单的PCA算法。
第二部分,JavaFaces2
重构了 javafaces代码,为特征脸生成一个cache文件
第三部分,最后的成果,可以人脸识别了
Chapter 11. Eye Tracking
眼睛跟踪
也是用哈尔算法来检测眼睛,用到眼睛数据库文件
Chapter 12. Facial Features Recognition
第一部分,用哈尔算法来检测脸、眼睛、鼻子、嘴
第二部分,用 FaceSDK检测脸部的66个坐标
FaceSDK很强大,遗憾的是需要注册才能试用,且有试用期限制。
Chapter 13. OCR and Sudoku
光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。
这章讲了一个例子,识别数独图片,转换成文字,并且将这个数独解答出来。
tesseract是一个老牌的文字识别组件,可能是最好的文字识别工具。
tess4j是对tesseract的java封装
gocr是简单的文字识别,可以命令行调用
Chapter 14. QR Codes
这章讲了如何把网址转换成二维码,以及反向操作。
QR码(全称为快速响应矩阵码;英语:Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。
zxing 不仅支持二维码,还支持多种条形码
Chapter 15. Augmented Reality with NyARToolkit
增强现实(Augmented Reality, AR), 是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,目标是在屏幕上把虚拟世界套在现实世界并进行互动。
这种技术估计由1990年提出。随着随身电子产品运算能力的提升,预期增强现实的用途将会越来越广。
首先可以在线观赏2个例子(番羽土啬)
Layar
Wikitude
然后介绍了 ARToolKit以及 NyARToolkit
最后用这些类库实现了一个demo,可以识别一张海报,并在海报上加上虚拟3D图像。
Chapter 16. Depth Processing
这章首先讲了3D电影的简单原理,就是需要2个摄像头来拍摄,左右各一个。这样可以辨识出物体距离屏幕的距离。
然后分别用红色和蓝色过滤,配合3D红蓝眼镜观看,就成了3D电影了。
PLY是一种电脑档案格式,全名为多边形档案(Polygon File Format)或 史丹佛三角形档案(Stanford Triangle Format)。
史丹佛大学的 The Digital Michelangelo Project计划采用PLY格式储存极高分辨率之米开朗基罗的作品"大卫"雕塑。
该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质座标与资料可信度,并能对多边形的正反两面设定不同的属性。
MeshLab是立体网状处理软件。此软件可管理面和处理大量的非结构化网格,并提供编辑、清理、修复及查核等功能,可对模型进行渲染及转档。
Chapter 17. Networked Cameras
介绍了网络摄像头原理。简单来说就是客户端将图像切成若干方块,每次将和上次不一样的图片发到服务端即可。服务端可以理解成监控中心了,收集各个客户端发来的信息然后还原图像。