柱面投影
来源:互联网 发布:php ipv6适配 编辑:程序博客网 时间:2024/05/22 00:24
做全景拼接时需要将图像统一到一个视角里,常用的柱面投影,其基本原理及公式如下(原文)。
【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);
三. 效果
阅读全文
0 0
- 柱面投影
- 柱面投影matlab程序
- 图像的柱面投影纠正
- 图像拼接---图片柱面投影简单实现
- 球面投影 (立体和柱面的投影效果)
- 2D射影儿何和变换——柱面投影,图像拼接柱面投影
- 【Opencv】2D射影儿何和变换——柱面投影,图像拼接柱面投影
- 360度全景拼接之成像模型与柱面投影
- 图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
- 图像拼接(一):柱面投影+模板匹配+渐入渐出融合
- C/C++ 图像处理(8)------图像の柱面投影算法
- 图像拼接(二):柱面投影+模板匹配+渐入渐出融合(GPU版)
- 全景图(二):在Unity3D上实现360°柱面投影
- 投影
- 投影
- 投影
- 投影
- 投影
- JNI DETECTED ERROR IN APPLICATION: cannot assign object of type 'xxxxx'
- 设计模式【建造者模式Builder Pattern】
- 电影网站增删改查-6 spring boots/MVC/neo4j/thymeleaf 源码分析 电影删除
- Centos安装Proxychains实现linux全局代理
- Android Studio自动提取控件Style样式
- 柱面投影
- STM32F103_USART_GPIO配置及相应的IO口设置
- CSS 可见性 display overflow visibility
- 使用Spring Boot开发Web项目
- C++ MFC / VS2013 edit control 编辑框 逐行显示 txt ,显示多行,底部更新
- ios通知的一个简单实现
- mui -- 选项卡切换+上拉加载
- 实验报告三:内部模块化的命令行菜单小程序V2.0
- 放物品