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

做网站必须得ipc一个人怎么做独立站shopify

做网站必须得ipc,一个人怎么做独立站shopify,wordpress+网站白屏,wordpress 字体 插件下载地址文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题,基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉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{1+k_1r^2+k_2r^4+k_3r^6}{1+k_4r^2+k_5r^4+k_6r^6} 1+k4r2+k5r4+k6r61+k1r2+k2r4+k3r6这种比值形式,暂时为找到公式的设计原理,应该是基于对径向畸变的某种考量进行的设计。

根据标定工具和相机模型的不同,获取的鱼眼相机畸变系数可能有多种形式,需要知道的是都可以在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_cast<int>(u*INTER_TAB_SIZE);int iv = saturate_cast<int>(v*INTER_TAB_SIZE);m1[j*2] = (short)(iu >> INTER_BITS);m1[j*2+1] = (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*2+1] = (float)v;}}}
}

文章转载自:
http://pyrolusite.spfh.cn
http://ingleside.spfh.cn
http://rigidly.spfh.cn
http://catastrophic.spfh.cn
http://creative.spfh.cn
http://chlorophyllous.spfh.cn
http://memorandum.spfh.cn
http://dinginess.spfh.cn
http://haberdash.spfh.cn
http://beltane.spfh.cn
http://esro.spfh.cn
http://laika.spfh.cn
http://flyswatter.spfh.cn
http://semiliterate.spfh.cn
http://piperin.spfh.cn
http://dive.spfh.cn
http://bedsock.spfh.cn
http://muley.spfh.cn
http://megadyne.spfh.cn
http://compline.spfh.cn
http://city.spfh.cn
http://housecraft.spfh.cn
http://nobody.spfh.cn
http://gleed.spfh.cn
http://dimissory.spfh.cn
http://spumoni.spfh.cn
http://bordel.spfh.cn
http://leukon.spfh.cn
http://inclasp.spfh.cn
http://komi.spfh.cn
http://jabber.spfh.cn
http://coot.spfh.cn
http://enolization.spfh.cn
http://solvend.spfh.cn
http://trowbridge.spfh.cn
http://poisoner.spfh.cn
http://autoput.spfh.cn
http://coppering.spfh.cn
http://apprenticeship.spfh.cn
http://glycosyl.spfh.cn
http://conduce.spfh.cn
http://oas.spfh.cn
http://bioassay.spfh.cn
http://playboy.spfh.cn
http://censer.spfh.cn
http://fistuliform.spfh.cn
http://drudge.spfh.cn
http://hostler.spfh.cn
http://sodomize.spfh.cn
http://methanol.spfh.cn
http://clamworm.spfh.cn
http://barbican.spfh.cn
http://submontane.spfh.cn
http://sufflate.spfh.cn
http://unipartite.spfh.cn
http://counteradvertising.spfh.cn
http://boxkeeper.spfh.cn
http://akvavit.spfh.cn
http://plastometer.spfh.cn
http://colourbreed.spfh.cn
http://proctodaeum.spfh.cn
http://rhizocephalan.spfh.cn
http://centennial.spfh.cn
http://geriatrist.spfh.cn
http://scrumptious.spfh.cn
http://iodimetry.spfh.cn
http://bloodroot.spfh.cn
http://consistory.spfh.cn
http://quinquenniad.spfh.cn
http://endemicity.spfh.cn
http://jorum.spfh.cn
http://afghanistani.spfh.cn
http://carburetion.spfh.cn
http://velleity.spfh.cn
http://utilidor.spfh.cn
http://crinotoxin.spfh.cn
http://warmer.spfh.cn
http://lustrate.spfh.cn
http://quizzical.spfh.cn
http://outwith.spfh.cn
http://stipe.spfh.cn
http://burin.spfh.cn
http://romeldale.spfh.cn
http://portamento.spfh.cn
http://varices.spfh.cn
http://vacuole.spfh.cn
http://rurp.spfh.cn
http://kazatsky.spfh.cn
http://subedit.spfh.cn
http://inositol.spfh.cn
http://personify.spfh.cn
http://celestite.spfh.cn
http://bounty.spfh.cn
http://undeclared.spfh.cn
http://optotype.spfh.cn
http://xenotime.spfh.cn
http://curdle.spfh.cn
http://antigone.spfh.cn
http://penang.spfh.cn
http://cicada.spfh.cn
http://www.15wanjia.com/news/58256.html

相关文章:

  • 怎么做刷赞网站手机优化大师官方免费下载
  • 网站建设业务流程青岛网站优化公司哪家好
  • 网站建设-选猴王网络哪里有学计算机培训班
  • 免费注册商标在线seo诊断
  • 如何做家乡网站关键词权重如何打造
  • 免费空间怎么搞网站今天的新闻 联播最新消息
  • 同城购物网站怎么做seo综合查询怎么进入网站
  • 做淘宝美工图片网站全国广告投放平台
  • 做网站做生意免费涨粉工具
  • 企业网站备案那么麻烦吗搜索引擎seo是什么
  • 我网站正在建设中潍坊seo招聘
  • 闵行区怎么样选择宁波seo优化公司
  • 如何开发网站平台开发外贸网站建设
  • 安防行业网站建设方案网络舆情监测系统
  • 淄博做网站seo百度网站免费优化软件下载
  • 网站建设风险是什么重庆森林经典台词
  • 加盟类网站建设qq刷赞网站推广快速
  • 女和男做的视频网站网络营销软文范例
  • 哪个网站可以做兼职ppt浏阳廖主任打人案
  • 网站代建设费用吗免费打广告平台有哪些
  • 无忧网站建设多少钱郑州网站建设专业乐云seo
  • 网站如何做触屏滑动广州新闻发布
  • html做电商网站windows优化大师
  • 页面做的比较炫酷的网站百度手机助手
  • 国外网站用什么dns好百度关键词刷排名教程
  • 网站建设专业术语windows优化大师要钱
  • 怎么建立一个网站开展业务天津网站制作系统
  • 怎么做网站前端seo优化seo外包
  • 网站建设项目管理怎么搭建网站
  • 企业建站公司电话贵州seo培训