要做个OCR相关的项目,以下代码资料非特别标注一般是来自pyimagesearch,非常棒的网站
关于相机模型
网上有很多资源了,比如这个讲的就挺简单还清楚,用我自己的话整理一遍(无过程公式),需要一定的CG基础。
相机模型,成像,主要牵扯四个坐标系,世界坐标系,相机坐标系,CMOS坐标系,图片坐标系。
-
世界坐标系:在真实世界中设定一个点为原点,再自己指定XYZ三个轴,然后坐标系就出来了,三维的,单位也是实际距离单位。比如相机标定棋盘格,指定左上角的角点为原点沿着横纵两个方向为XY轴,垂直纸面为是Z轴这个样。
-
相机坐标系:和世界坐标系一个路子,也是个三维坐标系,只不过相机位置为坐标系原点,所以从世界坐标系到相机坐标系只需要旋转和平移过去即可。
一个思考:那把相机坐标系和世界坐标系原点搞个重合岂不是更好?个人认为没这么做的原因是相机标定时候需要那些个标定点处于Zw=0的平面,如果坐标系是以相机为中心的此时Zw=Zc,则标定点的Zw或者说Zc!=0,可能不方便计算,比如三维标定点的坐标不好表示了,如果有什么严谨证明烦请指路。
-
CMOS坐标系:就是把来自相机坐标系三维坐标透视变换到二维坐标上去,根据相似三角形原理。值得一提的是这个坐标系单位是mm也就是真正的像素尺寸,坐标中心在cmos的中心点。
-
图片坐标系:就是最后的坐标系,显示在终端的图像,一般左上角为起始点,由CMOS坐标系转换过来,是一个简单的比例变换(除dx,xy)加平移。
其中3 4步联合为内参矩阵,1 2步联合为外参矩阵。
单目相机一般来说无法获取深度信息Zw,所以标定时假定标定点都在Zw=0的平面上,根据最整体的公式
Z
c
[
u
,
v
,
1
]
=
P
∗
[
X
w
,
Y
w
,
Z
w
,
1
]
Zc[u,v,1]=P*[Xw,Yw,Zw,1]
Zc[u,v,1]=P∗[Xw,Yw,Zw,1]
P为内外参矩阵的积,下标c代表相机,w代表世界。
其实Zc是已知的,因为Zw已知,然后外参又已知所以Zc确实可以求出来,这样我们就可以根据图像上的点来一路反推找到实际三维世界中的坐标了。
另外一个思考,如果相机位姿改变,焦距也变了,是需要重新标定的吧?
自答:是
杂知识点:
realtime检测, 可以加入判断当前frame是否可用来提高程序健壮性,可用的feature比如对比度
判断像素颜色,色域用LAB,根据欧式距离来判断颜色,需要提前给定参考颜色
判断形状,用 cv2.approxPolyDP
,原理是Ramer-Douglas-Peucker algorithm
分水岭分割,学了好几遍,基本没用过哈哈,通过计算欧几里德距离变换 (EDT) ,计算每个前景像素到最近的零(即背景像素)的欧几里德距离。例子
图分割,好用,可以来clean up mask,也可以通过给定bounding box来生成mask