【笔记】移植ezSIFT顺手搭建个全景照片合成器
某人最近出去游玩,问我可有工具把多张照片拼接在一起成大图的;答曰,没有;但是可以几小时给写一个出来。以前网上查过,没有好用的直接的拼接全景的js库,要么就是完整的一个网站,我要npm install
多久哦…要么就是port了opencv
,我就要个SIFT匹配算法这也太重了吧,谢谢不用。找到一个独立的C++库可以使用,正好最近有全套的emsdk,port也方便。
照着GNUGO.js的经验,再重复劳动一下:https://github.com/dna2ai/panorama
- ezSIFT的文件很少;所以直接照着它的例子写
ezsiftwrapper.cpp
弄一个开发简单省事的API - 编译
ezsift.js
;就是把几个文件拼凑一起emcc出来就好了,没啥技术 - 写
test.html
要费事一些,因为API是为了API的开发简单,用起来还是有点绕。得到2张图片的pixel级data,然后运行extract feature和match keypoints再dump出来,最后根据这个匹配的列表画出2张图的匹配示意图。只要大家clone github的repo,创个local文件夹放2图片进去,用python或node启动一个简易文件server去浏览器打开就可以看到效果啦。
ezSIFT是移植好了,后面就是做全景匹配算法了。这个等整理好了再上传到github。先简单说一下思路,就是
- 第一阶段:处理平移,算一个2张图的平均位移,比如
(1, 1) -> (2, 2)
,(1, 2) -> (2, 3)
,平均平移就是(1, 1)
;也就是第一张图和第二张图先重合再移动另一个图到平均平移的位置,就基本拼接了。这里当然是基本拼接。因为会有很多误匹配,所以算一次平均,剔除一次匹配点,等所有点的平均平移都合理(很玄乎是吧),匹配成功。 - 第二阶段:计算缩放,这个稍微就有点复杂,其实可以根据匹配点2 2的微比就能稍微算出缩放关系。也可以通过keypoint的scale和ori去估计模型。
- 第三阶段:计算仿射矩阵。这个就麻烦了,现在还懒得去想,但是慢慢去实现吧,让图片拼接更丝滑…
有人问为什么不用机器学习;答,我几个小时就能完成的事情,用机器学习先帮我买个GPU再帮我标定各种案例,这种烧钱烧时间的方法还是让大公司雇人去弄吧。现在的机器学习已经变成了商家赚钱的幌子。虽然GPT-3的模型让人觉得它能写几千亿个if很赞,但是算法上还是存在方向上的问题。
就到这吧,有时间再完整公布所有全景拼接的细节。
Enjoy!
高估了自己的智商,赶紧肯书学习!想全景,慢慢做吧:https://courses.engr.illinois.edu/cs498dwh/fa2010/lectures/Lecture%2017%20-%20Photo%20Stitching.pdf
最少代码案例:https://github.com/kupiakos/image-stitcher/blob/master/stitcher.py
最后完败给了:https://github.com/latsic/imgalign clone, npm install, npm run serve就能用,我在干啥?好好学习去……
fork一份 https://github.com/dna2fork/imgalign 然后干掉google analytics,把workbox-sw去网络就是本地化把storage.googleapis.com换成local的文件形式;opencv.js都已经准备好了,省了很多事;搭建好,可以了,所有平台可用。微信和手机浏览器,第一次加载opencv我的红米note7用了1分钟;后面因为有sw所有几秒就好了。想得到类似照片的平整全景图,打开settings,在image面板把crop max rect点上就好了。其他参数就自己调吧。话说,base on这个site,是不是都可以直接去开发网页版美图秀秀或者photoshop了……
Enjoy!
【笔记】移植ezSIFT顺手搭建个全景照片合成器相关推荐
- Git笔记(18) 搭建服务器Git
Git笔记(18) 搭建服务器Git 1. 创建裸仓库 2. 把裸仓库放到服务器上 3. 克隆仓库 4. 可写权限 5. 小型安装 6. SSH 控制权限 1. 创建裸仓库 在开始架设 Git 服务器 ...
- 视觉SLAM笔记(45) 搭建 VO 框架
视觉SLAM笔记(45) 搭建 VO 框架 1. 确定程序框架 2. 确定基本数据结构 3. Camera 类 4. Frame 类 5. MapPoint 类 6. Map 类 7. Config ...
- Linux学习笔记---移植官方linux步骤(二)
目录 修改网络驱动 修改 LAN8720 的复位 以及网络时钟 引脚驱动 修改fec1和fec2节点pinctrl-0属性 修改LAN8720A的PHY地址 修改 fec_main.c 文件 配置 L ...
- Linux学习笔记---移植官方linux步骤(一)
使用的开发板是正点原子IMX6U-MINI EMMC512M的开发板,这个板子也是移植的NXP官方linux,所以这里就直接从NXP官方的linux移植. 这里所说的移植,其实不是自己编写驱动文件等 ...
- Linux学习笔记---移植官方uboot步骤(二)
在上一篇 Linux学习笔记---移植官方uboot步骤(一) 自己的uboot已经编译成功了,接下来继续移植LCD驱动和网络驱动. 修改LCD驱动 修改配置参数 打开my_uboot/board/f ...
- Linux学习笔记---移植官方uboot步骤(一)
目录 编写shell脚本 修改MakeFile文件 重命名shell脚本 添加默认配置文件 修改默认配置文件 准备需要的板级文件夹 重命名.C文件 修改Makefile 修改imximage.cfg配 ...
- ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VS Code)
Espressif-IDE 环境搭建参看 ESP32学习笔记(50)--搭建环境.编译烧写(Windows+Espressif-IDE) 一.搭建环境 1.1 官方资料 ESP-IDF 编程指南 1. ...
- Ionic 学习笔记之-痛彻心扉的环境搭建
Ionic 学习笔记之-痛彻心扉的环境搭建 最近在学习Ionic 做多平台的应用.跨平台应用.就是用html写的界面.js实现逻辑. 在学ionic之前选了各种跨平台APP开发框架.最后选择了ioni ...
- OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...
最新文章
- 如何用Linux的at命令安排一个任务
- 罗森伯格成功布线中国海关博物馆
- 一个表格中文字怎么换行_Excel表格中怎样快速将阿拉伯数字转化为大写文字?这样操作一键完成...
- java桥接和装饰_设计模式:桥接模式和装饰模式
- SAP CRM One Order跟踪和日志工具CRMD_TRACE_SET
- 链表node中保存的是什么_Redis源码解析一 --链表结构
- 商品库存清单案例java_java实现超市商品库存管理平台
- 测试用例的优先级概念
- FusionCharts图表右键菜单的各种典型示例
- 前端学习之--CSS
- WEB建站规划之建站目的
- paip.FTP服务架设选型
- 敏感词过滤算法DFA
- 0055-空气质量检测
- arcgis 空间交集 计算_基于ArcGIS的GIS缓冲区与叠加分析的综合应用——以大型商场选址为例...
- UG NX 12 点集
- 【数据挖掘】鸢尾花分析实验与数据降维
- 【考研加油】所有上岸的考研人都有一个共同的特点,就是他们都参加考试了。2023考研加油。
- JavaScript中的name和classname有什么区别
- TreeSizeFree磁盘文件管理工具
热门文章
- matplotlib解决中文乱码问题
- 传感器工作原理以及传感器种类详解
- java调用应用程序_java调用第三方应用程序
- Handler中MessageQueue的enqueueMessage笔记
- 常见html5营销类型有哪些,o2o模式的主要类型有哪些
- Java 9版本之后Base64Encoder和Base64Decoder无法继续使用解决办法
- M1的Xcode运行旧项目报“building for iOS Simulator, but linking in object file built for iOS, for architectur
- oracle字段类型大全,Oracle内置数据类型总结大全
- leetcode链表之反转链表
- 怎么下载不能下载的东西