解析:径向畸变(近大远小);切向畸变(透镜与成像平面不平行)。
2. 单反相机
解析:单反数码相机指的是单镜头反光数码相机,即Digital(数码)、Single(单独)、Lens(镜头)、Reflex(反光)的英文缩写DSLR。目前市面上常见的单反数码相机品牌有:尼康、佳能、宾得、索尼等。
3. 单目视觉,双目视觉,双目立体视觉
解析:
(1)单目视觉
(2)双目视觉
(3)双目立体视觉
说明:从单目视觉,双目视觉和双目立体视觉的2D图像中恢复3D图像。
4. glob模块
解析:glob模块是用来查找匹配的文件。比如,*匹配所有,?匹配一个字符。如果没有匹配的文件,那么glob.glob(path)将返回一个空的列表。
5. criteria
迭代停止的模式选择,这是一个含有三个元素的元组型数,格式为(type,max_iter,epsilon)。其中,type又有两种选择,如下所示:
(1)cv2.TERM_CRITERIA_EPS:精确度(误差)满足epsilon停止。
(2)cv2.TERM_CRITERIA_MAX_ITER:迭代次数超过max_iter停止。
(3)cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,两者合体,任意一个满足结束。
6. 图像类型
解析:
(1)二值图像:每个像素不是黑就是白,其灰度值没有中间过渡的图像。
(2)灰度图像:一个像素只有一个值,不同的值就代表不同的灰度等级,也就呈现不同程度的灰色(0级为黑色,255级为白色)。
(3)彩色图像:每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于[0,255]之间。
(4)索引图形
说明:一张未压缩的1024x768大小的16位彩色图像,图像文件字节数 = 图像分辨率 × 颜色深度 ÷ 8,即1024×768×16÷8 = 1572864Bytes = 1536KB = 1.5MB。
7. 图层
解析:图层就像是含有文字或图形等元素的胶片,一张张按顺序叠放在一起,组合起来形成页面的最终效果。图层可以将页面上的元素精确定位。图层中可以加入文本、图片、表格、插件,也可以在里面再嵌套图层。图层常见类型包括:(1)普通层(2)背景层(3)文字层(4)调节层(5)效果层(6)图形层(7)图层组(8)图层蒙版(9)图层剪贴组。
8. numpy.mgrid
解析:
>>> np.mgrid[0:9,0:7]
array([[[0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3],
[4, 4, 4, 4, 4, 4, 4],
[5, 5, 5, 5, 5, 5, 5],
[6, 6, 6, 6, 6, 6, 6],
[7, 7, 7, 7, 7, 7, 7],
[8, 8, 8, 8, 8, 8, 8]],
[[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6]]])
>>> a = np.mgrid[0:9,0:7]
>>> a.size
126
>>> a.shape
(2L, 9L, 7L)
说明:a是三维矩阵,a.shape=(2L, 9L, 7L)表示2页9行7列的三维矩阵。
9. numpy.reshape
解析:如果reshape的矩阵中有-1,那么该维度需要推断。
说明:Python使用del删除变量。
10. cv2.findChessboardCorners(image, patternSize[, corners[, flags]]) → retval, corners
解析:Finds the positions of internal corners of the chessboard.
11. cv2.waitKey和cv2.destroyAllWindows
解析:
(1)cv2.waitKey():键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入。
(2)cv2.destroyAllWindows():删除建立的全部窗口。
12. cv2.findChessboardCorners,cv2.cornerSubPix,cv2.drawChessboardCorners
解析:
(1)cv2.findChessboardCorners:Finds the positions of internal corners of the chessboard.
eg: cv2.findChessboardCorners(image, patternSize[, corners[, flags]]) → retval, corners
(2)cv2.cornerSubPix:Refines the corner locations.
eg: cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria) → None
(3)cv2.drawChessboardCorners:Renders the detected chessboard corners.
eg: cv2.drawChessboardCorners(image, patternSize, corners, patternWasFound) → None
13. 相机标定(单目标定)
解析:[针孔成像模型]根据相机畸变参数和相机内部参数对畸变图像进行修复。畸变主要有两种:径向畸变和切向畸变。径向畸变矫正,如下所示:
切向畸变矫正,如下所示:
5个畸变系数,如下所示:
相机内部参数是相机特异的,它完全取决于相机自身。相机矩阵(相机内部参数),如下所示:
说明:空间景物点与其图像中的像点之间存在着一一对应的关系,它们的位置关系由摄像机成像几何模型所决定。相机外部参数包含旋转矩阵(R)和平移矩阵(T),它反映的是摄像机坐标系与世界坐标系的转换。(摄像机固定;棋盘格固定)
14. 刚体
解析:在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。
15. 相机标定坐标系 [13]
解析:
(1)像素坐标系
(2)图像坐标系
(3)相机坐标系
(4)世界坐标系
说明:图像传感器分为CCD(电荷耦合器件)和CMOS(互补型金属氧化物半导体)两种。
16. ROI
解析:ROI(Region Of Interest)表示图像处理中的术语“感兴趣区”,就是在要处理的图像中提取出的要处理的区域。
说明:3D点被称为对象点,2D点被称为图像点。
17. numpy数组保存
解析:
(1)a.tofile("filename.bin");b = numpy.fromfile("filename.bin", dtype = "")
(2)numpy.save("filename.npy", a);numpy.load("filename.npy")
(3)numpy.savetxt("filename.txt", a);b = numpy.loadtxt("filename.txt")
(4)numpy.savez("filename.npz", a);b= np.load("result.npz")
18. 边缘检测算法
图像边缘检测算子的4个步骤,如下所示:
(1)图像滤波:传统边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出的是,大多数滤波器在降低噪声的同时也造成了边缘强度的损失,因此,在增强边缘和降低噪声之间需要一个折衷的选择;
(2)图像增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度的幅值来完成的;
(3)图像检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判断依据是梯度幅值;
(4)图像定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。
常见的边缘检测算子包括:Sobel算子,Isotropic Sobel算子, Roberts算子,Prewitt算子,Laplacian算子,Canny算子,LoG算子。Canny边缘检测算子4个步骤,如下所示:
(1)用高斯滤波器平滑图象;
(2)用一阶偏导的有限差分来计算梯度的幅值和方向;
(3)对梯度幅值进行非极大值抑制;
(4)用双阈值算法检测和连接边缘。
19. 角点检测算法
解析:角点在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。角点检测算法可分为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。基于灰度图像的角点检测又可分为基于梯度、基于模板和基于模板梯度组合3类方法。常见的基于模板的角点检测算法有Kitchen-Rosenfeld角点检测算法,Harris角点检测算法、KLT角点检测算法及SUSAN角点检测算法。Harris角点检测算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。
20. cv2.HoughCircles
解析:cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) → circles
eg: Finds circles in a grayscale image using the Hough transform.
21. cv2.cornerHarris
解析:cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]]) → dst
eg: Harris edge detector.
22. 图像几何变换
解析:图形常见的几何变换有缩放,仿射,透视变换,如下所示:
(1)dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
(2)dst = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
(3)dst = cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
说明:透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。对于透视变换,我们需要一个3x3的变换矩阵。在变换前后直线还是直线。要构建这个变换矩阵,你需要在输入图像上找4个点,以及他们在输出图像上对应的位置,这四个点中的任意三个都不能共线。这个变换矩阵可以由函数cv2.getPerspectiveTransform()构建,然后把这个矩阵传给函数cv2.warpPerspective()。
23. cv2.findHomography
解析:cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]]) → retval, mask。cv2.findHomography函数是求两幅图像的单应性矩阵。在计算机视觉中,平面的单应性被定义为从一个平面到另一个平面的投影映射。因此,一个二维平面上的点映射到摄像机成像仪上的映射就是平面单应性的例子。
24. 形态学操作
解析:
(1)腐蚀:卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是1,那么中心元素就保持原来的像素值,否则就变为零。
(2)膨胀:卷积核沿着图像滑动,如果与卷积核对应的原图像的像素值中有一个是1,那么中心元素的像素值就是1。
(3)开运算:先进行腐蚀再进行膨胀就叫做开运算。
(4)闭运算:先进行膨胀再进行腐蚀就叫做闭运算。
(5)礼帽:原始图像与进行开运算之后得到的图像的差。
(6)黑帽:进行闭运算之后得到的图像与原始图像的差。
说明:一般在去噪声时先用腐蚀再用膨胀。
25. np.polyfit,np.poly1d,np.polyder
解析:
(1)np.polyfit和np.poly1d函数
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
>>> z = np.polyfit(x, y, 3)
>>> p = np.poly1d(z)
>>> p(0.5)
(2)np.polyder函数
假设多项式为,如下所示:
>>> p = np.poly1d([1,1,1,1])
>>> p2 = np.polyder(p)
>>> p2
poly1d([3, 2, 1])
说明:np.polyder多项式求导函数,返回导函数的系数。
参考文献:
[1] 单目视觉标定原理:http://www.cnblogs.com/polly333/p/4994408.html
[2] 双目视觉算法简介:http://blog.sina.com.cn/s/blog_4a540be60102v44s.html
[3] OpenCV 2.0单目相机标定,畸变矫正:http://blog.sina.com.cn/s/blog_4a540be60102v53x.html
[4] 双目立体视觉:http://blog.csdn.net/adropofsnow/article/details/6160155
[5] 计算机视觉算法与代码:http://blog.csdn.net/huangwen199002/article/details/49850287s
[6] 图像处理与识别:http://www.cnblogs.com/ronny/p/index.html
[7] Python+OpenCV学习(17)---摄像机标定:http://blog.csdn.net/firemicrocosm/article/details/48594897
[8] 使用OpenCV进行相机标定:http://blog.csdn.net/u010784534/article/details/24323643
[9] 摄像机模型与标定(二):OpenCV 2相关函数介绍:http://blog.csdn.net/jskjdxmgj/article/details/50528352
[10] 关于OpenCV的那些事——相机姿态更新:http://blog.csdn.net/aptx704610875/article/details/48915149
[11] 关于OpenCV的那些事——相机标定:http://blog.csdn.net/aptx704610875/article/details/48914043
[12] 相机成像所说的径向畸变和切向畸变是什么区别?:http://bbs.csdn.net/topics/80338962
[13] 摄像机模型与标定:三个坐标系及其之间关系:http://www.360doc.com/content/14/0410/14/10724725_367760675.shtml
[14] 世界坐标系和相机坐标系,图像坐标系的关系:http://blog.csdn.net/waeceo/article/details/50580607
[15] 镜头畸变矫正:http://blog.csdn.net/waeceo/article/details/50580808
[16] 摄像机模型与标定——摄像机标定:http://www.360doc.com/content/14/0410/14/10724725_367762569.shtml