2D射影儿何和变换——柱面投影,图像拼接柱面投影
来源:互联网 发布:莱斯特城奇迹知乎 编辑:程序博客网 时间:2024/05/21 17:45
引入二维空间(以下简称2D) 的射影变换
这些变换发生在用透视摄像机对平面摄像的时候.
该章偏重于入门介绍并为三维空间(以下简称3D) 几何铺路.
大多数的概念在2D 中比3D 中更容易理解和可视化.
本章介绍射影变换,包括它的特殊悄况:仿射和相似变换;
并把注意力主要集中在从透视图像中恢复仿射性质(例如平行钱)和度量性质(例如线之间的角度) .
// mapcyl.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <opencv/cv.h>#include <opencv/highgui.h>cv::Point2f convert_pt(cv::Point2f point,int w,int h){//center the point at 0,0cv::Point2f pc(point.x-w/2,point.y-h/2);//these are your free parameters//negative focal length since we are rear projectingfloat f = -w/2;float r = w;float omega = w/2;float z0 = f - sqrt(r*r-omega*omega);float zc = (2*z0+sqrt(4*z0*z0-4*(pc.x*pc.x/(f*f)+1)*(z0*z0-r*r)))/(2* (pc.x*pc.x/(f*f)+1)); cv::Point2f final_point(pc.x*zc/f,pc.y*zc/f);final_point.x += w/2;final_point.y += h/2;return final_point;}int _tmain(int argc, _TCHAR* argv[]){cv::Mat imgMat = cv::imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);cv::copyMakeBorder(imgMat, imgMat, 175, 175, 175, 175, cv::BORDER_CONSTANT); cv::namedWindow("Original",CV_WINDOW_AUTOSIZE);cv::imshow("Original", imgMat);cv::waitKey(0);cv::Mat destImgMat(imgMat.size(), CV_8U);for(int y = 0; y < imgMat.rows; y++){for(int x = 0; x < imgMat.cols; x++){cv::Point2f current_pos(x,y);current_pos = convert_pt(current_pos, imgMat.cols, imgMat.rows);cv::Point2i top_left((int)current_pos.x,(int)current_pos.y); //top left because of integer rounding//make sure the point is actually inside the original imageif(top_left.x < 0 || top_left.x > imgMat.cols-2 || top_left.y < 0 || top_left.y > imgMat.rows-2){continue;}//bilinear interpolationfloat dx = current_pos.x-top_left.x;float dy = current_pos.y-top_left.y;float weight_tl = (1.0 - dx) * (1.0 - dy);float weight_tr = (dx) * (1.0 - dy);float weight_bl = (1.0 - dx) * (dy);float weight_br = (dx) * (dy);uchar value = weight_tl * imgMat.at<uchar>(top_left) +weight_tr * imgMat.at<uchar>(top_left.y,top_left.x+1) +weight_bl * imgMat.at<uchar>(top_left.y+1,top_left.x) +weight_br * imgMat.at<uchar>(top_left.y+1,top_left.x+1);destImgMat.at<uchar>(y,x) = value;}}cv::namedWindow("Cylindrical",CV_WINDOW_AUTOSIZE);cv::imshow("Cylindrical",destImgMat);cv::waitKey(0);cv::imwrite( "cyl_lena.jpg", destImgMat ); return 0;}
结果:
参考文献:
链接
论文源代码下载:链接
0 0
- 2D射影儿何和变换——柱面投影,图像拼接柱面投影
- 【Opencv】2D射影儿何和变换——柱面投影,图像拼接柱面投影
- 图像拼接---图片柱面投影简单实现
- 柱面投影
- 图像的柱面投影纠正
- 图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
- 图像拼接(一):柱面投影+模板匹配+渐入渐出融合
- 柱面投影matlab程序
- 图像拼接(二):柱面投影+模板匹配+渐入渐出融合(GPU版)
- 球面投影 (立体和柱面的投影效果)
- 360度全景拼接之成像模型与柱面投影
- C/C++ 图像处理(8)------图像の柱面投影算法
- 柱面坐标变换
- 多投影完美拼接——边缘融合投影技术
- 3D射影几何和射影变换
- 全景图(二):在Unity3D上实现360°柱面投影
- 磁道、扇区和柱面
- 投影和变换工具集
- 谈谈数据决策平台搭建的必要性
- Cognos仪表盘(一)基本介绍
- Converting Your App to a 64-Bit Binary
- 使用 powerdesigner 15.1 逆向工程mysql 总结
- Oracle日期格式化
- 2D射影儿何和变换——柱面投影,图像拼接柱面投影
- Android 基本UI(五)—图片控件ImageView
- memset用法详解
- android 自定义 View 构造函数 routine
- unity的shader里模型空间和投影空间的vertex
- 专访北京航空航天大学黎健成:我和编程比赛
- Linux netfilter 学习笔记 之十三 netfilter的SNAT模块是否支持UDP打洞
- IE6下z-index犯癫不起作用bug的初步研究
- Java同步技术(六)