我正在使用立体相机处理图像以便使用点云。我正在使用一个适合PCL库的方法来创建那些点云(对我来说很遗憾),但无论如何,这是我的问题:相机传感器分辨率为1 / 3.2“752x480,它的基线为12cm,焦距为2.17毫米。
我设法将焦距转换为像素,并将其与其他参数一起传递给我用来创建点云的函数。如果我降低初始图像分辨率可能会更快:我想从752x480传递到263x168(初始分辨率的35%),以便更快地处理云。我目前仍然坚持这个问题:如何转换以前的参数,使其适应这个新的分辨率。我检查了OpenCV相机校准文档,但我没有找到我要找的东西(也许我没有正确地查看它。)
你能帮我解决这个问题吗?提前谢谢
编辑: 我试图做的事情:
float focal_pixel = (FOCAL_METERS / SENSOR_WIDTH_METERS)*img.cols;// times 0.35 ?
//coordinates of the principal points
float hori_c_pp = (img.cols - 1) / 2;
float vert_c_pp = (img.rows - 1) / 2;
以米为单位的焦点以及以米为单位的传感器宽度是常数变量。我需要这些参数来创建点云。就我而言,我认为问题来自焦点像素, 因为如果我只是像这样应用它,我会失去很多观点而且我的点云只会产生几行不相关的点。
使用的功能
virtual void
compute (unsigned char* ref_img, unsigned char* trg_img, int width, int height);
/** \brief stereo processing, it computes a disparity map stored internally by the class
*
* \param[in] ref point cloud of pcl::RGB type containing the pixels of the reference image (left image)
* the pcl::RGB triplets are automatically converted to grayscale upon call of the method
* \param[in] trg point cloud of pcl::RGB type containing the pixels of the target image (right image)
* the pcl::RGB triplets are automatically converted to grayscale upon call of the method
*/
getPointCloud (float u_c, float v_c, float focal, float baseline, pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud, pcl::PointCloud<pcl::RGB>::Ptr texture);
/** \brief computation of a pcl::RGB cloud with scaled disparity values
* it can be used to display a rescaled version of the disparity map by means of the pcl::ImageViewer
* invalid disparity values are shown in green
* Note: the "compute" method must have been previously called at least once in order for this function
* to have any effect
* \param[out] vMap output cloud
*/