【Octave】柱面投影简析
========================我是分割线==========================
在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要做一定的预处理,可以是球面投影,柱面投影等。
如果仅仅是做水平方向的拼接,则做柱状投影就好了
一. 原理
把平面图像投影到圆柱的曲面上。
如下图,四边形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】柱面投影简析相关推荐
- 小白科研笔记:简析SOTA目标检测算法3D-CVF
1. 前言 最近KITTI的3D目标检测榜刷出了一个新的Top One双阶段算法3D-CVF.做算法,有时间需要跟紧新的网络架构.所以这篇博客主要分析这篇论文3D-CVF: Generating Jo ...
- 360度全景拼接之成像模型与柱面投影
作者: 青云,qq307942727 根据几何光学,理想透镜的程序模型如下图所示.物点P所成的像点P2可以用两条光线来求得.其中一条经物方焦点F到透镜P1点,然后光线平行于光轴方向沿着像空间转播.另一 ...
- Learning with Noisy Correspondence for Cross-modal Matching 文献翻译 代码简析
Learning with Noisy Correspondence for Cross-modal Matching 基于噪声对应的跨模态匹配学习 Learning with Noisy Corre ...
- SIFT特征原理简析(HELU版)
SIFT(Scale-Invariant Feature Transform)是一种具有尺度不变性和光照不变性的特征描述子,也同时是一套特征提取的理论,首次由D. G. Lowe于2004年以< ...
- 网站建设中最实用的扁平化2.0设计布局简析(干货)
近年来网站建设迎来了扁平化2.0新时代,这周研究一些扁平化2.0设计师的移动端设计布局形式,整理分析了一些常用的布局形态,有兴趣的朋友们就来了解下吧 常用的移动端设计布局形式:不规则弧线布局.层叠式布 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 简析平衡树(三)——浅谈Splay
前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...
- 基于libmad库的MP3解码简析
基于libmad库的MP3解码简析 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
最新文章
- Dell R720上的系统安装问题的解决办法(关于RAID建立磁盘阵列的技术)
- ComputeShader中Counter类型的使用
- NOIP 2017 d2t2 70points
- 怎么样拒绝服务器重新启动?
- [CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间
- 变频器服务器电路板维修,变频器线路板常见维修方法
- java.util.concurrent.RejectedExecutionException
- Linux进阶之路————Linux运行级别(重置密码)
- foreach 和 map_每个开发人员都应该知道的forEach()和map()之间的差异
- Cache【硬盘缓存工具类(包含内存缓存LruCache和磁盘缓存DiskLruCache)】
- 34个漂亮的应用程序后台管理界面设计(系列三)
- python ctp接口_Python-CTP PyCTP 接口
- 88.合并两个有序数组
- ns3学习之旅 ---NS3 开篇简介
- ABB机器人FOR循环指令
- Playful MySQL 2: Transactions and some of its potential problems
- Web前端作业:Html+JS实现的图片镜像、黑白、红色、绿色、蓝色及还原
- 人工智能是什么?做AI要学什么?
- manjaro-i3wm 新装系统没有声音问题解决
- 三星android9更快么,三星S9将会成为最快Android手机 有6大要点你必须知道