IPM

code

#if 0
void xyp2ipmp(cv::Mat& xyp, cv::Mat& ipmp, cv::Mat& xylim, Size& sz){ //xylimist_[0]-latteral/xylimist_[1]-longitudinal...
//ipmp-row0-cols-latteral/ipmp-row1-rows-longitudinal... double xmin = , xmax = , ymin = , ymax = ;
minMaxLoc(xylim.row(), &xmin, &xmax);
minMaxLoc(xylim.row(), &ymin, &ymax); double stepcol = (xmax - xmin) / sz.width;
double steprow = (ymax - ymin) / sz.height; cv::Mat tempx = cv::Mat::ones(, xyp.cols, CV_64FC1) * xmin;
cv::Mat tempy = cv::Mat::ones(, xyp.cols, CV_64FC1) * ymax; ipmp = cv::Mat::zeros(, xyp.cols, CV_64FC1);
ipmp.rowRange(, ) = ( xyp.rowRange(, ) - tempx ) / stepcol;
ipmp.rowRange(, ) = ( tempy - xyp.rowRange(, ) ) / steprow;
for (int i = ; i < xyp.cols; i++ )
{
double y = ipmp.at<double>(, i);
if( y > ymax){
ipmp.at<double>(, i) = ymax;
}
} }
#endif

code

#if 0
//IPM-parameters...
double left_upper_x = ;//left
double left_upper_y = ;//top-greater than 320...
double right_down_x = ;//right...
double right_down_y = ;//bottom...
double uvlimist[] = { left_upper_x, right_down_x, left_upper_x, right_down_x,
left_upper_y, left_upper_y, right_down_y, right_down_y };
cv::Mat uvlmt = cv::Mat(, , CV_64FC1, uvlimist); //I2G
cv::Mat xylimit;
imagetoground(uvlmt, xylimit, h, roll, pitch, camera_param_KK);
//G2I
cv::Mat uvgd;
cv::Size sz = cv::Size(PROB_W, PROB_H);//Size(srcimage.cols, srcimage.rows)
groundtoimage(xylimit, uvgd, sz, h, roll, pitch, camera_param_KK );
#endif

code

#if 1
//IPM...
cv::Mat outimage, coord;
src2ipm( prob, uvgd, outimage, coord, sz, h, roll, pitch, camera_param_KK );
outimage.convertTo(outimage, CV_8UC1);
cv::Mat ipm3 = cv::Mat::zeros(PROB_H, PROB_W, CV_8UC3);
cv::cvtColor(outimage, ipm3, COLOR_GRAY2BGR); //
//cv::Mat uvp = cv::Mat::zeros(2, probp.size(), CV_8UC1);
cv::Mat uvp = cv::Mat::zeros(, probp.size(), CV_64FC1);//data-type...
for (unsigned int i = ; i <probp.size(); i++ )
{
uvp.at<double>(, i) = probp[i].x;//cols-width.
uvp.at<double>(, i) = probp[i].y;//rows-height.
//std::cout << uvp.at<double>(0, i) << "-----" << probp[i].x <<std::endl;
//std::cout << uvp.at<double>(1, i) << "-----" << probp[i].y <<std::endl;
}
cv::Mat ipmps, xyp;
//std::cout << "uvp:" << uvp << std::endl;
imagetoground(uvp, xyp, h, roll, pitch, camera_param_KK);
xyp2ipmp(xyp, ipmps, xylimit, sz);
ipmps.convertTo(ipmps, CV_32SC1);
for (unsigned int i = ; i <probp.size(); i++ )
{
cv::Point ipmp;
ipmp.x = ipmps.at<int>(, i);
ipmp.y = ipmps.at<int>(, i);
if (plabel[i] == )//-barrier
{
cv::circle(ipm3, ipmp, , cv::Scalar(, , ), -); //
//cv::putText(orig, std::to_string(i), pt, CV_FONT_NORMAL, 0.1, cv::Scalar(255, 255, 255));
}
else if (plabel[i] == )//-undifined
{
cv::circle(ipm3, ipmp, , cv::Scalar(, , ), -); //
//cv::putText(orig, std::to_string(i), pt, CV_FONT_NORMAL, 0.1, cv::Scalar(255, 255, 255));
} } cv::imshow("ipmp", ipm3);
cv::waitKey();//unit-ms.
sprintf(output_path,"./ipmp/00000%05d.png",cnt);
cv::imwrite(output_path, ipm3);
#endif

参考

1. matlab_逆透视变换详解 及 代码实现(一);

2. matlab_逆透视变换详解 及 代码实现(二);

【计算机视觉基础】IPM的更多相关文章

  1. 『cs231n』计算机视觉基础

    线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...

  2. 从CVPR 2014看计算机视觉领域的最新热点

    编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下帷幕.在这次大会中,微软亚洲研究院共有15篇论文入选.今年的CVPR上有哪些让人眼前一亮的研究,又反映出哪些趋势?来听赴美参加会议的微软亚洲 ...

  3. 关于Qt画点及计算机专业基础课程介绍

    在计算机图形图像学中,开始都是先画点,我曾经在汇编上tc2.0上画点,后来是MFC,VB,Qt,Python,我觉得对于计算机专业的选择QT的原因是它是个C系的功能强大庞大的库,可以少写很多代码,但是 ...

  4. 从CVPR 2014看计算机视觉领域的最新热点

    2014看计算机视觉领域的最新热点" title="从CVPR 2014看计算机视觉领域的最新热点"> 编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下 ...

  5. BETA随笔6/7

    前言 我们居然又冲刺了·六 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 新方案代码比之前的更简单,但是对场景的要求相应变高了,已经实现,误差感人 代码 ...

  6. BETA5/7

    前言 我们居然又冲刺了·五 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 前一份代码方案全部垮掉,我,重构啦 接下来的计划 加速加速,一定要完成速度模块 ...

  7. 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章

    不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整    理 | Leo 出   ...

  8. CV1——学习笔记

    计算机视觉(computer vision)是从图像和视频中提出数值或符号信息的计算系统,更形象一点说,计算机视觉是让计算机具备像人类一样的眼睛,看到图像,并理解图像. 计算机视觉三大应用:识别.检测 ...

  9. CNN卷积神经网络详解

    前言   在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Blog和大家一起分享.目前的计划如下(以下网络全部使用Pytorch搭建): 专题一:计算机视觉基础 介 ...

随机推荐

  1. SpringDataJPA开发环境的搭建

    这里简单的介绍一下使用maven工程创建SpringDataJPA的开发环境的搭建 首先引入依赖 <dependencies> <!-- junit单元测试 --> <d ...

  2. 认识Activiti

    之前没有用到过工作流,这次由于需要,用到了Activiti工作流引擎,首先要做的就是先来了解一下什么是工作流引擎,它能够完成什么的任务,我们在什么情况下选用工作流引擎来处理问题. 1.Activiti ...

  3. Beta冲刺(6/7)——2019.5.27

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(6/7)--2019.5.27 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  4. python连接redis哨兵集群

    一.redis集群模式有多种, 哨兵模式只是其中的一种实现方式, 其原理请自行谷歌或者百度 二.python 连接 redis 哨兵集群 1. 安装redis包 pip install redis 2 ...

  5. 软件测试之Monkey 初步了解(入门级)

    monkey 介绍 Monkey是Google提供的一个用于稳定性与压力测试的命令行工具.可以运行在模拟器或者实际设备中.它向系统发送伪随机的用户事件(如按键.手势.触摸屏等输入),对软件进行稳定性与 ...

  6. docker 空间清理

    https://blog.csdn.net/qq_28001193/article/details/79555177 清理之后,重要的是找到原因,如上连接所示,其中一个占空间比较大的是日志文件,除了考 ...

  7. &和&& 每天学一点linux

    原文:http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html & 放在启动参数后面表示设置此进程为后台进程 默认情况下, ...

  8. day005-python基础数据类型之课后作业讲解

    1.元素的分类 需求:有如下集合[11,22,33,44,55,66,77,88,99,90……],将所有大于66的值保存在字典的第一个key中,将小于66的值保存在第二个key的值中 代码实现: # ...

  9. Word pair Hu

    Memorize words in the way of games, learn foreign languages, and be more handy

  10. minikube 安装试用

    目前使用k8s 要么用的物理机搭建的环境,要么就是使用docker for mac 中kubernetes 的特性,为了本地调试方便,使用下minikube minukube 包含的特性 负载均衡器 ...