========================我是分割线==========================

在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要做一定的预处理,可以是球面投影,柱面投影等。

如果仅仅是做水平方向的拼接,则做柱状投影就好了

一. 原理

  把平面图像投影到圆柱的曲面上。

  如下图,四边形GHEF表示待处理原图,投影之后,变成曲面JDILCK(黄色点标注)

  

  俯视图如下,DCE为待处理图像平面,FCG为投影所得曲面。

    

      

   设,原图像宽W,高H,角度FOG为相机视场角度α(一般为45°,即PI/4),圆形半径(焦距)f 有tan 1/2α = W / (2 * f), 则有f = W / (2 * tan(α/2))

      依次推算出,目标图像的宽(曲线FCG长)W‘ = f * α, 目标图像高H’不变, H‘ = H

     第一种推算:以图像像素原始坐标计算(即,左上角为原点)

   

     公式如下:

   

   第二种推算:设置图像原点为(W/2, H/2),用以简化计算步骤

  

二. Octave实现

  

I = imread('images/doge.bmp');
[height, width, depth] = size(I);
A = I;
centerX = width / 2;
centerY = height / 2;
% alpha = pi / 4;
f = width / (2 * tan(pi/4/2));
for i = 1 : width,for j = 1 : height,theta = asin((i - centerX) / f);pointX = int32(f * tan((i - centerX) / f) + centerX);pointY = int32((j - centerY) / cos(theta) + centerY);for k = 1 : depth,if pointX >= 1 && pointX <= width && pointY >= 1 && pointY <= height,A(j, i, k) = I(pointY, pointX, k);elseA(j, i, k) = 0;end;end;end;
end;
subplot(1, 2, 1);
imshow(I);
subplot(1, 2, 2);
imshow(A);

Octave & Matlab代码

三. 效果

转载于:https://www.cnblogs.com/cheermyang/p/5431170.html

【Octave】柱面投影简析相关推荐

  1. 小白科研笔记:简析SOTA目标检测算法3D-CVF

    1. 前言 最近KITTI的3D目标检测榜刷出了一个新的Top One双阶段算法3D-CVF.做算法,有时间需要跟紧新的网络架构.所以这篇博客主要分析这篇论文3D-CVF: Generating Jo ...

  2. 360度全景拼接之成像模型与柱面投影

    作者: 青云,qq307942727 根据几何光学,理想透镜的程序模型如下图所示.物点P所成的像点P2可以用两条光线来求得.其中一条经物方焦点F到透镜P1点,然后光线平行于光轴方向沿着像空间转播.另一 ...

  3. Learning with Noisy Correspondence for Cross-modal Matching 文献翻译 代码简析

    Learning with Noisy Correspondence for Cross-modal Matching 基于噪声对应的跨模态匹配学习 Learning with Noisy Corre ...

  4. SIFT特征原理简析(HELU版)

    SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以< ...

  5. 网站建设中最实用的扁平化2.0设计布局简析(干货)

    近年来网站建设迎来了扁平化2.0新时代,这周研究一些扁平化2.0设计师的移动端设计布局形式,整理分析了一些常用的布局形态,有兴趣的朋友们就来了解下吧 常用的移动端设计布局形式:不规则弧线布局.层叠式布 ...

  6. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  7. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  8. 基于libmad库的MP3解码简析

    基于libmad库的MP3解码简析  MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...

  9. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

最新文章

  1. Dell R720上的系统安装问题的解决办法(关于RAID建立磁盘阵列的技术)
  2. ComputeShader中Counter类型的使用
  3. NOIP 2017 d2t2 70points
  4. 怎么样拒绝服务器重新启动?
  5. [CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间
  6. 变频器服务器电路板维修,变频器线路板常见维修方法
  7. java.util.concurrent.RejectedExecutionException
  8. Linux进阶之路————Linux运行级别(重置密码)
  9. foreach 和 map_每个开发人员都应该知道的forEach()和map()之间的差异
  10. Cache【硬盘缓存工具类(包含内存缓存LruCache和磁盘缓存DiskLruCache)】
  11. 34个漂亮的应用程序后台管理界面设计(系列三)
  12. python ctp接口_Python-CTP PyCTP 接口
  13. 88.合并两个有序数组
  14. ns3学习之旅 ---NS3 开篇简介
  15. ABB机器人FOR循环指令
  16. Playful MySQL 2: Transactions and some of its potential problems
  17. Web前端作业:Html+JS实现的图片镜像、黑白、红色、绿色、蓝色及还原
  18. 人工智能是什么?做AI要学什么?
  19. manjaro-i3wm 新装系统没有声音问题解决
  20. 三星android9更快么,三星S9将会成为最快Android手机 有6大要点你必须知道

热门文章

  1. 乱砍设计模式之一 -- STRATEGY 模式
  2. textarea的使用
  3. Burp suite之暴力破解
  4. 关于代码中生成HSSFWorkbook对象,转换成输入流,上传到服务器.下载的xls文件打开报错问题
  5. 高考十周年,为母校疯狂打Call
  6. Windows下Linux子系统的安装与使用 wsl
  7. 键盘上数字键不能用怎么处理
  8. xtrabackup 详解
  9. sql 四舍五入保留两位小数
  10. Jmeter监控服务器性能