iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
自我挑戰組

基於人體姿態估測與個人化代償分析之居家復健動作輔助系統系列 第 8

三個人體關鍵點,怎麼算出一個關節角度?

  • 分享至 

  • xImage
  •  

如果想判斷使用者的膝蓋到底彎了多少、手肘有沒有伸直,就需要進一步把這些座標轉換成比較有意義的資訊。

其中最常用的一種,就是:關節角度。
其實計算一個關節角度,只需要三個關鍵點。
例如今天想計算膝蓋的角度,可以取:髖部 → 膝蓋 → 腳踝,這三個點。
其中膝蓋就是角度的中心點。
可以把它想像成從膝蓋分別畫出兩條線:
膝蓋 → 髖部
膝蓋 → 腳踝
接著計算這兩條線形成的夾角,就可以得到目前膝關節大約彎曲到什麼程度。
在程式中,這些「線」其實可以轉換成向量。
假設三個點分別是 A、B、C,而 B 是我們想計算角度的關節,就可以建立:
BA 向量
BC 向量
再透過向量的內積計算兩個向量之間的夾角。
公式大概會是:
θ = arccos((BA · BC) / (|BA| × |BC|))

最後再把結果轉換成我們比較熟悉的角度,例如 90°、120°、170°。
不過實際應用時,還有一個問題。
到底要用 x、y 計算,還是把 z 也放進來?

如果只使用 x、y,算出來的是人體在攝影機畫面上的「2D 角度」。
優點是比較簡單,而且在拍攝方向固定的情況下通常很好使用。
如果加入 x、y、z,則可以進一步計算三維空間中的角度,讓前後方向的變化也被考慮進去。
但因為一般攝影機取得的 z 多半是模型估測的深度資訊,所以目前我的想法還是:

先以穩定的 2D 角度作為主要判斷,再視動作需求加入 z 作為輔助。
例如:
膝蓋彎曲 → 髖、膝、踝
手肘彎曲 → 肩、肘、腕
軀幹傾斜 → 肩膀與髖部的位置關係

這樣原本只是:
「膝蓋在某個 x、y 座標」

就可以慢慢變成:
「目前膝蓋角度是 95°。」
而有了角度之後,下一個真正麻煩的問題也出現了:

95° 到底算正確還是錯誤?
因為每個人的身高、活動度與動作能力都不同,所以實際進行判斷時,可能不能只設定一個固定數字。


上一篇
除了 x、y,人體關鍵點的 z 座標又是什麼?
下一篇
為什麼不能要求每個人都做到一模一樣的角度?
系列文
基於人體姿態估測與個人化代償分析之居家復健動作輔助系統17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言