函数cvCreateCameraCapture()同样返回相同的CvCapture*指针,这使得我们后面可以使用完全类似于从视频流中获取帧的方法。当我们需要处理相机序列时我们只需要简单地从相机获得图像,像视频文件一样处理。
cvCapture*capture;
If(argc==1){
capture=cvCreateCameraCapture(0);
}else{
capture=cvCreateFileCapture(argv[1]);
}
assert(capture !=NULL);
//Rest of program proceeds totally ignorant
……
3.3 图像数据处理模块
图像数据处理模块的设计开发是本文的核心重点,图像数据处理模块包括目标定位与线性尺寸测量两个部分。
在图像数据处理的预处理阶段,由于图像背景有些复杂,通过鼠标手动选择处理区域。在要选择区域左上角单机鼠标,确定图像ROI区域左上角,之后按照图像实际情况移动鼠标,此时图像上会出现一个随鼠标移动的红色矩形框,当该矩形框将整个目标包括其中时,再次单机鼠标左键,确定图像ROI区域。此时矩形框不再变化。
自适应二值化是一种改进了的阈值技术,其中阈值本身是一个变量。针对有很强照明或者反射梯度的图像,需要根据梯度进行阈值化时,自适应阈值技术非常有用。
中值滤波器(CV_MEDIAN)将中心像素的正方形邻域内的每个像素值用中间像素值(不是平均像素值)替换。基于平均算法的simple blur对噪图像特别是有大的孤立点的图像非常敏感,即使有少数量点存在较大差异也会导致平均值的明显波动,因此中值滤波可以通过选择中间值避免这些点的影响。
边缘检测包括Canny算子与霍夫变换。Canny算法最重要的一个特点是其试图将独立边的候选像素拼装成轮廓。轮廓的形成是对这些像素运用滞后性阈值。霍夫变换的基本理论是二值图像中的任何点都可能是一些候选直线集合的一部分。
图3-2 图像数据处理模块流程图4目标定位
4.1 直线平面相交原理
已知空间平面 ,空间直线 ,当直线与平面的位置的关系是相交但并非重合时,则该直线与平面只存在一个交点,即图4-1所示的 点。
图4-1 空间直线与平面相交示意图
如果直线经过2个已知点 , ,则用参数方程表示直线 的方程如下:
4.2 直线平面相交定位方法
根据图1,空间中的任意一点都是通过投影中心在成像平面上成像的,那么,这两者之间的连线就是所说的光线,可以通过确定这条光线上的2个点来写出这条光线的方程,然后跟所定义的大地坐标系中的平面相交,则可以得到空间目标的坐标点。
由图1可以看出:所要找的第一个点是相机的投影中心,即相机坐标系中的坐标原点 。第二点则是要求空间位置点的对应点,由于在实际的处理中,得到的是图像坐标系里的坐标,所以,先要将其从图像坐标系转换到成像平面坐标系中。为了得到该点在成像平面上对应的空间点坐标,还需要考虑其在摄像机坐标系中的 方向的值,成像平面与光心的距离为 ,因此,第二个点的坐标为 。根据等式(4-1)得到相机中的这条线如下:
, (4-4)
由于测量的是目标的大地坐标,则需要将直线 从相机坐标系变换到大地坐标系,实际上就是把构成直线的2个点 和 变换到大地坐标系下。根据式(2-1)得:
等式中, 是等式 的逆矩阵。则转换后的2个点分别为 , ,于是,直线 可以重新表示为: MATLAB数字图像的协同测量方法研究+文献综述(4):http://www.youerw.com/jixie/lunwen_4042.html