当前位置: 首页 > news >正文

琪觅网站建设长宁区企业网站建设

琪觅网站建设,长宁区企业网站建设,什么是网站建设从哪些方面建设网站,wordpress 调用相册文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题#xff0c;基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不… 文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不一样。 1.十四讲中的去畸变公式 首先是十四讲或者视觉SLAM中的方法针孔模型的畸变系数为[k1, k2, p1, p2],使用以下去畸变公式计算 2. OpenCV中的去畸变公式 在OpenCV中可以通过initUndistortRectifyMap()函数获得原始图像和矫正图像之间的映射表然后remap()函数根据映射表对整个图像进行映射处理实现去畸变。 cv::fisheye::initUndistortRectifyMap(K, D, cv::Mat(), K, imageSize, CV_16SC2, map1, map2);cv::remap(raw_image, undistortImg, map1, map2, cv::INTER_LINEAR, cv::BORDER_CONSTANT);具体实现可以见文章《对鱼眼相机图像进行去畸变处理》 initUndistortRectifyMap()函数的声明如下 void cv::initUndistortRectifyMap ( InputArray cameraMatrix, // 原相机内参矩阵InputArray distCoeffs, // 原相机畸变参数InputArray R, // 可选的修正变换矩阵 InputArray newCameraMatrix, // 新相机内参矩阵Size size, // 去畸变后图像的尺寸int m1type, // 第一个输出的映射(map1)的类型CV_32FC1 or CV_16SC2OutputArray map1, // 第一个输出映射OutputArray map2 // 第二个输出映射 )有意思的是这里的相机畸变参数是可选的可以是4个参数k1, k2, p1, p2可以是5个参数k1, k2, p1, p2, k3也可以是8个参数k1, k2, p1, p2, k3, k4, k5, k6。 后来检索了一下initUndistortRectifyMap()函数中的畸变公式如下 推导过程的核心是 当k3, k4, k5, k6以及s1, s2, s3, s4均为0的时候该去畸变公式和十四讲中的公式就一样了即十四讲中的去畸变公式是该公式的一个简略版。 3. 4个参数和8个参数之间的区别 已经说过initUndistortRectifyMap()函数中的去畸变参数可以是4个参数k1, k2, p1, p2可以是5个参数k1, k2, p1, p2, k3也可以是8个参数k1, k2, p1, p2, k3, k4, k5, k6。 对于普通的广角相机图像径向畸变和切向畸变一般都比较小所以仅使用k1, k2, p1, p2就可以完成去畸变过程对应十四讲中的去畸变公式。 对于鱼眼相机一般会存在比较大的径向畸变所以需要更高阶的径向畸变系数k3, k4, k5, k6至于为什么是 1 k 1 r 2 k 2 r 4 k 3 r 6 1 k 4 r 2 k 5 r 4 k 6 r 6 \frac{1k_1r^2k_2r^4k_3r^6}{1k_4r^2k_5r^4k_6r^6} 1k4​r2k5​r4k6​r61k1​r2k2​r4k3​r6​这种比值形式暂时为找到公式的设计原理应该是基于对径向畸变的某种考量进行的设计。 根据标定工具和相机模型的不同获取的鱼眼相机畸变系数可能有多种形式需要知道的是都可以在OpenCV去畸变函数中使用。而且有时通过标定得到完整的8个去畸变参数k1, k2, p1, p2, k3, k4, k5, k6这就使得在调用OpenCV函数去畸变事需要使用完整的参数只使用k1, k2, p1, p2会得到失败的结果。 4.initUndistortRectifyMap()函数源码 void cv::initUndistortRectifyMap( InputArray _cameraMatrix, InputArray _distCoeffs,InputArray _matR, InputArray _newCameraMatrix,Size size, int m1type, OutputArray _map1, OutputArray _map2 ) {//相机内参、畸变矩阵Mat cameraMatrix _cameraMatrix.getMat(), distCoeffs _distCoeffs.getMat();//旋转矩阵、摄像机参数矩阵Mat matR _matR.getMat(), newCameraMatrix _newCameraMatrix.getMat();if( m1type 0 )m1type CV_16SC2;CV_Assert( m1type CV_16SC2 || m1type CV_32FC1 || m1type CV_32FC2 );_map1.create( size, m1type );Mat map1 _map1.getMat(), map2;if( m1type ! CV_32FC2 ){_map2.create( size, m1type CV_16SC2 ? CV_16UC1 : CV_32FC1 );map2 _map2.getMat();}else_map2.release();Mat_double R Mat_double::eye(3, 3);//A为相机内参Mat_double A Mat_double(cameraMatrix), Ar;//Ar 为摄像机坐标参数if( newCameraMatrix.data )Ar Mat_double(newCameraMatrix);elseAr getDefaultNewCameraMatrix( A, size, true );//R 为旋转矩阵if( matR.data )R Mat_double(matR);//distCoeffs为畸变矩阵if( distCoeffs.data )distCoeffs Mat_double(distCoeffs);else{distCoeffs.create(8, 1, CV_64F);distCoeffs 0.;}CV_Assert( A.size() Size(3,3) A.size() R.size() );CV_Assert( Ar.size() Size(3,3) || Ar.size() Size(4, 3));//摄像机坐标系第四列参数 旋转向量转为旋转矩阵Mat_double iR (Ar.colRange(0,3)*R).inv(DECOMP_LU);//ir IR矩阵的指针const double* ir iR(0,0);//获取相机的内参 u0 v0 为主坐标点 fx fy 为焦距double u0 A(0, 2), v0 A(1, 2);double fx A(0, 0), fy A(1, 1);CV_Assert( distCoeffs.size() Size(1, 4) || distCoeffs.size() Size(4, 1) ||distCoeffs.size() Size(1, 5) || distCoeffs.size() Size(5, 1) ||distCoeffs.size() Size(1, 8) || distCoeffs.size() Size(8, 1));if( distCoeffs.rows ! 1 !distCoeffs.isContinuous() )distCoeffs distCoeffs.t();//畸变参数计算double k1 ((double*)distCoeffs.data)[0];double k2 ((double*)distCoeffs.data)[1];double p1 ((double*)distCoeffs.data)[2];double p2 ((double*)distCoeffs.data)[3];double k3 distCoeffs.cols distCoeffs.rows - 1 5 ? ((double*)distCoeffs.data)[4] : 0.;double k4 distCoeffs.cols distCoeffs.rows - 1 8 ? ((double*)distCoeffs.data)[5] : 0.;double k5 distCoeffs.cols distCoeffs.rows - 1 8 ? ((double*)distCoeffs.data)[6] : 0.;double k6 distCoeffs.cols distCoeffs.rows - 1 8 ? ((double*)distCoeffs.data)[7] : 0.;//图像高度for( int i 0; i size.height; i ){//映射矩阵map1 float* m1f (float*)(map1.data map1.step*i);//映射矩阵map2float* m2f (float*)(map2.data map2.step*i);short* m1 (short*)m1f;ushort* m2 (ushort*)m2f;//摄像机参数矩阵最后一列向量转换成的3*3矩阵参数double _x i*ir[1] ir[2];double _y i*ir[4] ir[5];double _w i*ir[7] ir[8];//图像宽度for( int j 0; j size.width; j, _x ir[0], _y ir[3], _w ir[6] ){//获取摄像机坐标系第四列参数double w 1./_w, x _x*w, y _y*w;double x2 x*x, y2 y*y;double r2 x2 y2, _2xy 2*x*y;double kr (1 ((k3*r2 k2)*r2 k1)*r2)/(1 ((k6*r2 k5)*r2 k4)*r2);double u fx*(x*kr p1*_2xy p2*(r2 2*x2)) u0;double v fy*(y*kr p1*(r2 2*y2) p2*_2xy) v0;if( m1type CV_16SC2 ){int iu saturate_castint(u*INTER_TAB_SIZE);int iv saturate_castint(v*INTER_TAB_SIZE);m1[j*2] (short)(iu INTER_BITS);m1[j*21] (short)(iv INTER_BITS);m2[j] (ushort)((iv (INTER_TAB_SIZE-1))*INTER_TAB_SIZE (iu (INTER_TAB_SIZE-1)));}else if( m1type CV_32FC1 ){m1f[j] (float)u;m2f[j] (float)v;}else{m1f[j*2] (float)u;m1f[j*21] (float)v;}}} }
http://www.zqtcl.cn/news/453991/

相关文章:

  • 网站横幅代码山东省住房和城乡建设厅电话号码
  • 营销模式有哪些seo点击软件哪个好用
  • 信息流网站建设做网站换服务器怎么整
  • html5网站编写wordpress同步到本地
  • php商城网站开发工业设计在线
  • 网站建设发布实训总结网站自适应代码
  • 网站建设与管理是什么摄影网站 蜂鸟
  • 廊坊做网站的大公司wordpress+主题加速
  • 做网站还能挣钱吗网页端
  • 自适应网站建设推荐淘宝详情页设计
  • 手机网站域名设置深圳的网站建设公司怎么样
  • 余姚网站建设设计服务cms网站源码
  • 工作是套模板做网站想做网站制作运营注册什么公司核实
  • 北京网站建设116networdpress导航栏下拉菜单
  • 医院网站建设的目标网络服务许可证
  • 市场部做网站工作职责晋江论坛网
  • 网站怎么吸引人网站优化策略分析
  • 河北建设厅网站衡水网站建设培训学校
  • 新网网站空间到期停了 咋续费网站营销推广应该怎么做
  • 网站建设和编辑实训报告安卓版网页制作软件
  • 网站模板框架站长资讯
  • 上海做网站哪家公司2022年国际国内重大新闻
  • 网站建设如何定位网站建设思路方向
  • 手机网站拦截怎么解除网站生成软件免费制作
  • 中国房地产网站茂名住房和城乡建设厅网站
  • 做网站销售工资怎么样网页设计是哪个专业
  • 吉林省住房城乡建设厅网站首页微商城模板包含哪些
  • 优秀个人网站案例wordpress 文章格式
  • 2019年做网站装修平面设计图的制作
  • 潍坊网站建设top淘宝客网站名