flowchart LR
Q["1. คำถาม<br/>อยากรู้อะไร"] --> P["2. เลือกจุด/มุม<br/>ที่ตอบคำถาม"]
P --> C["3. ตรวจคุณภาพ<br/>visibility, ช่องว่าง"]
C --> M["4. คำนวณ<br/>มุม ROM ความสมมาตร"]
M --> I["5. ตีความ<br/>เทียบค่าอ้างอิง<br/>บอกข้อจำกัด"]
อ่านและตีความข้อมูลท่าทาง
จากตารางพิกัด สู่ตัวเลขที่บอกบางอย่างเกี่ยวกับการเคลื่อนไหว
ไฟล์ CSV หนึ่งไฟล์มีหลายร้อยแถวและหลายสิบคอลัมน์ ถ้าเริ่มจากการพล็อตทุกอย่าง จะหลงทาง ให้เริ่มจากคำถาม แล้วเลือกเฉพาะข้อมูลที่ตอบคำถามนั้น
โครงสร้างไฟล์ CSV
# toolkit=movement-science-toolkit; type=pose; version=1
# source=video-file; file=IMG_0412.MOV; device=iPad Safari; width=1920; height=1080; sample_fps=30; ...
# model=pose_landmarker_lite; delegate=GPU; library=tasks-vision 0.10.35
# exercise=chair_stand; view=sagittal_left; subject=S01; note=เก้าอี้สูง 45 cm
# created=...; coords=x_y_pixels_origin_top_left_y_down; ...
frame,time_s,t_ms,detected,nose_x,nose_y,nose_z,nose_vis,left_shoulder_x,...
0,0.0000,,1,1012.4,301.8,-0.4120,0.998,1040.2,402.7,...- บรรทัดที่ขึ้นต้นด้วย
#คือข้อมูลประกอบ บอกว่าถ่ายท่าอะไร มุมไหน ภาพขนาดเท่าไร - แถวถัดมาคือหัวตาราง แล้วตามด้วยข้อมูล 1 แถวต่อ 1 เฟรม
| คอลัมน์ | ความหมาย | หน่วย |
|---|---|---|
frame |
ลำดับเฟรม | – |
time_s |
เวลานับจากเริ่มบันทึก | วินาที |
t_ms |
เวลานาฬิกาของเครื่อง (เฉพาะกล้องสด ใช้ซิงก์กับอุปกรณ์อื่นในหัวข้อ 3) | มิลลิวินาที |
detected |
1 = พบคน, 0 = ไม่พบ (ค่าอื่นในแถวจะว่าง) | – |
<จุด>_x, <จุด>_y |
ตำแหน่งในภาพ จุดกำเนิดมุมซ้ายบน y เพิ่มเมื่อลงล่าง | พิกเซล |
<จุด>_z |
ความลึกสัมพัทธ์ (ไม่แนะนำให้ใช้) | – |
<จุด>_vis |
visibility ความมั่นใจว่ามองเห็นจุดนั้น | 0–1 |
<จุด>_wx, _wy, _wz |
พิกัดโลก 3 มิติ จุดกำเนิดกึ่งกลางสะโพก | เมตร |
<ข้อต่อ>_angle |
มุมภายในของข้อต่อในระนาบภาพ (เหยียดตรง ≈ 180°) | องศา |
เปิดใน Excel
- ดับเบิลคลิกไฟล์ หรือใช้ Data → From Text/CSV
- ลบแถว
#ด้านบนออก (หรือเลือกตั้งแต่แถวหัวตารางลงไป) - คลิกในตาราง กด Ctrl+T แล้วติ๊ก My table has headers เพื่อสร้าง Excel Table จะเขียนสูตรด้วยชื่อคอลัมน์ได้ เช่น
[@left_knee_angle] - ซ่อนคอลัมน์ที่ไม่ใช้ เหลือ
time_s,detectedและจุดที่สนใจ
ขั้นที่ 1: จากคำถามสู่จุดที่สนใจ
| คำถาม (ตัวอย่างจากงานที่ผ่านมา) | มุมกล้อง | ข้อมูลที่ใช้ |
|---|---|---|
| ลุก–นั่งแล้วเข่าซ้ายกับขวางอได้เท่ากันไหม | ด้านข้าง ถ่ายทีละข้าง | left_knee_angle, right_knee_angle และ left_hip_angle, right_hip_angle |
| ทำ bicep curl แล้วศอกเคลื่อนได้ครบช่วงไหม มีการเหวี่ยงไหล่ไหม | ด้านข้าง | *_elbow_angle (ช่วงการเคลื่อนไหว) และ *_shoulder_angle (ควรเปลี่ยนน้อย) |
| ยกแขนด้านหน้าซ้าย–ขวาสมมาตรไหม | ด้านหน้า หรือด้านข้างทีละข้าง | *_shoulder_angle, ความสูงข้อมือเทียบไหล่ |
| clean & jerk ข้อมือสองข้างสูงเท่ากันไหม | ด้านหน้า | left_wrist_y − right_wrist_y |
| squat แล้วลำตัวเอนไปหน้ามากแค่ไหน | ด้านข้าง | มุมลำตัวเทียบแนวดิ่ง (ไหล่–สะโพก) |
| squat แล้วเข่าบิดเข้าด้านใน (valgus) ไหม | ด้านหน้า | ตำแหน่ง x ของเข่าเทียบสะโพกและข้อเท้า |
ค่า left_shoulder_y อย่างเดียวบอกได้น้อยมาก เพราะเปลี่ยนตามความสูงของกล้อง ระยะห่าง และการขยับทั้งตัว ให้ใช้ความสัมพันธ์ระหว่างจุด เช่น มุมข้อต่อ (สามจุด) หรือตำแหน่งข้อมือเทียบกับไหล่
ขั้นที่ 2: ตรวจคุณภาพข้อมูล
ก่อนคำนวณ ให้ตรวจสามอย่าง
- visibility ของทุกจุดที่ใช้ ควร ≥ 0.7 เกือบตลอด ถ้าซีกหนึ่งต่ำ (เช่น ถ่ายด้านข้างแล้วซีกไกลถูกบัง) อย่าใช้ซีกนั้น แม้ค่าพิกัดจะดูมีตัวเลข
- ช่องว่าง แถวที่
detected = 0ไม่มีข้อมูล ให้กราฟเว้นช่วงนั้น (ใช้NA()ในสูตร) - พล็อตดิบก่อน สร้างกราฟ Scatter with Lines ระหว่าง
time_sกับค่าที่สนใจ ดูว่ารูปร่างตรงกับสิ่งที่เห็นในวิดีโอไหม เช่น ลุก–นั่ง 5 รอบควรเห็นคลื่น 5 ลูก
ขั้นที่ 3: มุมข้อต่อ
คำนวณอย่างไร
มุมที่จุด B ระหว่างเวกเตอร์ \mathbf{u} = A - B และ \mathbf{v} = C - B
\theta = \left|\operatorname{atan2}\left(u_x v_y - u_y v_x,\; u_x v_x + u_y v_y\right)\right|
ส่วนบนคือ cross product (บอกขนาดของ sin θ) ส่วนล่างคือ dot product (บอกขนาดของ cos θ) การใช้ atan2 ให้ผลแม่นทุกช่วงมุม ได้ค่า 0°–180°
เครื่องมือคำนวณให้แล้วในคอลัมน์ *_angle แต่ควรลองคำนวณเองหนึ่งครั้งเพื่อเข้าใจ (และตรวจสอบได้) สูตร Excel สำหรับมุมเข่าซ้าย
=IF([@detected]=0, NA(),
LET(ux, [@left_hip_x]-[@left_knee_x], uy, [@left_hip_y]-[@left_knee_y],
vx, [@left_ankle_x]-[@left_knee_x], vy, [@left_ankle_y]-[@left_knee_y],
DEGREES(ABS(ATAN2(ux*vx + uy*vy, ux*vy - uy*vx)))))Excel เขียนเป็น ATAN2(x, y) (ตัวล่างก่อน) จึงใส่ dot product ก่อน cross product ซึ่งต่างจากภาษาโปรแกรมส่วนใหญ่ที่เป็น atan2(y, x) ส่วน LET ใช้ได้ใน Excel 2021 และ Microsoft 365
มุมที่ได้ vs มุมทางคลินิก
มุมในไฟล์คือมุมภายใน (เหยียดตรง ≈ 180°) ส่วนทางคลินิกมักรายงานมุมงอ (เหยียดตรง = 0°)
| ข้อต่อ | สามจุดที่ใช้ | แปลงเป็นค่าทางคลินิก | ค่าอ้างอิง ROM โดยประมาณ* |
|---|---|---|---|
| ศอก | ไหล่–ศอก–ข้อมือ | งอศอก = 180° − มุม | งอ 0–150° |
| เข่า | สะโพก–เข่า–ข้อเท้า | งอเข่า = 180° − มุม | งอ 0–135° |
| สะโพก | ไหล่–สะโพก–เข่า | งอสะโพก ≈ 180° − มุม (อ้างอิงลำตัว ไม่ใช่เชิงกราน) | งอ 0–120° |
| ไหล่ | สะโพก–ไหล่–ศอก | ยกแขน ≈ มุม (แขนแนบลำตัว ≈ 0°) | ยกแขนด้านหน้า/ข้าง 0–180° |
* ค่า ROM ปกติแบบ active ที่อ้างอิงกันทั่วไป (เช่น AAOS) ใช้เพื่อเทียบความใหญ่ของตัวเลขเท่านั้น ท่าใช้งานจริงใช้ ROM น้อยกว่านี้ เช่น ลุก–นั่งจากเก้าอี้ใช้งอเข่าราว 90–100° และค่าจากกล้องไม่เท่ากับค่าที่วัดด้วย goniometer
มุมของส่วนร่างกายเทียบแนวดิ่ง
บางคำถามต้องการมุมของส่วนเดียว เช่น ลำตัวเอนไปหน้าเท่าไร ใช้สองจุดเทียบกับแนวดิ่ง (ระวัง y เพิ่มเมื่อลงล่าง)
มุมลำตัวจากแนวดิ่ง = DEGREES(ATAN2([@left_hip_y]-[@left_shoulder_y], [@left_shoulder_x]-[@left_hip_x]))ได้ 0° เมื่อลำตัวตั้งตรง ค่าเป็นบวกเมื่อไหล่อยู่ทาง +x ของสะโพก (ทิศหน้า–หลังขึ้นกับว่าผู้ถูกวัดหันไปทางไหนในภาพ)
ขั้นที่ 4: จากกราฟสู่ตัวชี้วัด
ลดสัญญาณสั่นก่อนหาค่าสูงสุด–ต่ำสุด
ค่ามุมจะสั่นเล็กน้อยแม้ผู้ถูกวัดนิ่ง ถ้าหาค่าสูงสุดจากข้อมูลดิบจะได้ค่าที่สูงเกินจริง ใช้ค่าเฉลี่ยเคลื่อนที่ 5 เฟรม (ที่ 30 เฟรม/วินาที คือช่วงประมาณ 0.17 วินาที)
=AGGREGATE(1, 6, X2:X6) ← ใส่ในแถวที่ 4 (กึ่งกลางของ 5 แถว) แล้วลากลงAGGREGATE(1, 6, ...) คือค่าเฉลี่ยที่ข้ามช่องที่เป็น error (#N/A) พล็อตเทียบกับค่าดิบดูว่าเรียบขึ้นแต่ยังคงรูปร่างเดิม
แบ่งรอบและหาช่วงการเคลื่อนไหว (ROM)
- ดูกราฟมุมกับเวลา จดช่วงเวลาของแต่ละรอบ (จุดต่ำสุดถึงจุดต่ำสุดถัดไป)
- ใช้
MAXIFS/MINIFSหาค่าในแต่ละรอบ เช่น รอบที่ 2 ระหว่าง 4.2–7.9 วินาที
มุมสูงสุด =MAXIFS(Table1[knee_smooth], Table1[time_s], ">=4.2", Table1[time_s], "<7.9")
มุมต่ำสุด =MINIFS(Table1[knee_smooth], Table1[time_s], ">=4.2", Table1[time_s], "<7.9")
ROM = มุมสูงสุด − มุมต่ำสุด- ทำทุกรอบ แล้วรายงาน ค่าเฉลี่ย ± SD ของ ROM และเวลาต่อรอบ
| ตัวชี้วัด | บอกอะไร |
|---|---|
| ROM (มุมสูงสุด − ต่ำสุด) | ข้อต่อเคลื่อนได้กว้างแค่ไหนในท่านี้ |
| มุมสูงสุด/ต่ำสุด | ไปถึงตำแหน่งปลายช่วงหรือไม่ (เช่น ลงได้ลึกแค่ไหน) |
| เวลาต่อรอบ | ความเร็ว จังหวะ ความเหนื่อยล้า (รอบหลังช้าลง?) |
| SD หรือ CV ระหว่างรอบ | ความสม่ำเสมอ การควบคุมการเคลื่อนไหว |
ขั้นที่ 5: ความสมมาตรซ้าย–ขวา
ใช้ Symmetry Index (SI) กับตัวชี้วัดใดก็ได้ (ROM, มุมสูงสุด, เวลา)
SI = \frac{L - R}{0.5\,(L + R)} \times 100\%
- SI = 0% คือสมมาตรสมบูรณ์ ค่าบวกคือซ้ายมากกว่า ค่าลบคือขวามากกว่า
- หลายงานใช้เกณฑ์ประมาณ 10–15% ในการบอกว่าต่างกันอย่างมีนัย แต่เกณฑ์ขึ้นกับท่าและกลุ่มประชากร ให้ระบุเกณฑ์ที่ใช้และเหตุผลในรายงาน
- ต้องแน่ใจว่าทั้งสองข้างวัดได้ดีเท่ากันก่อน (visibility ใกล้เคียงกัน) มิฉะนั้น SI สะท้อนมุมกล้อง ไม่ใช่ร่างกาย
ตัวอย่าง: ROM เข่าซ้ายเฉลี่ย 92° ขวา 80° → SI = (92 − 80) / 86 × 100 = 14% ซ้ายงอได้มากกว่า
ขั้นที่ 6: ตีความ
ตัวเลขยังไม่ใช่คำตอบ ให้เชื่อมกับความรู้ด้านการเคลื่อนไหว
| สิ่งที่พบ | ความเป็นไปได้ที่ควรพิจารณา |
|---|---|
| ROM เข่าข้างหนึ่งน้อยกว่าในท่าลุก–นั่ง + ลำตัวเอียงไปอีกข้าง | ถ่ายน้ำหนักไปขาข้างที่แข็งแรงกว่า กล้ามเนื้ออ่อนแรงหรือเจ็บข้างหนึ่ง |
| มุมไหล่เปลี่ยนมาก (> 15–20°) ระหว่าง bicep curl | ใช้แรงเหวี่ยงจากไหล่ (compensation) น้ำหนักอาจมากเกิน |
| ยกแขนด้านหน้าแล้วลำตัวเอนหลัง | ชดเชยการยกแขนที่ไม่สุดช่วงด้วยการแอ่นหลัง |
| เวลาต่อรอบเพิ่มขึ้นในรอบหลัง ๆ | ความเหนื่อยล้า |
| SD ของ ROM ระหว่างรอบสูง | การควบคุมการเคลื่อนไหวไม่สม่ำเสมอ |
ตีความอย่างระมัดระวัง ระบุเสมอว่า
- วัดจากกล้องตัวเดียว มุมกล้องอะไร มีข้อจำกัดอะไร (ภาพ 2 มิติ, การบดบัง)
- ผลนี้ใช้คัดกรองหรือติดตามความเปลี่ยนแปลง ไม่ใช่การวินิจฉัย
- ถ้าจะเปรียบเทียบก่อน–หลัง (เช่น ก่อนและหลังฝึก) ต้องใช้มุมกล้อง ระยะ และโปรโตคอลเดิม
โครงรายงาน
- คำถามและเหตุผล ทำไมการวัดนี้มีความหมาย (กีฬา, กายภาพบำบัด, สมรรถนะ)
- วิธีการ ท่า จำนวนรอบ มุมกล้อง จุด/มุมที่ใช้และเหตุผลที่เลือก
- คุณภาพข้อมูล visibility ของจุดที่ใช้ ช่องว่าง การกรอง
- ผล กราฟ (มีชื่อ แกน หน่วย คำอธิบายสีซ้าย–ขวา) และตารางตัวชี้วัด
- ตีความและข้อจำกัด ผลบอกอะไร เทียบกับค่าอ้างอิงอย่างไร ควรทำอะไรต่อ
ข้อผิดพลาดที่พบบ่อยจากงานที่ผ่านมา
- ใช้ตำแหน่งของจุดเดียว (เช่น y ของไหล่) แทนมุมข้อต่อหรือตำแหน่งสัมพัทธ์
- ถ่ายด้านหน้าในท่างอ–เหยียด (squat, ลุก–นั่ง) ทำให้มุมเข่าและสะโพกในภาพเล็กกว่าจริงมาก
- ดูแค่แกนเดียว (y) ทั้งที่การเคลื่อนไหวเกิดทั้งแนว x และ y
- ใช้ข้อมูลซีกที่ถูกบัง ซึ่งค่าแทบไม่เปลี่ยน แล้วสรุปว่าไม่สมมาตร
- ชื่อกราฟไม่ตรงกับข้อมูล (เช่น เขียนว่าไหล่ แต่ข้อมูลเป็นศอก)
ขั้นต่อไป: เทียบกับการมาร์กด้วยคน · ใช้ AI ทบทวนการวิเคราะห์