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. Hive架构与工作原理

    组成及作用: 用户接口:ClientCLI(hive shell).JDBC/ODBC(java访问hive).WEBUI(浏览器访问hive) 元数据:Metastore 元数据包括:表名.表所属的 ...

  2. AlwaysInstallElevated提权

    前言:自己在学习3gstudent的AlwaysInstallElevated提权的文章中,他说过由于Metasploit的某些原因会导致权限不够,所以自己就尝试去复现其他的两种方法了,详细的文章参考 ...

  3. LeetCode 722. Remove Comments

    原题链接在这里:https://leetcode.com/problems/remove-comments/ 题目: Given a C++ program, remove comments from ...

  4. 文件描述符fd,struct files_struct

    程序可以理解为硬盘上的普通二进制文件:进程是加载到内存中的二进制文件,除了加载到内存中的二进制文件外,还附有所有对于该二进制文件描述信息的结构体,描述该进程的结构体叫PCB(进程控制块),在这就不在讨 ...

  5. golang 配置goproxy 几个可选的地址

    对于golang 语言的开发,对于国内来说有点被动,需要想各种方法,一般的解决方法如下: 使用代理工具(翻墙) 配置goproxy 目前发现的几个不错的goproxy 阿里云 配置如下:   expo ...

  6. Mysql8.0 创建远程登陆账户

    mysql8和原来的版本有点不一样,8的安全级别更高,所以在创建远程连接用户的时候, 不能用原来的命令(同时创建用户和赋权): mysql>grant all PRIVILEGES on *.* ...

  7. Kmeans文档聚类算法实现之python

    实现文档聚类的总体思想: 将每个文档的关键词提取,形成一个关键词集合N: 将每个文档向量化,可以参看计算余弦相似度那一章: 给定K个聚类中心,使用Kmeans算法处理向量: 分析每个聚类中心的相关文档 ...

  8. 04-树6 Complete Binary Search Tree (30 分)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  9. SpringBoot:使用Jenkins自动部署SpringBoot项目(一)环境准备

    1.安装JDK 1.在java官网下载linux下的安装包,上传到云服务器 /user/java 目录下 2.解压:tar xzvf jdk-8u161-linux-x64.tar.gz 3.为了好看 ...

  10. ansible-playbook-常用

    创建软链:file: - name: create link hosts: "{{hosts_ip}}" tasks: - name: create link file: src= ...