【CV】相机标定时各种参数干什么用的?!

本文高度致敬张正友的文章《A Flexible New Technique forCamera Calibration》,同时介绍如何在 OpenCV 中实现其方法。虽然看不懂原理,不过东拼西凑姑且能弄出个能用的纯过程代码,放在这里供大伙看个乐。

Read More

Share

【CMake】依赖包调用一瞥

花了一天,终于把 IK 系列连接在了一起,这一波硬读代码,属实有些影响生活了!

本文将列出几个载入外部包的方法,代码已同步至 timrockefeller/IKCMake

Read More

Share

观逆向:还是得学会汇编

前几日和朋友聊起各式音游,对解包产生了很大兴趣。当然也被科普了各种防逆向知识,由此想罗列一番做个随笔。

JAVA: class loader 热加载

加壳的目的无非两种:压缩或加密。类似于 Minecraft Forge,在运行时中将所需要的字节码转入内存中,这种方式能很好地隐藏 OEP。

而对策便是直接替换class loader,将写入内存的部分输出到文件中,便能获取到所有运行时源码。

字节码按规律修改

在《Project SEIKAI》中,游戏资源被一种特殊的方式所加密。其步骤为:开头128个字节每8个字节的前5个字节二进制取反。这种方法可谓异常简单,只需对比一遍原生 Unity 未加密的资源包二进制文件就能找出规律。

refer: 解包PJS资源的进一步探索, 黑鲸.

CPU级加壳

这种方式是将在指令头做一个映射,修改译码过程。这种方式可能连操作系统都不一定能捕捉到。

卷尾

加壳的方式非常之多,还有 int3 陷阱等不再赘述。我也推荐他试着逆向原神,不过难度确实很大,据我所知成功的也仅寥寥几人。日厂手游开发中 Unity 使用率越来越高,这也导致了很多 Unity 上的安全问题能在各种产品中重现。而回忆当年《Love Live!》用的自家引擎,也算是一种原始的加壳方式吧。

Share

【熟肉】无人机相机采集图像序列的快速三维重建

原文标题:Rapid 3D Reconstruction for Image Sequence Acquired from UAV Camera

首发于:MDPI

Yufu Qu *, Jianyu Huang and Xuan Zhang
Department of Measurement Technology & Instrument, School of Instrumentation Science & Optoelectronics
Engineering, Beihang University, Beijing 100191, China; Hjy448@buaa.edu.cn (J.H.);
zhangxuanaj@buaa.edu.cn (X.Z.)

Correspondence: qyf@buaa.eud.cn; Tel.: +86-010-8231-7336
Received: 23 November 2017; Accepted: 11 January 2018; Published: 14 January 2018

摘要

1
In order to reconstruct three-dimensional (3D) structures from an image sequence captured by unmanned aerial vehicles’ camera (UAVs) and improve the processing speed, we propose a rapid 3D reconstruction method that is based on an image queue, considering the continuity and relevance of UAV camera images.

为了加快无人机相机采集图像三维重建过程,我们提出了一种基于图像序列相关度的快速重建方法。

1
The proposed approach first compresses the feature points of each image into three principal component points by using the principal component analysis method. In order to select the key images suitable for 3D reconstruction, the principal component points are used to estimate the interrelationships between images.

该方法首先利用主成分分析法(Principal Components Analysis, PCA)将每幅图像的特征点压缩为 3 个主成分点。利用主成分点估计图像之间的相互关系,可以为选择适合三维重建的关键帧提供依据。

1
Second, these key images are inserted into a fixed-length image queue. The positions and orientations of the images are calculated, and the 3D coordinates of the feature points are estimated using weighted bundle adjustment. With this structural information, the depth maps of these images can be calculated.

其次,将这些关键帧插入到一个固定长度的图像队列中。计算图像的位置和方向,并使用加权束平差(weighted bundle adjustment)估计特征点的三维坐标。利用这些结构信息,可以计算出这些图像的深度图。

1
Next, we update the image queue by deleting some of the old images and inserting some new images into the queue, and a structural calculation of all the images can be performed by repeating the previous steps.

接着通过删除一些旧图像和插入一些新图像来更新图像队列,并重复前面的步骤对所有图像进行结构化计算。

1
Finally, a dense 3D point cloud can be obtained using the depth–map fusion method. The experimental results indicate that when the texture of the images is complex and the number of images exceeds 100, the proposed method can improve the calculation speed by more than a factor of four with almost no loss of precision.

最后利用深度图融合方法得到密集的三维点云。实验结果表明,当图像的纹理复杂且图像数量超过 100 时,该方法可以将计算速度提高 4 倍以上,几乎不损失精度。

1
Furthermore, as the number of images increases, the improvement in the calculation speed will become more noticeable.

此外,随着图像数量的增加,相较原方法计算速度也会明显地提高。

Keywords: UAV camera; multi-view stereo; structure from motion; 3D reconstruction; point cloud

Read More

Share

【西加加】模板虽奇,难如上青天

本文记录了摸模板的心路历程,卖惨自闭随处可见。

Read More

Share

经济与管理 札记

《新编经济与管理教程》一书的笔记,由概念切入,旨于能够在这资本吃人的社会站住一席之地。

Read More

Share

新年新气象

2020 是个好年,除了在家半年的休闲时光,还有浑水摸鱼的刺激生活。灾难与机遇并存的日子里,总是后知后觉地发现自己做了什么该做的、不该做的。而一年到头也麻了不少,趁仍熬的了夜,莽撞几回。

Read More

Share

手撕ECS #2: Archetypes and Vectorization

原文链接:Building an ECS #2: Archetypes and Vectorization

上回说到如何访问 Entity 所拥有的 Components,这一章将会探索如何储存 Component 数据。久闻 ECS 以高性能自称,来看看它到底有何能耐。

Read More

Share

手撕ECS #1: Types, Hierarchies and Prefabs

原文链接:Building an ECS #1: Types, Hierarchies and Prefabs

Entity Index

首先来看几个概念:

  • Entities 是运行时中独一无二的“东西”,通常与一个独一无二的整数标示。
  • Type(或 Archetype)来区分 Entity 所拥有组件列表的异同,通常用一个数组标示。比如一个 FPS 游戏中 Player 对象拥有两个组件,分别是“位置”和“血量”,则它的 Type 就是[Position, Health]

我们可以通过这两个概念来构造 ECS 中最基础的数据结构,即 Entity Index

1
2
3
4
5
using EntityId = uint64_t;
using ComponentId = EntityId;

using Type = std::vector<ComponentId>;
std::unordered_map<EntityId, Type> entityIndex;

通过 EntityId 我们可以很容易获取该 Entity 所拥有的组件列表,那么实现一个 HasComponent 便易如反掌:

1
2
3
4
5
6
7
bool HasComponent(EntityId entity, ComponentId component) {
vector<ComponentId>& type = entityIndex[entity];
for (auto c : type) {
if (c == component) return true;
}
return false;
}

针对 C++ 的特性,在添加组件时可以用模板的形式绑定就再好不过了:

1
2
Player.add<Position>();
Player.add<Health>();

在这两个 add 操作之后,entityIndex 中就应该包含一项绑定 Player[Position, Health] 的数组元素。当然,是以 ComponentId,即 uint64_t 的形式定义的,例如:

1
2
ComponentId Position_id = 1;
ComponentId Health_id = 2;

如此一来,Player 这一 Entity 的 Type 便成了 [1, 2]

Read More

Share

ルフランの地下迷宮と魔女ノ旅団2chまとめwiki Wiki*

ルフランの地下迷宮と魔女ノ旅団 攻略サイト Gametter

ルフランの地下迷宮と魔女ノ旅団 攻略 | RRPG

【含剧透】鲁弗兰的地下迷宫与魔女之旅团 攻略心得

Share