【Opencv】2D射影儿何和变换——柱面投影,图像拼接柱面投影

article/2025/9/27 3:48:51

引入二维空间(以下简称2D) 的射影变换

这些变换发生在用透视摄像机对平面摄像的时候.

该章偏重于入门介绍并为三维空间(以下简称3D) 几何铺路.

大多数的概念在2D 中比3D 中更容易理解和可视化. 

本章介绍射影变换,包括它的特殊悄况:仿射和相似变换; 

并把注意力主要集中在从透视图像中恢复仿射性质(例如平行钱)和度量性质(例如线之间的角度) .

[cpp]  view plain copy
  1. // mapcyl.cpp : Defines the entry point for the console application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <opencv/cv.h>  
  6. #include <opencv/highgui.h>  
  7.   
  8. cv::Point2f convert_pt(cv::Point2f point,int w,int h)  
  9. {  
  10.     //center the point at 0,0  
  11.     cv::Point2f pc(point.x-w/2,point.y-h/2);  
  12.   
  13.     //these are your free parameters  
  14.     //negative focal length since we are rear projecting  
  15.     float f = -w/2;  
  16.     float r = w;  
  17.   
  18.     float omega = w/2;  
  19.     float z0 = f - sqrt(r*r-omega*omega);  
  20.       
  21.     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));   
  22.       
  23.     cv::Point2f final_point(pc.x*zc/f,pc.y*zc/f);  
  24.     final_point.x += w/2;  
  25.     final_point.y += h/2;  
  26.       
  27.     return final_point;  
  28. }  
  29.   
  30. int _tmain(int argc, _TCHAR* argv[])  
  31. {  
  32.     cv::Mat imgMat = cv::imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);  
  33.     cv::copyMakeBorder(imgMat, imgMat, 175, 175, 175, 175, cv::BORDER_CONSTANT);    
  34.       
  35.     cv::namedWindow("Original",CV_WINDOW_AUTOSIZE);  
  36.     cv::imshow("Original", imgMat);  
  37.     cv::waitKey(0);  
  38.   
  39.     cv::Mat destImgMat(imgMat.size(), CV_8U);  
  40.   
  41.     for(int y = 0; y < imgMat.rows; y++)  
  42.     {  
  43.         for(int x = 0; x < imgMat.cols; x++)  
  44.         {  
  45.             cv::Point2f current_pos(x,y);  
  46.   
  47.             current_pos = convert_pt(current_pos, imgMat.cols, imgMat.rows);  
  48.   
  49.             cv::Point2i top_left((int)current_pos.x,(int)current_pos.y); //top left because of integer rounding  
  50.   
  51.             //make sure the point is actually inside the original image  
  52.             if(top_left.x < 0 || top_left.x > imgMat.cols-2 || top_left.y < 0 || top_left.y > imgMat.rows-2)  
  53.             {  
  54.                 continue;  
  55.             }  
  56.   
  57.             //bilinear interpolation  
  58.             float dx = current_pos.x-top_left.x;  
  59.             float dy = current_pos.y-top_left.y;  
  60.   
  61.             float weight_tl = (1.0 - dx) * (1.0 - dy);  
  62.             float weight_tr = (dx)       * (1.0 - dy);  
  63.             float weight_bl = (1.0 - dx) * (dy);  
  64.             float weight_br = (dx)       * (dy);  
  65.   
  66.             uchar value = weight_tl * imgMat.at<uchar>(top_left) +  
  67.             weight_tr * imgMat.at<uchar>(top_left.y,top_left.x+1) +  
  68.             weight_bl * imgMat.at<uchar>(top_left.y+1,top_left.x) +  
  69.             weight_br * imgMat.at<uchar>(top_left.y+1,top_left.x+1);  
  70.   
  71.             destImgMat.at<uchar>(y,x) = value;  
  72.         }  
  73.     }  
  74.       
  75.     cv::namedWindow("Cylindrical",CV_WINDOW_AUTOSIZE);  
  76.     cv::imshow("Cylindrical",destImgMat);  
  77.     cv::waitKey(0);  
  78.       
  79.     cv::imwrite( "cyl_lena.jpg", destImgMat );  
  80.   
  81.     return 0;  
  82. }  

结果:




参考文献:

https://stackoverflow.com/questions/12017790/warp-image-to-appear-in-cylindrical-projection?lq=1




http://chatgpt.dhexx.cn/article/yaJhS7Tr.shtml

相关文章

matlab 柱面投影,图像拼接(不投影到柱面)(渐入渐出融合) matlab程序

1,先拍摄一组图片,比如两幅图:A、B 我直接用网上的两幅图: 2,分别投影到柱面坐标系 就用自己写的柱面投影程序 matlab里 结果: 3,开始配准第一步:SIFT得到匹配对(直接用OpenCV里自带的) 有两三对误匹配对,后来调整阈值得到没有误匹配对的结果。 4,配准第二步:根据匹…

opencv柱面投影,C语言实现

在做全景拼接的时候&#xff0c;为了保持图片中的空间约束与视觉的一致性&#xff0c;需要进行柱面投影&#xff0c;否则离中心图像距离越远的图像拼接后变形越大。 柱面投影公式为 这个是https://blog.csdn.net/zouxin_88/article/details/85167602的代码&#xff0c;rgb彩色…

柱面投影matlab程序

拼接之前要进行柱面、立方体面或者球面投影&#xff0c;《全景拼接的关键技术研究》选的是柱面投影&#xff0c;根据其理论有&#xff1a; %假设相机市场角为45度 %反投影到柱面时左右有缝隙了 Aimread(F:\fisheye\kk.jpg); [H,W,k]size(A); fW/(2*tan(pi/4/2)); %视场角越…

柱面投影、拼接视差、球面投影

1. 图像拼接传统做法: 特征点提取:sift、surf、orb等特征点提取; 基于特征点的配准:RANSAC方法剔除匹配点并拟合图像变换矩阵(全局单应性矩阵); 图像融合:先确定缝合线,再利用加权融合、多频带融合的方法融合; 方法:除了按照上文提到的顺序利用opencv进行拼接,还可以…

opencv柱面投影

在做全景拼接的时候&#xff0c;为了保持图片中的空间约束与视觉的一致性&#xff0c;需要进行柱面投影&#xff0c;否则离中心图像距离越远的图像拼接后变形越大。 柱面投影公式为 变换效果如下&#xff1a; int main() {cv::Mat image1 cv::imread("images/1.jpg"…

图片柱面投影简单实现

转自&#xff1a;https://blog.csdn.net/u010551600/article/details/78461142 柱面投影是图片拼接的前期的一部分工作&#xff0c;以下代码只是简单的实现了投影&#xff0c;还可以优化&#xff0c; 柱面半径设置位图片宽度的一半&#xff0c;即 R width/2 代码运算流程是…

柱面投影

做全景拼接时需要将图像统一到一个视角里&#xff0c;常用的柱面投影&#xff0c;其基本原理及公式如下&#xff08;原文&#xff09;。 【Octave】柱面投影简析 我是分割线 在做全景拼接的时候&#xff0c;为了保持图片中的空间约束与视觉的一致性&#xff0c;需要做一定的预…

图像柱面投影

由于图像序列是实体景物在不同坐标系下的二维投影&#xff0c;直接对拍摄图像进行拼接无法满足视觉一致性&#xff0c;所以需要将待拼接的图像分别投影到一个标准的坐标系下&#xff0c;然后再进行图像的拼接。全景图生成系统可以采用圆柱体、立方体和球体等模型来实现。由于柱…

柱面投影介绍与python实现(一)

简介 本文主要介绍柱面投影变换,将这种变换用于图像处理,可以产生图像扭曲的效果,如下图所示,产生了将平面图像投影到了柱面上的视觉效果。博客最后给出了柱面投影的python实现,供读者参考。 数学原理 如下图所示,矩形GHEF为待处理的原图,投影到柱面上之后则变成了…

【Octave】柱面投影简析

我是分割线 在做全景拼接的时候&#xff0c;为了保持图片中的空间约束与视觉的一致性&#xff0c;需要做一定的预处理&#xff0c;可以是球面投影&#xff0c;柱面投影等。 如果仅仅是做水平方向的拼接&#xff0c;则做柱状投影就好了 一. 原理 把平面图像投影到圆柱的曲面上。…

拖库 洗库 撞库

间接转载地址: http://blog.csdn.net/daliaojie/article/details/42171177 一,背景: 用户数据泄露一直是如今互联网世界的一个焦点,从最近的京东撞库抹黑事件,到之前的CSDN,如家用户数据的泄露,服务商和黑客之间在用户数据这个舞台上一直在进行着旷日持久的攻防战。 对于…

分享一个验证码暴力撞库漏洞的案例

记录一个验证码暴力破解的案例&#xff0c;安全问题不容忽视呀。 某公司接到用户反馈&#xff0c;应用存在安全漏洞&#xff0c;通过技术手段可以在无手机情况下&#xff0c;获取验证码&#xff0c;直接修改密码成功。如果用户密码被他人修改成功&#xff0c;直接涉及到资产损…

深入浅出了解撞库攻击!

1. 撞库的原理和危害 “撞库”&#xff08;Credential Stuffing Attack&#xff09;在网络安全中是一个古老的概念&#xff0c;按中文的字面意思解读&#xff0c;就是“碰撞数据库”的意思。“碰撞”意味着碰运气&#xff0c;即不一定能成功&#xff1b;而“数据库”中往往存储…

使用 Burp Suite 暴力破解密码 撞库攻击 从0到1手摸手教学

说明 一个学习的过程 增加自己网络安全知识 切勿用于违法用途 设置密码尽量使用6位以上并规避简单数字组合、加强对同一ip的频繁访问次数限制、设置人机验证减小撞库攻击的危害 用到的工具&环境 本地环境 kali 2022 Burp Suite FireFox 靶机环境 一台服务器 CentO…

【htpwdScan 是一个HTTP暴力破解、撞库测试工具。】

htpwdScan 1.0 htpwdScan 是一个HTTP暴力破解、撞库测试工具。 安装 要求 python3.6 pip3 install requirements.txt特性 支持常见的认证模式&#xff1a;Basic/Digest/NTLM 等 支持对 GET / POST 参数进行暴力破解&#xff0c;支持使用占位符选定参数或参数的一部分 支持批…

MD5碰撞与撞库和题

MD5 相同的情况叫做“碰撞”&#xff0c;现在网络中已经出现了两个相同的 MD5 可执行文件&#xff0c;所以MD5现在已经被弃用了&#xff0c;发生碰撞的概率是1/&#xff08;2^128&#xff09;。 SHA-1 也会发生碰撞&#xff0c;但是几率比 MD5 小的多。 2004年&#xff0c;我…

拖库 洗库 撞库的概念

一&#xff0c;背景&#xff1a; 用户数据泄露一直是如今互联网世界的一个焦点&#xff0c;从最近的京东撞库抹黑事件&#xff0c;到之前的CSDN&#xff0c;如家用户数据的泄露&#xff0c;服务商和黑客之间在用户数据这个舞台上一直在进行着旷日持久的攻防战。 对于大多数用…

(云安全)拖库-洗库-撞库

一&#xff0c;背景&#xff1a; 用户数据泄露一直是如今互联网世界的一个焦点&#xff0c;从最近的京东撞库抹黑事件&#xff0c;到之前的CSDN&#xff0c;如家用户数据的泄露&#xff0c;服务商和黑客之间在用户数据这个舞台上一直在进行着旷日持久的攻防战。 对于大多数用户…

java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题

感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复。以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题&#xff0c;甚至在一些银行或者电商的登录与查存页面同样存在这个问题&#xff0c;一旦造成撞库无论对用户账号的安全性还是网站的负载都是巨大的挑…

什么是撞库攻击,如何预防撞库攻击?

1. 撞库的原理和危害 “撞库”&#xff08;Credential Stuffing Attack&#xff09;在网络安全中是一个古老的概念&#xff0c;按中文的字面意思解读&#xff0c;就是“碰撞数据库”的意思。“碰撞”意味着碰运气&#xff0c;即不一定能成功&#xff1b;而“数据库”中往往存储…