Shard

《OpenCV3计算机视觉》笔记

Python语音实现(原书第2版)

作者:Joe Minichino&Joseph Howse著 刘波 苗贝贝 史斌 译

CV.ml 机器学习算法

算法

cv2.ml.svm---------------------支持向量机

cv2.ml.knn---------------------K.近邻

cv2.ml.bayesian----------------正态贝叶斯分类器

......


反向传播

概念

反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。 反向传播要求有对每个输入值想得到的已知输出,来计算损失函数梯度。


cv2.getStructuringElement

方法

cv2.getStructuringElement( ) 返回指定形状和尺寸的结构元素。

这个函数的第一个参数表示内核的形状,有三种形状可以选择。

矩形:MORPH_RECT;

......


cv2.xfeatures2d.SURF_create

方法

static Ptr cv::xfeatures2d::SURF::create ( double hessianThreshold = 100, int nOctaves = 4, int nOctaveLayers = 3, bool extended = false, bool upright = false )

参数:

hessianThreshold Threshold for hessian keypoint detector used in SURF.

......


svm.predict

方法

predict(samples[,results[,flags]]) 检测样本

参数:

samples:样本矩阵

......


svm.train

方法

train(trainData, flags=None): 训练模型

参数:

trainData:训练数据

......


cv2.resize

方法

cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)

参数解释:

InputArray src 输入图片

......


sklearn.make_classification

方法

make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None): 

参数: 
n_features :特征个数= n_informative() + n_redundant + n_repeated 
n_informative:多信息特征的个数 
n_redundant:冗余信息,informative特征的随机线性组合 
n_repeated :重复信息,随机提取n_informative和n_redundant 特征 
n_classes:分类类别 
n_clusters_per_class :某一个类别是由几个cluster构成的 
weights:列表类型,权重比 
class_sep:乘以超立方体大小的因子。 较大的值分散了簇/类,并使分类任务更容易。默认为1 
random_state: 如果是int,random_state是随机数发生器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果没有,则随机数生成器是np.random使用的RandomState实例。

返回值: 
X:形状数组[n_samples,n_features] 生成的样本。 
y:形状数组[n_samples] 每个样本的类成员的整数标签。

......


cv2.xfeatures2d_SIFT.compute

方法

compute(self, image, keypoints, descriptors=None) 计算特征描述符

args:

image:输入图像

......


cv2.drawKeypoints

方法

drawKeypoints(image, keypoints, outImage, color=None, flags=None) 
image:也就是原始图片 
keypoints:从原图中获得的关键点,这也是画图时所用到的数据 
outputimage:输出 color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。 
flags:绘图功能的标识设置flags的四个参数: 
    cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点 
    cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对 
    cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形 
    cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制 


cv2.cornerHarris

方法

cv2.cornerHarris(src, blockSize, ksize, k, dst=None, borderType=None) 
    src:数据类型为 float32 的输入图像 
    blockSize:角点检测中考虑的区域大小 
    ksize:Sobel求导中使用的窗口大小 
    k:Harris 角点检测方程中的自由参数,取值参数为 [0.04 0.06]
    dst:输出图像 
    borderType:边界的类型


cv2.BOWKMeansTrainer

方法

# 创建BOW训练器,指定k-means参数k 把处理好的特征数据全部合并,利用聚类把特征词分为若干类,此若干类的数目由自己设定,每一类相当于一个视觉词汇


cv2.FlannBasedMatcher

方法

FLANN英文全称Fast Libary for Approximate Nearest Neighbors,FLANN是一个执行最近邻搜索的库,官方网站http://www.cs.ubc.ca/research/flann。
它包含一组算法,这些算法针对大型数据集中的快速最近邻搜索和高维特征进行了优化,对于大型数据集,它比BFMatcher工作得更快。经验证、FLANN比其他的最近邻搜索软件快10倍。 
flann = cv2.FlannBasedMatcher(indexParams,searchParams) 
其中FLANN匹配对象接收两个参数:indexParams和searchParams。这两个参数在python中以字典形式进行参数传递(在C++中以结构体形式进行参数传递),为了计算匹配,FALNN内部会决定如何处理索引和搜索对象。 
1、indexParams 对于像SIFT,SURF等算法,您可以传递以下内容: indexParams = dict(algorithm = FLANN_INDEX_KDTREE,trees = 5) 参数algorithm用来指定匹配所使用的算法,可以选择的有LinearIndex、KTreeIndex、KMeansIndex、CompositeIndex和AutotuneIndex,这里选择的是KTreeIndex(使用kd树实现最近邻搜索)。KTreeIndex配置索引很简单(只需要指定待处理核密度树的数量,最理想的数量在1~16之间),并且KTreeIndex非常灵活(kd-trees可被并行处理)。 
2、searchParams SearchParams它指定索引数倍遍历的次数。 值越高,精度越高,但也需要更多时间。 如果要更改该值,请传递:searchParams = dict(checks = 50) 实际上、匹配效果很大程度上取决于输入。5 kd-trees和50 checks总能取得具有合理精度的结果,而且能够在很短的时间内完成匹配。


flann

算法

FLANN是快速最近邻搜索包(Fast_Library_for_Approximate_Nearest_Neighbors)的简称。它是一个对大数据集和高维特征进行最近邻搜索的算法的集合,而且这些算法都已经被优化过了。在面对大数据集是它的效果要好于BFMatcher。


生成器

概念

在 Python 中,使用了 yield 的函数被称为生成器(generator)。 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。


代码DEMO

代码

opencv计算机视觉学习笔记


cv2.imread

方法

使用函数cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。


SURF(Speeded-Up Robust Features)

算法

SURF算法采用快速Hessian算法检测关键点,而SURF算子会通过一个特征向量来描述关键点周围区域的情况。这和SIFT算法很像,SIFT算法分别采用DoG和SIFT算子来检测关键点和提取关键点的描述符。 SURF特征检测的步骤: 1.尺度空间的极值检测:搜索所有尺度空间上的图像,通过Hessian来识别潜在的对尺度和选择不变的兴趣点。 2.特征点过滤并进行精确定位。 3.特征方向赋值:统计特征点圆形邻域内的Harr小波特征。即在60度扇形内,每次将60度扇形区域旋转0.2弧度进行统计,将值最大的那个扇形的方向作为该特征点的主方向。 4.特征点描述:沿着特征点主方向周围的邻域内,取4×4个矩形小区域,统计每个小区域的Haar特征,然后每个区域得到一个4维的特征向量。一个特征点共有64维的特征向量作为SURF特征的描述子。


SIFT

算法

尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。


支持向量机-SVM

概念

支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。


方向梯度直方图-HOG

概念

方向梯度直方图(英语:Histogram of oriented gradient,简称HOG)是应用在计算机视觉和图像处理领域,用于目标检测的特征描述器。这项技术是用来计算局部图像梯度的方向信息的统计值。这种方法跟边缘方向直方图(edge orientation histograms)、尺度不变特征变换(scale-invariant feature transform descriptors)以及形状上下文方法( shape contexts)有很多相似之处,但与它们的不同点是:HOG描述器是在一个网格密集的大小统一的细胞单元(dense grid of uniformly spaced cells)上计算,而且为了提高性能,还采用了重叠的局部对比度归一化(overlapping local contrast normalization)技术。


词袋-BOW

概念

BoW使用一组无序的单词(words)来表达一段文字或一个文档。


支持向量机-SVM

概念

支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:


图像金字塔

概念

图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点的图像,这就构成了传统意义上的图像金字塔。


非极大值抑制

概念

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。


1 条评论

  1. Judson

    学习一下! 测

评论