Hài Hước Nhân Tạo

Hài Hước Nhân Tạo Trang sh*tpost/ chia sẻ tài liệu học AI
Saber, Angela 2024

🐍 Từ Triangulation đến Structure from Motion - snek tiếp tục hành trình!Yah yah yah! snek đây, các bạn yêuu dấu của tui!...
14/05/2025

🐍 Từ Triangulation đến Structure from Motion - snek tiếp tục hành trình!

Yah yah yah! snek đây, các bạn yêuu dấu của tui! 🥺 Đã 2 tháng trời snek "biến mất" khỏi timeline mà không báo trước gì cả huhu. Snek xin lỗiiiii mọi người nhé! 😭

Trong thời gian này, snek có tham gia cuộc thi đầu tiên về 3D (SHREC2025) và ôm cái rank 2 về! 🥈 Không những thế, snek còn may mắn được làm co-author cho một joint paper sẽ ra lò vào tháng 9 năm nay nữa hehe.

Mặc dù đi "phiêu lưu" một thời gian, nhưng hành trình khám phá thế giới 3D Computer Vision của snek vẫn tiếp tục mạnh mẽ nha! Và hôm nay, mình quay lại với phần 2 của series: Structure from Motion! 🚀

---

Helloooo! Hôm trước mình đã giới thiệu về Triangulation (tìm điểm 3D từ 2 ảnh), hôm nay snek sẽ mở rộng sang Structure from Motion - tái tạo TOÀN BỘ cảnh 3D từ NHIỀU ảnh!

🔄 Từ 2 camera thành N cameras

Triangulation: 2 cameras → 1 điểm 3D
Structure from Motion: N cameras → Toàn bộ cảnh 3D + vị trí cameras!

Nghe có vẻ huyền diệu? Không hẳn! Chỉ cần một chút đại số tuyến tính và SVD thôi mà! 📐

🎯 Hai phương pháp chính:

1️⃣ Affine SfM (Tomasi-Kanade)
✅ Đơn giản, elegant
✅ Phù hợp khi object xa/nhỏ
❌ Không có perspective distortion

Bí kíp chính là: Center data → Matrix factorization → SVD magic!
```
D = M × S (measurement = motion × structure)
```

2️⃣ Perspective SfM
✅ Realistic, đầy đủ perspective
✅ Sử dụng Essential/Fundamental matrix
❌ Phức tạp hơn với 4 nghiệm từ Essential matrix

Plot twist: Chỉ 1/4 nghiệm là đúng! (Phải check xem điểm 3D có nằm trước camera không 👀)

💡 Fun fact:
Essential matrix luôn có đúng 2 giá trị kỳ dị bằng nhau và 1 giá trị bằng 0. Đây là "signature" đặc biệt giúp ta extract được rotation và translation!

📖 Đọc chi tiết tại note mới:
Mình có take note lại bằng phiên bản tiếng việt, link ở đây nhé!

Link note: [https://drive.google.com/file/d/11CCcVvcf6YdUpdnN6tFJaWrHFp2nB_g4/view?usp=sharing]
Link toàn bộ note: [https://drive.google.com/drive/folders/1q3PfveWk7XUt3rbe4MkGC3W7b7hCM5AX?usp=sharing]

🔗 Tài Liệu Tham Khảo
- GitHub repo: [https://github.com/PhamPhuHoa-23/-PPH-CS231A-From-3D-Perception-to-3D-Reconstruction-and-beyond]

Ai có câu hỏi về Essential matrix decomposition hay Tomasi-Kanade factorization cứ hỏi nhé! snek sẵn sàng giải đáp! 🐍✨









🐍 Triangulation & Structure from Motion - Nền tảng của Thị giác máy tính 3D 🐍Helloooo cả nhà! snek đây - như đã hứa thì ...
16/03/2025

🐍 Triangulation & Structure from Motion - Nền tảng của Thị giác máy tính 3D 🐍

Helloooo cả nhà! snek đây - như đã hứa thì snek sẽ lên tiếp về Triangulation và Structure from Motion!

📸 Triangulation là gì?

Đơn giản thôi: Đây là kỹ thuật xác định vị trí của điểm 3D từ những hình chiếu 2D của nó trên nhiều ảnh khác nhau.

Nếu bạn có:
- Hai camera đã hiệu chuẩn.
- Biết vị trí tương đối giữa chúng.
- Nhìn thấy cùng một điểm từ cả hai camera.

➡️ Bạn có thể tính được chính xác vị trí điểm đó trong không gian 3D!

🔧 Vấn đề thực tế:

Trong lý thuyết, hai tia nhìn từ hai camera sẽ giao nhau tại điểm 3D. Nhưng trong thực tế, do nhiễu và sai số, chúng thường không gặp nhau!

Hai giải pháp chính:
1. Phương pháp tuyến tính: Đơn giản nhưng kém chính xác.
2. Phương pháp phi tuyến: Cải tiến của pp tuyến tính. Tối ưu hóa lỗi tái chiếu (reprojection error) - khoảng cách giữa điểm dự đoán và điểm thực tế trên ảnh.

💡 Mình có Note chi tiết!

Mình đã tổng hợp toàn bộ kiến thức về Triangulation từ CS231A (Stanford) trong note dưới đây. Mọi người quan tâm có thể tham khảo để hiểu sâu hơn về:
- Các phương pháp Triangulation chi tiết
- Structure from Motion
- Các công thức toán học và triển khai cụ thể

📘 Đọc note đầy đủ tại: [https://drive.google.com/file/d/1JlYy1--8Bx0AvDFDXApHgxFxYr9dqsBj/view?usp=sharing]

🔗 Tài Liệu Tham Khảo
- GitHub repo: [https://github.com/.../-PPH-CS231A-From-3D-Perception-to...]

🤔 Còn ai có thắc mắc gì về chủ đề này thì comment bên dưới nhé! snek sẽ giải đáp tất tần tật nhóa! 🐍✌️








Huhu, mấy nay snek bận quá nên giờ snek mới có thời gian để lên bài. Snek bù lại cho mọi người nhóa!Yah, ở bài viết trướ...
16/03/2025

Huhu, mấy nay snek bận quá nên giờ snek mới có thời gian để lên bài. Snek bù lại cho mọi người nhóa!

Yah, ở bài viết trước chúng ta đã tìm hiểu về ma trận thiết yếu (Essential Matrix) và ma trận cơ sở (Fundamental Matrix) và cả cách tìm 2 ma trận này nữa. Hôm nay chúng ta sẽ vận dụng nó để duỗi thẳng các tấm ảnh từ các góc nhìn khác nhau sao cho điểm epipole sẽ nằm ở vô cùng (hay nói cách khác là các đường thẳng trên hai tấm ảnh (thuộc cùng một object) sẽ song song với nhau)

Ở trong bài toán này chúng ta giả sử rằng camera thứ 2 sẽ bằng camera thứ nhất sau khi áp dụng phép tịnh tiến T và ma trận xoay R. và đặc biệt hơn là chúng ta giả sử chỉ tịnh tiến theo chiều x.

Vậy ta có ma trận Essential Matrix E = [T]x R =
[0 0 0]
[0 0 -Tx]
[0 Tx 0]

Sau khi có ma trận E, với một điểm p' trong camera 2, chúng ta có thể tìm đường thẳng đi qua điểm đó trong camera 1 bằng công thức quen thuộc:
l = E p'

Theo như chúng ta đã biết. Các đường thẳng l1, l2, l3, … sẽ giao nhau tại epipole. Vậy để duỗi thẳng ảnh chúng ta biến đổi sao cho các đường thẳng này song song với nhau! Hay đưa điểm epipole ra vô cùng trong hệ tọa độ thuần nhất!

Vậy giờ chúng ta sẽ tìm điểm e trước khi biến đổi nó ra vô cùng nhé!
[l1^T]
[l2^T]
[...]
[ln^T] e = 0

Từ phương trình trên chúng ta có thể xấp xỉ giá trị của e!

🛤️ Quá trình Image Rectification 🐍

Vậy là `snek` đã giới thiệu sơ qua về ý tưởng của Image Rectification rồi. Giờ chúng ta sẽ đi sâu hơn vào quá trình thực hiện nhé!

Image Rectification (hay còn gọi là "nắn chỉnh ảnh") là quá trình biến đổi cặp ảnh để mặt phẳng ảnh trở nên song song với nhau. Khi 2 mặt phẳng ảnh song song, điều kỳ diệu sẽ xảy ra: các đường epipolar sẽ trở thành những đường thẳng song song với trục ngang!

🎯 Mục tiêu của chúng ta là:

1. Tìm 2 phép biến đổi đồng nhất (homography) H₁ và H₂
2. Áp dụng chúng lên ảnh thứ nhất và ảnh thứ hai
3. Kết quả là các điểm tương ứng sẽ có cùng tọa độ y (!!!)

🎶 Các bước thực hiện

Bước 1: Tìm Fundamental Matrix F

Đầu tiên chúng ta cần tìm ma trận F bằng thuật toán Eight-Point đã chuẩn hóa (Normalized Eight-Point Algorithm) mà `snek` đã giới thiệu ở bài trước.

Bước 2: Tìm epipole e và e'

Như `snek` đã nói ở trên, chúng ta có thể tìm epipole bằng cách giải phương trình:

[l1^T]
[l2^T]
[...]
[ln^T] e = 0

Trong thực tế, do các phép đo có nhiễu, các đường epipolar không nhất thiết giao nhau tại một điểm. Vì vậy, chúng ta tìm epipole bằng cách tối thiểu hóa tổng bình phương sai số. Bài toán này có thể giải bằng SVD! 🐍

Bước 3: Tìm homography H₂

Bây giờ `snek` sẽ giải thích cách tìm H₂ để đưa epipole e' ra vô cùng theo trục ngang:

1. **Dịch chuyển** ảnh để tâm ở tọa độ (0,0,1) bằng ma trận T:
[1 0 -width/2]
[0 1 -height/2]
[0 0 1]

2. **Xoay** epipole để nó nằm trên trục ngang tại (f,0,1) bằng ma trận R:
[α·e'₁/√(e'₁²+e'₂²) α·e'₂/√(e'₁²+e'₂²) 0]
[-α·e'₂/√(e'₁²+e'₂²) α·e'₁/√(e'₁²+e'₂²) 0]
[0 0 1]

Trong đó α = 1 nếu e'₁ ≥ 0 và α = -1 nếu ngược lại.

3. **Biến đổi** điểm (f,0,1) thành điểm vô cùng (f,0,0) bằng ma trận G:
[1 0 0]
[0 1 0]
[-1/f 0 1]
4. **Dịch chuyển ngược** về không gian ảnh ban đầu:
H₂ = T⁻¹·G·R·T

Bước 4: Tìm homography H₁

Giờ snek sẽ giải thích cách tìm H₁ sao cho nó "khớp" với H₂. Mục tiêu là tối thiểu hóa:

Σᵢ ||H₁·pᵢ - H₂·p'ᵢ||²

Thực ra, H₁ có dạng:
H₁ = Hₐ·H₂·M

Trong đó:

- F = [e]ₓM
- Hₐ = [a₁ a₂ a₃]
[0 1 0]
[0 0 1]

Để tìm M, chúng ta sử dụng tính chất của ma trận đối xứng lệch:
M = [e]ₓF + e·v^T

Trong đó v^T = [1 1 1] thường hoạt động tốt trong thực tế.

Cuối cùng, ta giải bài toán bình phương tối thiểu để tìm các giá trị a₁, a₂, a₃:
Σᵢ (a₁·x̂ᵢ + a₂·ŷᵢ + a₃ - x̂'ᵢ)²

Ứng dụng thực tế 🐍

Image Rectification có nhiều ứng dụng quan trọng trong Computer Vision:

1. **Stereo Matching**: Khi ảnh đã được nắn chỉnh, tìm các điểm tương ứng trở nên đơn giản hơn vì chỉ cần tìm trên cùng một hàng ngang.
2. **Tính toán độ sâu**: Việc tính toán bản đồ độ sâu trở nên hiệu quả hơn nhiều khi các ảnh đã được nắn chỉnh.
3. **3D Reconstruction**: Xây dựng lại mô hình 3D từ nhiều ảnh 2D dễ dàng hơn khi các ảnh đã được nắn chỉnh.

💡 TIPS: Nếu các bạn muốn xem dễ hiểu hơn các công thức toán học trong bài viết, snek đã đăng kèm pdf bài giảng snek viết bằng tiếng việt ở link github bên dưới nha để xem các công thức được hiển thị đẹp hơn nhé!

💡 Một vài công thức hơi khó hiểu các bạn có thể xem qua trước phần problem set 2 snek đã giải nhoa 😘 snek có giải thích một xíu nhưng cũng mong sẽ dễ hiểu hơn hehe 🐍

🔗 Tài Liệu Tham Khảo
- GitHub repo: [https://github.com/PhamPhuHoa-23/-PPH-CS231A-From-3D-Perception-to-3D-Reconstruction-and-beyond.git]

🐍 Hình Học Epipolar: Bí Ẩn Đằng Sau Thế Giới 3D 🐍Helloooo các cưng của snek! Có bao giờ bạn thấy mình "nâng đỡ" tháp ngh...
08/03/2025

🐍 Hình Học Epipolar: Bí Ẩn Đằng Sau Thế Giới 3D 🐍

Helloooo các cưng của snek! Có bao giờ bạn thấy mình "nâng đỡ" tháp nghiêng Pisa trong ảnh và tự hỏi: "Làm thế nào máy tính hiểu được đây chỉ là ảo ảnh chứ không phải tôi thực sự có siêu năng lực?" 🦸‍♂️ Hay khi xem phim 3D, bạn tự hỏi làm sao máy chiếu biết được cách tạo ra cảm giác sâu từ hai hình phẳng?

Chào mừng đến với thế giới diệu kỳ của Hình Học Epipolar - nơi toán học và thị giác gặp nhau, tạo nên ma thuật giúp máy tính "nhìn" thế giới như chúng ta! Hôm nay, `snek sẽ đưa bạn vào cuộc phiêu lưu qua ma trận để khám phá bí mật đằng sau thị giác 3D!

🧩 Tại Sao Chúng Ta Cần Nhiều Góc Nhìn?

Tưởng tượng bạn đang nhìn một bức tranh 2D của khối lập phương. Làm sao bạn biết được mặt sau của nó trông như thế nào? Không thể! Đó chính là vấn đề của thị giác máy tính: khi chụp ảnh, chúng ta đang ép buộc thế giới 3D (có chiều sâu) thành thế giới 2D (phẳng).

Trong quá trình này, có một thông tin quan trọng bị mất đi: **chiều sâu**. Bức ảnh không còn giữ được thông tin về khoảng cách từ camera đến đối tượng. Đây là lý do tại sao từ một bức ảnh, rất khó để biết chính xác vị trí 3D của một vật thể.

Nhưng nếu có hai bức ảnh từ hai góc nhìn khác nhau (giống như hai mắt của bạn), chúng ta có thể tính toán chiều sâu! Đó chính là lý do mọi sinh vật với thị giác tốt đều có hai mắt - không phải một hay ba! 👀👀

📐 Cơ Bản Về Hình Học Epipolar

Hãy tưởng tượng bạn có hai camera nhìn vào cùng một điểm P trong không gian 3D:

🔹 **Tâm camera** ở vị trí O₁ và O₂ (tưởng tượng đây là hai con mắt)
🔹 Đường thẳng nối O₁ và O₂ gọi là **đường cơ sở (baseline)**
🔹 **Mặt phẳng epipolar** được tạo bởi tam giác: {O₁, O₂, P}
🔹 **Epipole** (e và e') là điểm giao giữa đường cơ sở và mặt phẳng hình ảnh
🔹 **Đường epipolar** là đường giao giữa mặt phẳng epipolar và mặt phẳng hình ảnh

Điều kỳ diệu: Nếu chúng ta thấy điểm p trong ảnh thứ nhất (hình chiếu của P), thì điểm tương ứng p' trong ảnh thứ hai CHẮC CHẮN nằm trên đường epipolar! 🎯

📊 Ma Trận Thiết Yếu (Essential Matrix - E) - Cơ Sở Toán Học

Bây giờ, hãy đi sâu vào cơ sở toán học dẫn đến ma trận E. Đây là phép suy luận toán học cực kỳ thú vị!

Giả sử chúng ta đặt hệ tọa độ thế giới trùng với hệ tọa độ của camera 1. Điều này có nghĩa camera 2 sẽ bị dịch chuyển một vector T và quay một ma trận R so với camera 1.

Với cùng một điểm 3D (gọi là P), chúng ta có:

- p là hình chiếu của P trong camera 1
- p' là hình chiếu của P trong camera 2

Đây là phép suy luận toán học:

1. Vị trí của p' trong hệ tọa độ camera 1 sẽ là (R·p' + T)
2. Các vector p, (R·p' + T), và T đều nằm trên cùng một mặt phẳng (mặt phẳng epipolar)
3. Nếu ba vector nằm trên cùng một mặt phẳng, thì tích hỗn hợp của chúng bằng 0
4. Tích hỗn hợp có thể viết dưới dạng: p·(T × (R·p' + T)) = 0
5. Phép nhân vector và phép cộng vector cho ta: T × (R·p' + T) = T × (R·p')
(vì T × T = 0)
6. Vậy điều kiện trở thành: p·(T × (R·p')) = 0
7. Tích chéo có thể viết dưới dạng ma trận:
T × v = [T]₍ₓ₎·v
(với [T]₍ₓ₎ là ma trận tương ứng với phép tích chéo)
8. Vì vậy: p·([T]₍ₓ₎·(R·p')) = 0
hay p·([T]₍ₓ₎·R)·p' = 0
9. Đặt E = [T]₍ₓ₎·R, ta có: p·E·p' = 0

Đó chính là cơ toán học dẫn đến Ma Trận Thiết Yếu E!

Để hiểu sâu hơn về cơ sở toán học này, các bạn có thể xem thêm video giải thích chi tiết từng bước mà mình sẽ đề xuất ở cuối bài viết nhé! 📚

🔍 Ma Trận Cơ Sở (Fundamental Matrix - F) - Thế Giới Thực

Trong thực tế, camera có các tham số nội tại được biểu diễn bởi ma trận K và K'. Khi đó, tọa độ pixel và tọa độ chuẩn tắc liên hệ với nhau:

- p_chuẩn = K⁻¹·p
- p'_chuẩn = K'⁻¹·p'

Thay vào công thức ma trận E:
p_chuẩn·E·p'_chuẩn = 0
(K⁻¹·p)·E·(K'⁻¹·p') = 0
p·(K⁻ᵀ·E·K'⁻¹)·p' = 0

Đặt F = K⁻ᵀ·E·K'⁻¹, ta có: p·F·p' = 0

Đây chính là Ma Trận Cơ Sở F - vị anh hùng thầm lặng giúp chúng ta làm việc với ảnh thực tế!

🎯 Thuật Toán Tám Điểm

Làm thế nào để tìm ma trận F này? Đây là Thuật Toán Tám Điểm!

Giả sử chúng ta có 8 cặp điểm tương ứng: (p₁, p'₁), (p₂, p'₂), ..., (p₈, p'₈)

Với mỗi cặp điểm (pᵢ, p'ᵢ), chúng ta có pᵢᵀ·F·p'ᵢ = 0

Nếu viết rõ ra với pᵢ = (uᵢ, vᵢ, 1) và p'ᵢ = (u'ᵢ, v'ᵢ, 1), chúng ta có:
[uᵢu'ᵢ uᵢv'ᵢ uᵢ vᵢu'ᵢ vᵢv'ᵢ vᵢ u'ᵢ v'ᵢ 1]·[F₁₁ F₁₂ F₁₃ F₂₁ F₂₂ F₂₃ F₃₁ F₃₂ F₃₃]ᵀ = 0

Với 8 cặp điểm, chúng ta có 8 phương trình tuyến tính. Có thể giải hệ phương trình này bằng Phân Rã Giá Trị Đơn (SVD) để tìm ma trận F.

Thực tế, F phải có hạng 2, nên chúng ta cần một bước cuối cùng: tìm ma trận hạng 2 gần nhất với F bằng cách điều chỉnh giá trị kỳ dị nhỏ nhất về 0.

🔧 Thuật Toán Tám Điểm Chuẩn Hóa - Bí Quyết Thực Tiễn

Nhưng trong thực tế, Thuật Toán Tám Điểm thường cho kết quả không tốt. Tại sao? Vì tọa độ pixel thường rất lớn!

Tưởng tượng điểm ở góc dưới bên phải của ảnh có tọa độ khoảng (1920, 1080) - đây là những con số lớn so với 1 ở tọa độ thứ ba (1). Điều này tạo ra ma trận hệ số có điều kiện kém.

Giải pháp thông minh:

1. Chuẩn hóa tọa độ:
- Dịch chuyển để gốc tọa độ nằm ở trọng tâm điểm
- Chia tỷ lệ để khoảng cách trung bình từ gốc là √2
2. Tính F cho tọa độ chuẩn hóa
3. Quay lại tọa độ gốc: F = T'ᵀ·F_chuẩn·T

Trong đó T và T' là các ma trận chuẩn hóa.

Kỹ thuật đơn giản này cải thiện độ chính xác TỪ SAI SỐ LỚN xuống còn vài pixel! 👌

Giờ thì bạn đã hiểu cơ bản về hình học epipolar và cách máy tính có thể "nhìn" thế giới 3D thông qua hai hình ảnh 2D. Để hiểu sâu hơn, đặc biệt là phần cơ sở toán học, các bạn nên tham khảo thêm các tài liệu và video hướng dẫn mình ghi dưới đây nhé!

🔗 Tài Liệu Tham Khảo

- GitHub repo: [https://github.com/PhamPhuHoa-23/-PPH-CS231A-From-3D-Perception-to-3D-Reconstruction-and-beyond]
- Video YouTube giải thích cơ sở toán học:
- [Simple Stereo](https://youtu.be/hUVyDabn1Mg?si=HM7qfG2DVJQBhvWy)
- [Uncalibrated Stereo](https://youtu.be/dUDMQ6dwWDA?si=oQ7-BI4hOq3OWJIn)
- [Epipolar Geometry](https://youtu.be/6kpBqfgSPRc?si=AVHkkXm-ebNLLmKH)
- [Estimating Fundamental Matrix](https://youtu.be/izpYAwJ0Hlw?si=yW48C2P2lZjY6NFA)

💬 Hẹn gặp lại các bạn trong bài viết tiếp theo về Image Rectification! Đừng quên để lại comment nếu có thắc mắc nhé! 🐍

```
_ _
| | | |
___ _ __ ___ | | _| |
/ __| '_ \ / _ \ | |/ / |
\__ \ | | | __/ |

🐍 Snek đã hoàn thành xong bài tập đầu tiên của CS231A về Hình học Chiếu và Hiệu chuẩn Camera! 🎯Chào các bạn đam mê thị g...
01/03/2025

🐍 Snek đã hoàn thành xong bài tập đầu tiên của CS231A về Hình học Chiếu và Hiệu chuẩn Camera! 🎯

Chào các bạn đam mê thị giác máy tính! snek đây với một cập nhật nhanh. Cuối cùng cũng đã hoàn thành xong Problem Set 1 của khóa học Stanford CS231A về Thị giác Máy tính và Tái tạo 3D.

Bài tập bao gồm một số khái niệm cơ bản:

- Chứng minh các tính chất của phép biến đổi chiếu
- Triển khai hiệu chuẩn camera affine
- Làm việc với điểm tiêu để ước tính các tham số camera

Nếu bạn đang học thị giác máy tính hoặc quan tâm đến tái tạo 3D, mình đã đẩy mã nguồn lên GitHub tại đây: https://github.com/PhamPhuHoa-23/-PPH-CS231A-From-3D-Perception-to-3D-Reconstruction-and-beyond

Trong repo có file notebook mà mình đã giải thích kỹ càng từng bước trong quá trình làm và triển khai sang code.

**Lưu ý:** mọi người nên tự làm bài tập trước, file giải này chỉ nên dùng để tham khảo thôi nhé!

Phần thú vị nhất chắc chắn là làm việc với các điểm tiêu để tính toán góc giữa các mặt phẳng và ước tính ma trận quay giữa các vị trí camera.

Hãy cho mình biết nếu bạn thấy nó hữu ích hoặc có câu hỏi về cách triển khai nhé!

```
/^\/^\
_|__| O|
/~ \_/ \
\_____/ \
\ \
\ \
``` snek





🐍 Chào các bạn mê mẩn thế giới 3D! Lại là mình snek đây! 🐍Hôm nay chúng ta sẽ ngụp lặn trong thế giới kỳ diệu của "vanis...
01/03/2025

🐍 Chào các bạn mê mẩn thế giới 3D! Lại là mình snek đây! 🐍

Hôm nay chúng ta sẽ ngụp lặn trong thế giới kỳ diệu của "vanishing points" và "vanishing lines" - những khái niệm đặc biệt quan trọng để hiểu cách thế giới 3D được biểu diễn trên mặt phẳng hình ảnh 2D của chúng ta. Các bạn đã bao giờ tự hỏi tại sao những đường ray xe lửa song song lại có vẻ như gặp nhau ở đường chân trời? Hôm nay chúng ta sẽ giải mã bí ẩn này! 😎

🔍 Điểm ở vô cực và vanishing points

Trước khi đi vào vanishing points, chúng ta cần nhớ lại một chút về **điểm vô cực** (points at infinity). Trong không gian tọa độ đồng nhất (homogeneous coordinates), điểm vô cực được biểu diễn dưới dạng [x y 0]^T.

👉 Điểm vanishing là gì? Đơn giản thôi: khi một tập hợp các đường thẳng song song trong không gian 3D được chiếu lên mặt phẳng hình ảnh, chúng dường như gặp nhau tại một điểm - đó chính là điểm vanishing!

Nếu chúng ta có phương d = (a, b, c) của các đường thẳng song song trong hệ tọa độ camera, thì điểm vanishing v được tính bằng công thức:

```
v = K × d

```

Trong đó K là ma trận tham số nội tại của camera.

Điều thú vị là nếu biết điểm vanishing v và ma trận K, chúng ta có thể tính ngược lại phương của các đường thẳng song song trong không gian 3D:

```
d = K^(-1) × v / ||K^(-1) × v||

```

(Trong đó ||...|| là độ dài của vector)

🌅 Đường chân trời (Horizon line)

Các bạn đã bao giờ nhìn ra biển và tự hỏi đường chân trời là gì chưa? Trong computer vision, đường chân trời chính là **vanishing line** (hay horizon line)!

🔹 Vanishing line là gì? Khi một mặt phẳng trong không gian 3D chứa nhiều tập các đường thẳng song song, mỗi tập sẽ có một điểm vanishing riêng. Đường thẳng đi qua tất cả các điểm vanishing này chính là vanishing line hay horizon line!

Hãy nhìn poster nhé hehe! Mình có nhờ bé vợ iu tạo cái ảnh /
~~⌒~~
snek





*** KHÔI PHỤC CẤU TRÚC 3D TỪ MỘT ẢNH ******                        PHẦN 01                             ***Nổ tiếp đơn th...
22/02/2025

*** KHÔI PHỤC CẤU TRÚC 3D TỪ MỘT ẢNH ***

*** PHẦN 01 ***

Nổ tiếp đơn thứ 2, trong các bài trước thì chúng ta đã cùng tìm hiểu cách để map một điểm từ 3D vào 3D thông qua 2 ma trận quan trọng.

Câu hỏi mới đặt ra: Liệu chúng ta có thể khôi phục cấu trúc 3D của thực tế chỉ với 1 tấm ảnh nếu chúng ta biết những thuộc tính của camera?

Transformation in 2D - Các phép biến đổi trong không gian 2D

1. Phép biến đổi đẳng cự (Isometric Transformation)**
- Bảo toàn khoảng cách giữa các điểm trong ảnh gốc
- Chỉ bao gồm phép tịnh tiến và phép quay
- Ma trận biến đổi có dạng: [[cos θ, -sin θ, tx], [sin θ, cos θ, ty], [0, 0, 1]]

2. Phép biến đổi đồng dạng (Similarity Transformation)**
- Giữ nguyên hình dạng (shape) của đối tượng
- Cho phép thay đổi kích thước đồng nhất
- Ma trận biến đổi có dạng: [[s*cos θ, -s*sin θ, tx], [s*sin θ, s*cos θ, ty], [0, 0, 1]]

3. Phép biến đổi affine (Affine Transformation)**
- Bảo toàn tính song song và tỷ lệ khoảng cách
- Cho phép biến dạng không đồng nhất theo các trục
- Ma trận biến đổi có dạng: [[a11, a12, tx], [a21, a22, ty], [0, 0, 1]]

4. Phép biến đổi phối cảnh (Projective Transformation)**
- Không bảo toàn tính song song
- Mô phỏng góc nhìn thực tế của camera
- Ma trận biến đổi có dạng: [[h11, h12, h13], [h21, h22, h23], [h31, h32, h33]]

# # # Points and Lines at Infinity - Điểm và đường thẳng tại vô cực

Tầm quan trọng của đường thẳng:

- Đường thẳng là yếu tố cốt lõi để xác định cấu trúc của hình ảnh
- Giúp ta xác định được góc độ, hướng và tỷ lệ trong không gian

Biểu diễn đường thẳng trong không gian 2D:

- Dạng vector: l = [a; b; c]
- Hệ số góc (slope): m = -a/b
- Hệ số tự do (y-intercept): c' = -c/b
- *Chú thích: Đây là biểu diễn trong hệ tọa độ đồng nhất (homogeneous coordinates)*

Phương trình đường thẳng trong hệ tọa độ đồng nhất:

```
[a, b, c] @ [x; y; 1] = 0
⟺ ax + by + c = 0

```

Tìm điểm giao của hai đường thẳng song song:

- Sử dụng tích có hướng (cross product) của hai vector đường thẳng:

```
x = l × l'

```

- Với hai đường thẳng song song:

```
x_inf = [a, b, c] × [a, b, c'] = [(c'-c)b, (c-c')a, 0] ~ [b, -a, 0]

```

Đặc điểm của điểm giao:

- Thành phần cuối bằng 0 → không thể chuyển về tọa độ 2D thông thường
- Đây là điểm vô cực (point at infinity)
- Mặc dù trong ảnh ta thấy điểm giao, nhưng trong không gian đồng nhất nó nằm ở vô cực

So sánh phép chiếu Affine và Projective

Với x_inf = H @ p_inf:

1. Phép chiếu Affine:

```
[[a11, a12, tx],
[a21, a22, ty],
[0, 0, 1]] @ [x, y, 0]^T
```

1. Phép chiếu Projective:

```
[[h11, h12, h13],
[h21, h22, h23],
[h31, h32, h33]] @ [x, y, 0]^T
```

Nên sử dụng phép chiếu Projective vì:

- Phép chiếu Affine không mô tả được hiệu ứng phối cảnh
- Phép chiếu Projective cho phép biến đổi điểm vô cực thành điểm hữu hạn (phần tử cuối khác 0, có thể đưa về điểm 2d)
- Phù hợp với mô hình camera thực tế

Với các điểm vô cực đã tìm được, chúng ta có thể xây dựng đường thẳng tại vô cực l_inf = [0, 0, 1]. Đường thẳng này chứa tất cả các điểm vô cực và có ý nghĩa hình học đặc biệt (đường chân trời - chúng ta sẽ tìm hiểu ở post sau):

- Là giao tuyến của mặt phẳng ảnh với mặt phẳng vô cực π_∞
- Bất biến dưới phép biến đổi affine
- Được ánh xạ thành một đường thẳng hữu hạn dưới phép biến đổi phối cảnh

Ở phần sau chúng ta sẽ tìm hiểu về điểm tiêu(tụ) (Vanishing Point) và các công thức quan trọng để hỗ trợ trong Pset nhé!

P/S: Các công thức trên có vẻ phức tạp nhưng rất quan trọng trong việc khôi phục cấu trúc 3D từ ảnh 2D. Nếu bạn cần giải thích kỹ hơn về bất kỳ phần nào, hãy để lại comment cho snek nhé! 🎯

---
_ _
| | | |
___ _ __ ___ | | _| |
/ __| '_ \ / _ \ | |/ / |
\__ \ | | | __/ | >

*** EXTRINSIC CALIBRATION - HIỆU CHỈNH NGOẠI TẠI CAMERA ***Ya hu, 🐍 snek bị dí deadline quá nên nay mới ngoi lên lại đượ...
22/02/2025

*** EXTRINSIC CALIBRATION - HIỆU CHỈNH NGOẠI TẠI CAMERA ***

Ya hu, 🐍 snek bị dí deadline quá nên nay mới ngoi lên lại được hehe. Giữ lời hứa 2 bài/tuần mà bắt mọi người đợi lâu quá nên snek lên mấy bài luôn bù lại hoa ❤️

Tiếp nối phần trước về hiệu chỉnh nội tại, hôm nay chúng ta sẽ đi tìm hiểu về ma trận ngoại tại - một phần quan trọng không kém trong quá trình hiệu chỉnh camera!

# # # Cơ sở lý thuyết
Từ kiến thức đại số tuyến tính, chúng ta biết rằng hai hệ tọa độ sẽ được chuyển hóa qua lại lẫn nhau thông qua:
- Ma trận xoay R (Rotation matrix)
- Vector tịnh tiến t (Translation vector)

*(Chú thích: Ma trận R là ma trận trực giao - orthogonal matrix, có tính chất R^T × R = R × R^T = I, với I là ma trận đơn vị)*

# # # Bài toán chuyển đổi tọa độ
Mặc dù chúng ta chưa biết tọa độ thực của một điểm 3D so với hệ trục tọa độ camera, nhưng chúng ta có thể:
1. Gắn một hệ trục tọa độ mới lên vật thể
2. Tìm mối liên hệ giữa hai hệ trục
3. Thực hiện phép chuyển đổi!

Công thức chuyển đổi cơ bản:
```
[x_c ; y_c ; z_c] = R @ [x_w ; y_w ; z_w] + t
```
*(Chú thích: x_w, y_w, z_w là tọa độ điểm trong hệ world coordinate system - hệ tọa độ ta tự đặt)*

# # # Chuyển sang hệ tọa độ đồng nhất
Để tận dụng kết quả từ bài trước, ta chuyển về dạng ma trận trong hệ tọa độ đồng nhất:
```
[x_c ; y_c ; z_c ; 1] = [[R , t] ; [0 , 1]] @ [x_w ; y_w ; z_w ; 1]
```

Ma trận 4x4 [[R , t] ; [0 , 1]] chính là **ma trận ngoại tại** (extrinsic matrix) của camera - chứa các tham số biến đổi từ hệ tọa độ ngoài vào hệ tọa độ camera.

# # # Kết hợp với ma trận nội tại
```
P_h ~ [[f_x , 0 , 1 , 0] ; [0 , f_y , c_y , 0] ; [0 , 0 , 1 , 0]] @ [[R , t] ; [0 , 1]] @ X_w
```

Tích của hai ma trận này được viết gọn thành ma trận chiếu P (3x4):
```
[u ; v ; 1] ~ [[p_11 , p_12 , p_13 , p_14] ; ... ; [p_31 , p_32 , p_33 , p_34]] @ [x_w ; y_w ; z_w ; 1]
```

# # # Quá trình hiệu chỉnh camera
Từ công thức mapping điểm 3D-2D:
```
u = (p_11 * x_w + p_12 * y_w + p_13 * z_w + p_14) / (p_31 * x_w + p_32 * y_w + p_33 * z_w + p_34)
v = (p_21 * x_w + p_22 * y_w + p_23 * z_w + p_24) / (p_31 * x_w + p_32 * y_w + p_33 * z_w + p_34)
```

*(Chú thích: Ma trận P có 11 bậc tự do (degree of freedom). Mỗi điểm cho 2 ràng buộc → cần tối thiểu 6 điểm để giải. Tuy nhiên càng nhiều điểm càng tốt để chống nhiễu!)*

# # # Giải bài toán tối ưu
Chúng ta cần giải:
```
A @ P = 0
```
*(Với A là ma trận 2N x 12 như hình)*

Tuy nhiên, P có thể up-to-scale mà vẫn giữ nguyên độ chính xác. Do đó ta mô hình hóa thành bài toán tối ưu:
```
Min ||AP||^2 với ||p||^2 = 1
```

Sử dụng phương pháp nhân tử Lagrange:
```
L(lambda, P) = ||AP||^2 - lambda(||p||^2 - 1)
```

Đạo hàm theo P:
```
dL/dP = 2A^T @ A @ P - 2 * lambda P = 0
```

Chuyển vế:
```
A^T @ A @ P = lambda P
```

Ta nhận ra đây chính là phương trình tìm vector riêng! P là vector riêng ứng với giá trị riêng nhỏ nhất của ma trận A^T @ A.

# # # Kết luận
Sau khi tìm được P, ta có thể tách nó thành ma trận nội tại và ngoại tại thông qua phép phân tích SVD (Singular Value Decomposition).

---

# # # References
1. [SVD Decomposition](https://machinelearningcoban.com/2017/06/07/svd/)
2. [Intrinsic and Extrinsic Matrix](https://youtu.be/2XM2Rb2pfyQ?si=eBgqQ3wvL-KdeJM-)
3. [Camera Calibration](https://youtu.be/GUbWsXU1mac?si=M-hhBQ3jm52pJV0l)
4. [Repo Github Tài liệu và Giải Pset chi tiết](https://github.com/PhamPhuHoa-23/-PPH-CS231A-From-3D-Perception-to-3D-Reconstruction-and-beyond.git)

P/S: Nếu mọi người có thắc mắc gì về bài viết, đừng ngại comment bên dưới nhé! Mình sẽ giải đáp tất cả các câu hỏi. Cùng nhau học hỏi và phát triển! 🚀

--------------------
_ _
| | | |
___ _ __ ___ | | _| |
/ __| '_ \ / _ \ | |/ / |
\__ \ | | | __/ |

🚀 CS231N: Deep Learning for Computer Vision - Đánh giá chi tiếtXin chào tất cả mọi người lại là 🐍 snek đây. Hôm nay chín...
19/02/2025

🚀 CS231N: Deep Learning for Computer Vision - Đánh giá chi tiết

Xin chào tất cả mọi người lại là 🐍 snek đây. Hôm nay chính là ngày đánh dấu cột mốc 🎯 4 tháng để theo đuổi khóa học CS231N của snek. Nên snek sẽ lên bài đánh giá chi tiết về khóa học này cho những ai có định hướng theo Computer Vision nhóa!

📌 Tổng quan khóa học

CS231N là khóa học chuyên sâu về 👀 Computer Vision của Stanford, tập trung vào các phương pháp 🤖 deep learning. Khóa học cung cấp nền tảng vững chắc về computer vision đồng thời nhấn mạnh các kỹ thuật deep learning hiện đại.

📚 Cấu trúc và nội dung

🎥 Bài giảng

Dù được ghi hình từ năm 2017, các bài giảng vẫn giữ được tính thực tiễn và được tổ chức rất tốt. Các chủ đề chính bao gồm:

1. 📊 Giới thiệu về học máy
- Đối với mình phần này không quá quan trọng vì đã được học khá chi tiết trong khóa CS229 (thời gian 😭 đau khổ) nhưng với những bạn mới bắt đầu thì đây là những khái niệm khá căn bản để có thể học những kiến thức sau này.
- Phần này mình thấy họ dành khá nhiều thời gian, cụ thể là ⏳ 4 lecture để học về nó, với những người muốn học thẳng vào nội dung về computer vision thì sẽ hơi khó khăn vì 4 bài giảng này cũng sẽ hơi ngốn sức ấy hehe.
- 👉 Khuyên mọi người nên có base ML chắc để tự tin hơn trên khóa này nhé (mãi recommend ❤️ CS229 do thầy Andrew Ng giảng dạy - không phải khóa trên Coursera nhé mn ^^).

2. 🧠 Những khái niệm cơ bản và các mô hình nền tảng
🏆 AlexNet
🏛️ VGG
🔍 GoogLeNet
🏗️ ResNet
📖 Nền tảng lý thuyết với các chứng minh toán học

3. 🚀 Các chủ đề nâng cao**
🔄 Contrastive Learning
🔥 Transformer trong Computer Vision
🏗️ Computer Vision 3D
🎬 Video Understanding
🎭 Mạng đối sinh GAN

📖 Tài liệu học tập

- 📹 Bài giảng: Bộ Video với nội dung có chất lượng cực cao đến từ Trường Đại Học hàng đầu (bật mí có anh Justin Johnson cực kỳ đẹp treai 😍).
- 📝 Slide: Cực kỳ chi tiết và đầy đủ.
- 🌟 Chủ đề mới: Các chủ đề mới như Transformer,… thì không có các video bài giảng (vì video trên YouTube từ năm 2017) nên các bạn sẽ phải chịu khó tự học và tự tìm hiểu một xíu thôi vì slide rõ ràng chi tiết lắm 💘.

💪 Bài tập

Các bài tập khá thử thách và tốn thời gian nhưng mang lại giá trị to lớn:

- Tận hưởng cảm giác “đau khổ” khi implement lại các thành phần quan trọng của mô hình ❤️‍🩹.
- Hiểu sâu về cách hoạt động của mô hình thông qua thực hành.

⭐ Điểm mạnh

1. 📌 Tiến trình logic
- Chương trình được cấu trúc tốt
- 🔎 Động lực rõ ràng cho mỗi khái niệm mới
- Kết nối chặt chẽ giữa các bài giảng
2. 📐 Nền tảng toán học
- Mỗi bài giảng đều có phần toán học liên quan
- 📉 Chi tiết về đạo hàm ma trận và tối ưu hóa
3. 🎤 Chất lượng giảng dạy
- Phong cách trình bày lôi cuốn
- Giải thích rõ ràng
- 📚 Bao quát toàn diện các chủ đề
- Instructor đẹp trai, xinh gái (nhất là instructor Justin Johnson ^^)***

🔥 Đặc điểm nổi bật

- 📚 Kết hợp khái niệm lý thuyết với thực hành
- 💻 Tập trung vào implement bằng PyTorch

🔗 Tài nguyên khóa học

Khóa học được công khai trên 🌐 website của Stanford, bao gồm:
🎥 Video bài giảng đầy đủ (đến 2017)
📄 Bộ slide chi tiết
🏋️ Bài tập lập trình
📚 Tài liệu đọc thêm (Đọc 8 đời không hết…)

🎖️ Lời cảm ơn
Xin cảm ơn các giảng viên:
- 👨‍🏫 Justin Johnson
- 👩‍🏫 Serena Yeung
- 👩‍🏫 Fei-Fei Li

Đã công khai khóa học này và duy trì chất lượng cao trong suốt những năm qua.

🎯 Đối tượng phù hợp

Khóa học này lý tưởng cho:
- 🏫 Sinh viên có nền tảng toán học tốt
- 🤖 Người quan tâm đến ứng dụng deep learning trong computer vision
- 👨‍💻 Các kỹ sư muốn hiểu sâu về mô hình CV từ nguyên lý cơ bản

✅ Yêu cầu tiên quyết

- 🐍 Kỹ năng lập trình Python tốt
- 🎓 Kiến thức machine learning cơ bản (tương đương CS229)
- 📊 Đại số tuyến tính và giải tích

⏳ Thời gian cần thiết

Khóa học đòi hỏi đầu tư thời gian đáng kể cho:

- 🧐 Hiểu các khái niệm lý thuyết
- 🛠️ Hoàn thành bài tập lập trình
- 📄 Đọc và implement các paper nghiên cứu
- 🔍 Nghiên cứu slide chi tiết (đặc biệt với các chủ đề mới)

🏆 Kết luận

CS231N nổi bật như một khóa học xuất sắc về computer vision và deep learning. Dù đòi hỏi cao, nó cung cấp nền tảng toàn diện về kỹ thuật computer vision hiện đại, là nguồn tài nguyên vô giá cho bất kỳ ai nghiêm túc theo đuổi lĩnh vực này.

💬 P/s: Nếu các bạn quan tâm đến chủ đề cụ thể nào trong khóa học, hãy để lại comment phía dưới nhé. Mình sẽ chia sẻ chi tiết hơn về những chủ đề đó, đặc biệt là những phần được cover trong CS231N. Có thể là về model architecture, optimization, các kỹ thuật training hiện đại, hay bất kỳ vấn đề nào liên quan đến Computer Vision mà các bạn đang tìm hiểu.

-----------------------------------
📧 HÀI HƯỚC NHÂN TẠO - ANGELA
📩 Email: [email protected]
📌 Fanpage: Hài Hước Nhân Tạo
🖥️ Github: https://github.com/PhamPhuHoa-23

Address

Phường Linh Trung
Ho Chi Minh City
700000

Website

Alerts

Be the first to know and let us send you an email when Hài Hước Nhân Tạo posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Share