背景(为什么要这么做?):
目前获取三维数据的方法很多,比如:双目视觉技术,深度相机等等。
但是存在一个问题:数据量巨大!如果要做在线检测,那速度很可能达不到要求。
总思路:
用二维的数据来表示三维数据(数据量从n3降到n2)。
课题需求:
本人的实验室目前的课题是要做马铃薯的形状检测。通过二维图像误差很大,通过传统三维方法达不到在线检测速度要求。
步骤:
1.推导出二维轮廓像素点到三维空间的坐标映射关系;
2.通过图像处理获取轮廓坐标;
3.转换到三维空间;
4.通过PCL点云数据库显示合成三维图像。
核心代码:
//计算x,y轴的方向余弦
//p1表示上面点x,p2表示上面点y,p3表示下面点x,p4表示下面点y
float StaticClassify::DirectionCosineX(float angle,float p1,float p2,float p3,float p4)
{
float pp=p3-p1;
float ppp=sqrt(pow((p3-p1),2)+pow((p2-p4),2));
float Cosine;
if (angle<100)
{Cosine=-pp/ppp;
}
else
{Cosine=pp/ppp;
}
return Cosine;
}
//轮廓的二维点到三维点转换