Python计算机视觉编程 笔记
Python计算机视觉编程
目录
- 1 基本的图像操作和处理
- 2 局部图像描述子
- 3 图像到图像的映射
- 4 照相机模型与增强现实
- 5 多视图几何
- 6 图像聚类
- 7 图像搜索
- 8 图像内容分类
- 9 图像分割
- 10 OpenCV
- 11 附录A 安装软件包
- 12 附录B 图像集
基本的图像操作和处理
-
PIL
1. 转化成灰度:g = Image.open('a.jpg').convert('L');
2. 转换格式:直接save(),指定不同的文件后缀即可 -
Matplotlib
1. plot(x,y,'go-'); title(...); ... show();
3字符的style编码:颜色-标记-线型 -
直方图均衡化
1. imhist, bins = histogram(im.flatten(), nbr_bins=256, normed=True);
2. cdf = imhist.cumsum();
3. cdf = 255*cdf/cdf[-1] #归一化
4. im2 = interp(im.flatten(), bins[:-1], cdf)
5. return im2.reshape(im.shape), cdf -
PCA
M = dot(X, X.T)
e, EV = linalg.eigh(M)
tmp = dot(X.T, EV)
V = tmp[::-1]
S = sqrt(e)[::-1]
for i in range(V.shape[1]): V[:,1] /= S -
使用pickle模块
1. f = open('f.pkl', 'wb')
2. pickle.dump(obj, f) -
SciPy
- im2 = filters.gaussian_filter(im)
- for in [0,1,2]: im2[:,:,i] = filters.gaussian_filter(im[:,:,i],5)
1. 形态学
from scipy.ndimage import measurements, morphology
labels, n_objects = measurements.label(im)
使用开操作分开对象:im2 = morphology.binary_opening(im, ones((9,5)), iterations=2)
2. 读写Matlab .mat文件:scipy.io.loadmat
3. ROF模型去噪(看上去效果不错嘛)
min_U ||I-U||^2 + 2λJ(U)
局部图像描述子
-
Harris角点检测
1. 寻找图像间的对应点
兴趣点描述子 -
SIFT
1. VLFeat工具包?(k,作者甚至没有提供SIFT的Python实现代码!) -
匹配地理标记图像
1. p52 Pydot使用Pyparsing和GraphViz
图像到图像的映射
-
单应性变换
1. 直接线性变换 DLT
2. 仿射变换 -
图像扭曲
1. homography.Haffine_from_points:返回给定点对的最优仿射变换
2. 分段仿射扭曲
三角化:matplotlib.delaunay.delaunay(x,y)
3. 图像配准(图像对眼睛和嘴的坐标进行了标记!)
a,b,tx,ty = linalg.lstsq(A,y)[0] #计算最小化||Ax-y||的最小二乘解
- 创建全景图
1. RANSAC(随机一致性采样)
2. 稳健的单应性矩阵估计
3. 拼接图像(哦~!)
照相机模型与增强现实
- 针孔照相机模型
1. 照相机矩阵:P=K[R|t]
其中,R是旋转矩阵,t是中心位置的平移向量,内标定K描述投影性质
K = [af, s, cx; 0, f, cy; 0, 0, 1], f焦距,s倾斜参数
简化为 K = [f, 0, cx; 0, f, cy; 0, 0, 1], “唯一的未知变量是焦距f”
2. 恢复K,R,t;RQ因子分解
3. 计算照相机中心
给定P,可以计算中心C,满足:PC=0, C=-R^T t
4. 照相机标定(求K)
标准方法:拍摄多幅棋盘图像... => 和图像分辨率有关?
- 以平面和标记物进行姿态估计*
- 增强现实
1. PyGame和PyOpenGL
2. 从照相机矩阵到OpenGL格式*
3. 放置虚拟物体
4. 载入模型(ObjFileLoader)
多视图几何
-
?外极几何
1. 计算F:8点法
2. 外极点和外极线 -
照相机和三维结构的计算
1. ?三角剖分
给定照相机的参数模型,可恢复出点的三维位置
2. 由三维点计算照相机矩阵
3. 由基础矩阵计算照相机矩阵(双视图的情况)
- 多视图重建
1. SfM
检测特征点,在2幅图像间匹配
计算基础矩阵 <-- 稳健估计!
计算照相机矩阵
三角剖分这些三维点
2. 扩展示例
光束法平差 ?
自标定
3. 立体图像
利用2台只有水平偏移的照相机观测同一场景
计算视差图 <-- 归一化互相关?
图像聚类
-
K-Means聚类
-
层次聚类
1. hcluster.draw_dendrogram -
谱聚类
图像搜索
- CBIR
- 视觉单词
- 图像索引
- 在数据库中搜索图像(词袋模型)
- 利用几何特性对结果排序
- 建立演示程序和Web应用
1. CherryPy
图像内容分类
-
KNN
1. *用稠密SIFT作为图像特征
2. 手势识别 -
Bayes分类器
-
SVM
-
OCR
1. sudoku
图像分割
- 图割
- 利用聚类进行分割
- 变分法
OpenCV
- import cv2
