代码编织梦想

定义

T = { t k } k = 1 K T=\{t_k\}^K_{k=1} T={tk}k=1K:静止姿态下的关节点坐标。
R = { R p a ( k ) , k } k = 1 K R=\{R_{pa(k), k}\}_{k=1}^K R={Rpa(k),k}k=1K:相对旋转。
Q = { q k } k = 1 K Q=\{q_k\}^K_{k=1} Q={qk}k=1K:根据输入的相对旋转,FK计算出的关节点坐标。
K K K: 关节点数目。
p a ( k ) pa(k) pa(k):第k个节点的父节点。
R p a ( k ) , k R_{pa(k), k} Rpa(k),k:第k个节点关于其父节点的相对旋转。

前向动力学

q k = R k ( t k − t p a ( k ) ) + q p a ( k ) (1) q_k = R_k(t_k - t_{pa(k)}) + q_{pa(k)} \tag{1} qk=Rk(tktpa(k))+qpa(k)(1)

R k = R p a ( k ) R p a ( k ) , k (2) R_k=R_{pa(k)}R_{pa(k),k} \tag{2} Rk=Rpa(k)Rpa(k),k(2)

R k ∈ S O ( 3 ) R_k\in SO(3) RkSO(3):第k个节点关于标注静止姿态空间的全局旋转。

反向动力学

IK是FK的逆过程,输入静止姿态 T T T和目标姿态 P P P, 计算相对旋转矩阵 R R R
R = I K ( P , T ) (3) R = IK(P, T) \tag{3} R=IK(P,T)(3)
理想情况下,求得的旋转矩阵需要满足如下条件:
p k − p p a ( k ) = R k ( t k − t p a ( k ) ) ∀ 1 ≤ k ≤ K (4) p_k - p_{pa(k)} = R_k(t_k - t_{pa(k)}) \quad \forall 1 \leq k \leq K \tag{4} pkppa(k)=Rk(tktpa(k))1kK(4)
FK问题是适定的,IK问题却是病态的,要么无解,要么可能存在许多解可以目前上述条件。

运动学树

在这里插入图片描述

Naive HybrIK

类似FK过程,IK过程可以沿着运动学树迭代进行。
首先,我们要确定根节点的全局旋转 R 0 R_0 R0,可以通过spine, left hip, right hip这三个点的位置和SVD分解求得闭式解。
之后的每一步,以第k步为例,我们假设其父节点 R p a ( k ) R_{pa(k)} Rpa(k)的旋转已知, 根据公式(1)和(2)可得:
R p a ( k ) − 1 ( p k − p p a ( k ) ) = R p a ( k ) , k ( t k − t p a ( k ) ) (5) R^{-1}_{pa(k)}(p_k - p_{pa(k)}) = R_{pa(k),k}(t_k - t_{pa(k)}) \tag{5} Rpa(k)1(pkppa(k))=Rpa(k),k(tktpa(k))(5)

p k ⃗ = R p a ( k ) − 1 ( p k − p p a ( k ) ) t k ⃗ = t k − t p a ( k ) \begin{aligned} \vec{p_k} &= R^{-1}_{pa(k)}(p_k - p_{pa(k)}) \\ \vec{t_k} &= t_k - t_{pa(k)} \end{aligned} pk tk =Rpa(k)1(pkppa(k))=tktpa(k)

可以通过下式计算相对旋转:
R p a ( k ) , k = D ( p k ⃗ , t k ⃗ , ϕ k ) R_{pa(k), k} = D(\vec{p_k}, \vec{t_k}, \phi_k) Rpa(k),k=D(pk ,tk ,ϕk)
ϕ k \phi_k ϕk是网络预测出的第k个节点的twist角。twist角的集合表示为 Φ = { ϕ k } k = 1 K \Phi=\{\phi_k\}_{k=1}^K Φ={ϕk}k=1K,因为旋转矩阵是正交阵,因此 R p a ( k ) − 1 = R p a ( k ) T R^{-1}_{pa(k)}=R^{T}_{pa(k)} Rpa(k)1=Rpa(k)T,使得解算过程可微。
完整的算法流程如下:
输入:Q, T, Φ \Phi Φ
输出:R
第一步先确定根节点0的全局旋转,再沿着运动学树进行下述迭代处理
p k ⃗ ← R p a ( k ) − 1 ( p k − p p a ( k ) ) t k ⃗ ← t k − t p a ( k ) R p a ( k ) , k s w ← D s w ( p k ⃗ , t k ⃗ ) R p a ( k ) , k t w ← D t w ( p k ⃗ , ϕ k ⃗ ) R p a ( k ) , k ← R p a ( k ) , k s w R p a ( k ) , k t w \begin{aligned} \vec{p_k} &\leftarrow R^{-1}_{pa(k)}(p_k - p_{pa(k)}) \\ \vec{t_k} & \leftarrow t_k - t_{pa(k)} \\ R^{sw}_{pa(k), k} & \leftarrow D^{sw}(\vec{p_k}, \vec{t_k} ) \\ R^{tw}_{pa(k), k} & \leftarrow D^{tw}(\vec{p_k}, \vec{\phi_k} ) \\ R_{pa(k),k} & \leftarrow R^{sw}_{pa(k), k}R^{tw}_{pa(k), k} \end{aligned} pk tk Rpa(k),kswRpa(k),ktwRpa(k),kRpa(k)1(pkppa(k))tktpa(k)Dsw(pk ,tk )Dtw(pk ,ϕk )Rpa(k),kswRpa(k),ktw

R s w = D s w ( p ⃗ , t ⃗ ) = I + s i n α [ n ⃗ ] × + ( 1 − c o s α ) [ n ⃗ ] × 2 R^{sw} = D^{sw}(\vec{p}, \vec{t}) = I + sin\alpha[\vec{n}]_{\times} + (1 - cos\alpha)[\vec{n}]_{\times}^2 Rsw=Dsw(p ,t )=I+sinα[n ]×+(1cosα)[n ]×2

R t w = D t w ( p ⃗ , ϕ ) = I + s i n ϕ ∣ ∣ t ⃗ ∣ ∣ [ n ⃗ ] × + ( 1 − c o s ϕ ) ∣ ∣ t ⃗ ∣ ∣ 2 [ n ⃗ ] × 2 R^{tw} = D^{tw}(\vec{p}, \phi) = I + \frac{sin\phi}{||\vec{t}||}[\vec{n}]_{\times} + \frac{(1 - cos\phi)}{||\vec{t}||^2}[\vec{n}]_{\times}^2 Rtw=Dtw(p ,ϕ)=I+t sinϕ[n ]×+t 2(1cosϕ)[n ]×2
n ⃗ = t ⃗ × p ⃗ ∣ ∣ t ⃗ × p ⃗ ∣ ∣ \vec{n} = \frac{\vec{t}\times\vec{p}} {||\vec{t} \times \vec{p}||} n =t ×p t ×p
[ t ⃗ ] × [\vec{t}]_{\times} [t ]× t ⃗ \vec{t} t 的对称矩阵。

在这里插入图片描述

Adaptive HybrIK

Naive HybrIK过程看着是有效的,它遵循了 ∣ ∣ q k − q p a ( k ) ∣ ∣ = ∣ ∣ t k − t p a ( k ) ∣ ∣ ||q_k - q_{pa(k)}||=||t_k - t_{pa(k)}|| qkqpa(k)=tktpa(k)这个假设。
但不幸的是,3D关键点估计方法的预测结果,并不总是能和静止姿态模板一致。如果使用Naive HybrIK的方式,这个误差会沿着运动学树一直累计。
在这里插入图片描述

q p a ( k ) ← R p a ( k ) ( t p a ( k ) − t p a 2 ( k ) ) + q p a 2 ( k ) p k ⃗ ← R p a ( k ) − 1 ( p k − q p a ( k ) ) t k ⃗ ← t k − t p a ( k ) R p a ( k ) , k s w ← D s w ( p k ⃗ , t k ⃗ ) R p a ( k ) , k t w ← D t w ( p k ⃗ , ϕ k ⃗ ) R p a ( k ) , k ← R p a ( k ) , k s w R p a ( k ) , k t w \begin{aligned} q_{pa(k)} &\leftarrow R_{pa(k)}(t_{pa(k)} - t_{pa^2(k)}) + q_{pa^2(k)} \\ \vec{p_k} &\leftarrow R^{-1}_{pa(k)}(p_k - q_{pa(k)}) \\ \vec{t_k} & \leftarrow t_k - t_{pa(k)} \\ R^{sw}_{pa(k), k} & \leftarrow D^{sw}(\vec{p_k}, \vec{t_k} ) \\ R^{tw}_{pa(k), k} & \leftarrow D^{tw}(\vec{p_k}, \vec{\phi_k} ) \\ R_{pa(k),k} & \leftarrow R^{sw}_{pa(k), k}R^{tw}_{pa(k), k} \end{aligned} qpa(k)pk tk Rpa(k),kswRpa(k),ktwRpa(k),kRpa(k)(tpa(k)tpa2(k))+qpa2(k)Rpa(k)1(pkqpa(k))tktpa(k)Dsw(pk ,tk )Dtw(pk ,ϕk )Rpa(k),kswRpa(k),ktw

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011994454/article/details/127992732

hevc支持苹果hls的几个关键问题_livevideostack_的博客-爱代码爱编程

尽管HEVC面临了一些棘手的状况,AV1和国产AVS2连续发起攻势,苹果加入AV1背后的AOM联盟,AVS2发布了开源版xAVS2......但在苹果的封闭系统内,HEVC+HLS仍然是当下最佳的音视频方案。Jan Ozer撰文对HEVC在苹果设备上支持实现进行了解读,LiveVideoStack对本文进行了摘译,点击『阅读原文』访

视频API的发展方向-爱代码爱编程

本文来自Mux流媒体专家Phil Cluff 在LiveVideoStackCon 上海站的精彩分享。在此我们会研究视频API过去十年来的启发以及时间线,从Real Player、Adobe Flash、RTMP、FLV 直到DASH,并且如何将其集成到视频流平台中。另外,Phil将视频API的定义分解为编码API和视频平台API、API结

HDR技术趋势浅析-爱代码爱编程

HDR 年终盘点 #008# 1. HDR视频技术简介 1.1 HDR技术概述 在5G+AI的大时代背景下,超高清(UHD)视频将取得更快的发展,不单是在传统的广播电视领域,而且在互联网视频、OTT领域也会有越来越多应用上线。超高清视频不仅在分辨率、帧率上有提升,更重要的是体现在高动态范围(HDR)和宽色域(WCG)上。与传统的SDR视频相

3d人体姿态估计(介绍及论文归纳)_daoboker的博客-爱代码爱编程

3D人体姿态估计(介绍及论文归纳) 基本概念姿态估计难点人体结构化特性2D 姿态估计 任务挑战3D 姿态估计 问题挑战应用方法数据集 类型可用信息姿态数据集 PoseTrackCrowdPoseHuman3.6MDensePoseCOCOMPIIFLICLSPRGB数据集 Leeds Sports Pose (LSP) Dat

云转码源码(视频云转码)双码率+秒切_kebofeir的博客-爱代码爱编程

  我们之前讨论过一种解决方案是利用云服务的力量对视频进行转码。虽然可以使用本地计算进行转码,但过去三年生成的大量内容——以及大部分内容是以 4K 格式获取的事实——使得云转码成为一个更具吸引力的主张(即使点播流媒体内容以接近 720p 或 1080p 的数据速率和分辨率通过网络交付)。      源码演示:y.jcedus.top      部分源码:m

dfs - 常见算法题总结_想当开心果哦的博客-爱代码爱编程

DFS 深度优先搜索( Depth First Search): 一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回

leetcode刷题day4----------------链表_hoooooope!的博客-爱代码爱编程

Leetcode刷题Day4----------------链表 1. 两两交换链表中的节点(24) 题目链接/文章讲解/视频讲解: https://programmercarl.com/0024.%E4%B8%A4%E

11.20二叉树基础题型_小白孙在路上的博客-爱代码爱编程

一.二叉树的存储 1.存储结构 存储结构:顺序存储或者是类似于链表的链式存储 二叉树的链式存储是通过一个一个的节点引用起来的,常见的表示方式有二叉和三叉表示方式 // 孩子表示法 class Node { int val; // 数据域 Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树 Node right; /

代码随想录刷题|leetcode 343. 整数拆分 96.不同的二叉搜索树_symdunstaz的博客-爱代码爱编程

目录 343. 整数拆分 思路 整数拆分 96.不同的二叉搜索树 思路 不同的二叉搜索树 343. 整数拆分 题目链接:力扣 思路         动态规划的题目虽然说是要先确定dp数组的含义,再确定递归公式,但是总感觉这两者是相辅相成的,是一起出来的,但是到此,dp数组代表的都是我们要求取

go基础学习【2】_小波(学习版)的博客-爱代码爱编程

文章目录 一:数组二:map集合三:包四:结构体 一:数组 1.命名 var arrAge = [5]int{1,2,3,4,5} var arrAge =[…]int{1,2,4,5,6} var ar

416. 分割等和子集【01背包、动态规划dp】_lizhuolong1的博客-爱代码爱编程

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums = [1,5,11,5] 输出:true 解释

叮咚~你订阅的 openmmlab 3 月月刊已送达-爱代码爱编程

让大家久等啦,OpenMMLab 3 月月刊已新鲜出炉! 首先和大家分享 3 月的贡献之星和活跃之星。 贡献之星 个人主页: https://github.com/ailingzengzzz 个人主页: https://github.com/zhanggefan 活跃之星 星星说

cvpr2021论文列表(中英对照)_stylemix: separating content and style for enhance-爱代码爱编程

Scale-Localized Abstract Reasoning 尺度本地化抽象推理 How Does Topology Influence Gradient Propagation and Model Performa

【jvm学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明_jvm老年代什么时候回收-爱代码爱编程

目录 一、相关名词解释垃圾收集常用名词 二、哪些地方需要回收本地方法栈、虚拟机栈、程序计数器方法区Java堆 三、什么时候回收1. 内存能否被回收内存中的引用类型引用计数算法

java多线程并发(一):线程的创建_java创建多线程并发-爱代码爱编程

JAVA多线程并发——创建线程 第一章:线程的创建与实现 文章目录 JAVA多线程并发——创建线程一、继承Thread类二、实现runnable接口三、简单匿名内部类写法四、实现Callable接口五、

spring in action 8.1 使用spring web flow-爱代码爱编程

一、说明 Spring Web Flow是spring MVC的扩展,它支持基于流程的应用程序,他将流程的定义和实现流程行为的类和视图分离开来。 1.1 spring中配置web flow,目前需要在xml中对其进行配置,首先需要加载名称空间 1.2 装配流程执行器 flow executor <flow:flow-executor id="

机器学习参数|数学建模|自相关性_一阶自相关-爱代码爱编程

目录 1.定义和影响 1.1自相关性产生的原因 1.2自相关的后果 2.减小影响方法 2.1如何判断数据存在自相关性 a.用相关计量软件 b.Durbin-Watson Statistics(德宾-瓦特逊检验) c.Q-Statistics 以(box-pierce)- Eviews(7th version第七版本)为例子 2.2如何