อ่านและตีความข้อมูลท่าทาง

จากตารางพิกัด สู่ตัวเลขที่บอกบางอย่างเกี่ยวกับการเคลื่อนไหว

Author

ผศ.ดร.ศุภชัย วรพจน์พิศุทธิ์

Published

13 ตุลาคม 2569

ไฟล์ CSV หนึ่งไฟล์มีหลายร้อยแถวและหลายสิบคอลัมน์ ถ้าเริ่มจากการพล็อตทุกอย่าง จะหลงทาง ให้เริ่มจากคำถาม แล้วเลือกเฉพาะข้อมูลที่ตอบคำถามนั้น

flowchart LR
    Q["1. คำถาม<br/>อยากรู้อะไร"] --> P["2. เลือกจุด/มุม<br/>ที่ตอบคำถาม"]
    P --> C["3. ตรวจคุณภาพ<br/>visibility, ช่องว่าง"]
    C --> M["4. คำนวณ<br/>มุม ROM ความสมมาตร"]
    M --> I["5. ตีความ<br/>เทียบค่าอ้างอิง<br/>บอกข้อจำกัด"]

โครงสร้างไฟล์ 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

  1. ดับเบิลคลิกไฟล์ หรือใช้ Data → From Text/CSV
  2. ลบแถว # ด้านบนออก (หรือเลือกตั้งแต่แถวหัวตารางลงไป)
  3. คลิกในตาราง กด Ctrl+T แล้วติ๊ก My table has headers เพื่อสร้าง Excel Table จะเขียนสูตรด้วยชื่อคอลัมน์ได้ เช่น [@left_knee_angle]
  4. ซ่อนคอลัมน์ที่ไม่ใช้ เหลือ 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 ของเข่าเทียบสะโพกและข้อเท้า
Importantใช้ตำแหน่ง “สัมพัทธ์” ไม่ใช่ตำแหน่งของจุดเดียว

ค่า left_shoulder_y อย่างเดียวบอกได้น้อยมาก เพราะเปลี่ยนตามความสูงของกล้อง ระยะห่าง และการขยับทั้งตัว ให้ใช้ความสัมพันธ์ระหว่างจุด เช่น มุมข้อต่อ (สามจุด) หรือตำแหน่งข้อมือเทียบกับไหล่

ขั้นที่ 2: ตรวจคุณภาพข้อมูล

ก่อนคำนวณ ให้ตรวจสามอย่าง

  1. visibility ของทุกจุดที่ใช้ ควร ≥ 0.7 เกือบตลอด ถ้าซีกหนึ่งต่ำ (เช่น ถ่ายด้านข้างแล้วซีกไกลถูกบัง) อย่าใช้ซีกนั้น แม้ค่าพิกัดจะดูมีตัวเลข
  2. ช่องว่าง แถวที่ detected = 0 ไม่มีข้อมูล ให้กราฟเว้นช่วงนั้น (ใช้ NA() ในสูตร)
  3. พล็อตดิบก่อน สร้างกราฟ Scatter with Lines ระหว่าง time_s กับค่าที่สนใจ ดูว่ารูปร่างตรงกับสิ่งที่เห็นในวิดีโอไหม เช่น ลุก–นั่ง 5 รอบควรเห็นคลื่น 5 ลูก

ขั้นที่ 3: มุมข้อต่อ

คำนวณอย่างไร

A สะโพกB เข่า (จุดยอดมุม)C ข้อเท้า θ u = A − Bv = C − B

มุมที่จุด 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)))))
NoteATAN2 ของ Excel สลับลำดับ

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)

  1. ดูกราฟมุมกับเวลา จดช่วงเวลาของแต่ละรอบ (จุดต่ำสุดถึงจุดต่ำสุดถัดไป)
  2. ใช้ 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       = มุมสูงสุด − มุมต่ำสุด
  1. ทำทุกรอบ แล้วรายงาน ค่าเฉลี่ย ± 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 มิติ, การบดบัง)
  • ผลนี้ใช้คัดกรองหรือติดตามความเปลี่ยนแปลง ไม่ใช่การวินิจฉัย
  • ถ้าจะเปรียบเทียบก่อน–หลัง (เช่น ก่อนและหลังฝึก) ต้องใช้มุมกล้อง ระยะ และโปรโตคอลเดิม

โครงรายงาน

  1. คำถามและเหตุผล ทำไมการวัดนี้มีความหมาย (กีฬา, กายภาพบำบัด, สมรรถนะ)
  2. วิธีการ ท่า จำนวนรอบ มุมกล้อง จุด/มุมที่ใช้และเหตุผลที่เลือก
  3. คุณภาพข้อมูล visibility ของจุดที่ใช้ ช่องว่าง การกรอง
  4. ผล กราฟ (มีชื่อ แกน หน่วย คำอธิบายสีซ้าย–ขวา) และตารางตัวชี้วัด
  5. ตีความและข้อจำกัด ผลบอกอะไร เทียบกับค่าอ้างอิงอย่างไร ควรทำอะไรต่อ

ข้อผิดพลาดที่พบบ่อยจากงานที่ผ่านมา

  • ใช้ตำแหน่งของจุดเดียว (เช่น y ของไหล่) แทนมุมข้อต่อหรือตำแหน่งสัมพัทธ์
  • ถ่ายด้านหน้าในท่างอ–เหยียด (squat, ลุก–นั่ง) ทำให้มุมเข่าและสะโพกในภาพเล็กกว่าจริงมาก
  • ดูแค่แกนเดียว (y) ทั้งที่การเคลื่อนไหวเกิดทั้งแนว x และ y
  • ใช้ข้อมูลซีกที่ถูกบัง ซึ่งค่าแทบไม่เปลี่ยน แล้วสรุปว่าไม่สมมาตร
  • ชื่อกราฟไม่ตรงกับข้อมูล (เช่น เขียนว่าไหล่ แต่ข้อมูลเป็นศอก)

ขั้นต่อไป: เทียบกับการมาร์กด้วยคน · ใช้ AI ทบทวนการวิเคราะห์