Optical flow estimation – part 1

1. Giới thiệu

Optical flow là khái niệm chỉ sự chuyển động tương đối của các điểm trên bề mặt một đối tượng, vật thể nào đó gây ra, dưới góc quan sát của một điểm mốc (mắt, camera…). Sự chuyển động của các vật thể (mà thực tế có thể coi là sự chuyển động của các điểm trên bề mặt của vật thể ấy) trong không gian 3 chiều, khi được chiếu lên một mặt phẳng quan sát 2D được gọi là motion field. Nói chung, mục đích của các phương pháp optical flow estimation là để xác định (xấp xỉ) motion field từ một tập các frame ảnh thay đổi theo thời gian, chúng được sử dụng rộng rãi trong các bài toán object segmentation, motion detection, tracking… (phần intro này có thể hơi chuối).

Có nhiều kĩ thuật xác định optical flow khác nhau như correlation, matching, feature-tracking, energy-based… nhưng bài này – dựa trên một chương sách của David Fleet [1] – sẽ tập trung vào các phương pháp dựa trên gradient. Các phương pháp khác cũng đã được Fleet khảo sát trong [2].

Ý tưởng quan trọng của phương pháp tính optical flow dựa trên gradient là giả định sau:

Bề ngoài của đối tượng không có nhiều thay đổi (về cường độ sáng – intensity) khi xét từ frame thứ n sang frame n+1.

Nghĩa là I(\vec{x},t) = I(\vec{x} + \vec{u}, t+1)     (1).

Trong đó I(\vec{x},t) là hàm trả về cường độ sáng của điểm ảnh \vec{x} tại thời điểm t (frame thứ t). \vec{x}=(x,y)^{\intercal} là tọa độ của điểm ảnh trên bề mặt (2D), \vec{u}=(u_1,u_2) là vector vận tốc, thể hiện sự thay đổi vị trí của điểm ảnh từ frame thứ t sang frame t+1. Mặc dù có vẻ không thực tế, nhưng nhiều công trình cho thấy giả sử (1) làm việc khá tốt trong thực tế.

Sử dụng khai triển Taylor, ta xấp xỉ:

I(\vec{x} + \vec{u}, t+1) \approx I(\vec{x}, t) + \vec{u}\cdot\nabla I(\vec{x}, t) + I_t(\vec{x}, t)    (2).

với \nabla I = (I_x, I_y), và I_t(\vec{x}, t) là đạo hàm tức thời của I tại thời điểm t.

Bỏ qua các phần tử có bậc đạo hàm cao hơn trong (2), so sánh (1) và (2), đồng thời xấp xỉ I_t(\vec{x}, t) bằng \delta I(\vec{x}, t) \equiv I(\vec{x}, t+1) - I(\vec{x}, t), ta nhận được phương trình sau, gọi là phương trình ràng buộc gradient (gradient constraint equation, còn gọi là phương trình optical flow)

\LARGE{\nabla I(\vec{x}, t)\cdot\vec{u} + I_t(\vec{x}, t) = 0} (3).

Phương trình (3) còn có thể đạt được bằng cách xuất phát ngay từ giả thiết ban đầu của chúng ta là giá trị độ sáng của điểm ảnh \vec{x} không thay đổi từ frame t sang t+1, như vậy:

\frac{d}{dt} I(\vec{x}(t), t) = \frac{\delta I}{\delta x} \frac{dx}{dt} + \frac{\delta I}{\delta y} \frac{dy}{dt} +\frac{\delta I}{\delta t} \frac{dt}{dt} = \nabla I\cdot\vec{u} + I_t = 0.

Phương trình (3) là phương trình cơ bản của optical flow, trong đó \vec{u} = (u_1, u_2) chính là flow cần tìm. Tuy nhiên phương trình này có dạng A\cdot u_1 + B\cdot u_2 + C = 0 với 2 ẩn là u_1u_2 nên không giải được. (Ta có nhận xét rằng phương trình (3), với ẩn \vec{u}=(u_1, u_2), là phương trình đường thẳng trong 2D với vector pháp tuyến là \nabla I)

Mọi phương pháp ước lượng optical flow đều xoay quanh việc cố gắng tìm thêm một phương trình nữa để tính \vec{u}.

2. Least-Squares estimation

Để tìm thêm một ràng buộc nữa cho \vec{u}, ta có thể dùng đến các điểm ảnh lân cận với điểm ảnh đang xét, với giả sử là các điểm ảnh lân cận này cũng nằm trên vật thể và chuyển động với cùng vận tốc của điểm ảnh đang xét. Trong thực tế, các điểm ảnh lân cận có thể không chuyển động cùng vận tốc với điểm ảnh đang xét, do đó ta tìm vector vận tốc mà làm cực tiểu bình phương lỗi [3]:

E(\vec{u})=\sum_{\vec{x}}{g(\vec{x}){[\vec{u}\cdot\nabla I(\vec{x}, t) + I_t(\vec{x}, t)]}^2}    (4)

Phương pháp này gọi là Least-squares (LS) estimation, trong đó g(\vec{x}) xác định “độ rộng” mà estimator này bao phủ. Thông thường người ta chọn hàm Gaussian. Vận tốc cần tìm là giá trị \vec{u} làm cực tiểu E(\vec{u}).

Người ta chứng minh được E(\vec{u}) đạt cực tiểu tại điểm đạo hàm riêng của nó bằng zero, nghĩa là:

\frac{\delta E(u_1, u_2)}{\delta u_1} =\sum_{\vec{x}}{g(\vec{x}) \cdot [u_1 I_x^2 + u_2 I_x I_y + I_x I_t]} =0,

\frac{\delta E(u_1, u_2)}{\delta u_2} = \sum_{\vec{x}}{g(\vec{x})\cdot [u_2 I_y^2 + u_1 I_x I_y + I_y I_t]}=0

Hai phương trình này có thể viết ở dạng ma trận:

M\cdot \vec{u} =\vec{b}         (5)

với:

\mbox{M =}\left[ \begin{array}{cc} \sum{gI_x^2} & \sum{gI_x I_y} \\ \sum{gI_x I_y} & \sum{gI_y^2} \end{array} \right], {~}\vec{b} = -{\left( \begin{array}{c} \sum{gI_x I_t} \\ \sum{gI_y I_t} \end{array} \right)}

Nghiệm của (5) là \hat{u} = M^{-1} \vec{b}.

Một số lưu ý với LS estimator

1. Thông thường ta phải tính M và \vec{b} tại mỗi điểm \vec{x} trên ảnh, nghĩa là tính M(\vec{x})\vec{u}(\vec{x}) = \vec{b}. Do đó để tăng tốc độ, ta có thể tính trước các đạo hàm của ảnh (I_x^2, I_x I_y, I_y^2, I_t, I_t^2), sau đó convolution các ảnh đạo hàm này với kernel hàm Gaussian.

2. Khi tính các đạo hàm của I, nếu chỉ tính đơn giản theo kiểu I_x(x, y) = I(x, y) - I(x+1, y) thì có thể không xấp xỉ được tốt giá trị của đạo hàm. Ta có thể nghĩ đến cách dùng một smooth filter nào đó trước khi tính đạo hàm để làm giảm các giá trị peak có trong ảnh.

3. Trong (5), nếu M không là ma trận khả nghịch thì sẽ không giải được. Nếu như kernel gaussian quá nhỏ thì nguy cơ M khộng khả nghịch sẽ cao, tuy nhiên điều quan trọng không phải là kích thước kernel, mà là ở tính đa diện của vật thể trên ảnh. Ngay cả khi hàm Gaussian có kích thước lớn, nếu dữ liệu trên ảnh đa phần biến thiên theo một chiều nhất định thì M vẫn có thể không khả nghịch.

Tham khảo

[1] Fleet, D.J. and Weiss, Y., Optical flow estimation, Mathematical models for Computer Vision: The Handbook. N. Paragios, Y. Chen, and O. Faugeras (eds.), Springer, 2005.

[2] J. L. Barron, D. J. Fleet, and S. S. Beauchemin. Performance of optical flow techniques. International Journal of Computer Vision, 12(1):43–77, 1994.

[3] B. D. Lucas and T. Kanade. An iterative image registration technique with an application in stereo vision. In Seventh International Joint Conference on Artificial Intelligence, pages 674–679, Vancouver, 1981.

Advertisements

42 comments

  1. Chao ban, minh khong biet la ban da doc qua giai thuat cua Horn va Schuck chua?
    Neu doc qua roi, ban co the giai thich giup minh mot chut ve vai tro cua weighting parameter alpha duoc khong?
    No co quan trong khong, va gia tri cua no la bao nhieu thi ok. Minh doc tai lieu Determining optical flow cua Horn va Schunck nhung bi confused qua.
    Cam on neu ban co thoi gian tra loi giup minh.

  2. Hi trang,
    Trong phương pháp của Horn và Schuck, hàm mục tiêu để tối thiểu hóa là
    E=\alpha^2E_c + E_b (công thức trong phần 9 của paper)
    trong đó E_c là (xấp xỉ của) đạo hàm bậc 2 của vector vận tốc \mathbf{u} theo vị trí \left(x, y\right) (phần 5 paper), E_b là vế trái của phương trình optical flow.
    Một cách nôm na, E_c = 0 khi mức độ biến thiên của \mathbf{u} là “mượt”, nghĩa là tất cả các điểm trong frame ảnh đều chuyển động với vận tốc bằng nhau (hoặc gần bằng nhau). Đạo hàm bậc 1 của \mathbf{u} theo vị trí \left(x, y\right) chính là mức độ thay đổi của \mathbf{u}. Khi E_c=0 thì sự thay đổi này là như nhau tại mọi điểm trong ảnh. Đây chính là cơ sở của phương pháp Horn-Schuck.
    Mục đích của bài toán optical flow là tính \mathbf{u}. Do đó vấn đề trở thành một bài toán tối ưu: tìm \mathbf{u} = \left(u_x, u_y\right) sao cho E_c = 0E_b = 0, nghĩa là E_c + E_b = 0.
    Tuy nhiên bài báo của Horn-Schuck cũng nói rõ trong thực tế ảnh thu được sẽ bị nhiễu do lượng tử hóa hoặc do lỗi của thiết bị, vì vậy rất khó để E_b = 0. Như vậy nếu sử dụng hàm mục tiêu là E_c + E_b = 0 thì trong quá trình giải, sẽ có khả năng E_c hội tụ về 0 rất nhanh, trong khi E_b thì khó, hoặc không thể hội tụ về 0, khi đó sẽ không tìm được lời giải, hoặc nhận được lời giải không chính xác.
    Để đảm bảo trong quá trình giải, cả 2 đại lượng E_cE_b cùng hội tụ về 0 thì \alpha được thêm vào như trên (để đảm bảo E_c cũng “khó hội tụ” như E_b). Cũng có thể coi \alpha là một dạng tham số chuẩn hóa (regularization).
    Như vậy giá trị của \alpha phụ thuộc vào mức độ nhiễu của ảnh. Hơn nữa khi \alpha càng lớn thì E_c càng khó hội tụ về 0, khi đó giá trị của optical flow nhận được sẽ “mượt” hơn, nghĩa là tốc độ di chuyển tại các pixel trên ảnh rất đều nhau. (Tóm lại là \alpha càng lớn thì optical flow càng đồng đều tại các điểm ảnh).
    Thực tế Horn-Schuck cũng nói \alpha tỉ lệ thuận với nhiễu. Như vậy giả sử ta tin rằng ảnh bị nhiễu 1% thì \alpha bằng 0.01, 0.02, 0.03…. đều được. Tiếc là trong các thí nghiệm, Horn-Schuck hình như không ghi rõ giá trị của \alpha? Mình nghĩ rằng cái này tùy thuộc vào thí nghiệm và dữ liệu của bạn thôi.

  3. Chao Vu, ban giai thich rat ro, cam on ban nhieu nha. Ban co the giai thich them giup minh mot so van de nua duoc khong? Minh doc ma duoi qua. Minh nghi minh chua hieu ro lam hinh so 4, tai sao cac tinh toan cuc tieu hoa khong dung lai o muc so 9, ma minh phai tinh them, dung phuong phap lap thi chac la do tinh toan nhanh hon. Nhung khi qua cac thi nghiem thi minh hoan toan confused, khong hieu diem khac nhau chinh giua cac thi nghiem trong tai lieu la gi? Ban giai thich giup minh nhe. Cam on ban nhieu lam.

  4. Cac thi nghiem thi minh cung hieu so so roi. Ban co the giai thich giup minh tai sao viec tinh toan khong dung lai o section 9, ma phai can co them muc 10, 11 duoc khong? Lap di lap lai viec tinh toan (iteration) o day de lam gi? so lan lap co quan trong khong? Co phai moi lan lap la mot frame thoi gian moi khong? vi du di tu frame t den frame t +1 thi can mot lan lap. Va ban co the giai thich so so cho minh hieu hinh so 4 dduoc ko? Cam on ban nhe.

  5. Chao Vu, minh doc den doan trang 192, thi thay rang : Finally we can see that alpha plays a significant role only for areas where brightness gradient is small. Theo minh hieu brightness gradient la small khi Eb gan nhu bang khong (brightness constancy) , nhung theo nhu ban giai thich thi Eb rat kho bang 0. Nhung cai dong nay lai bao alpha chi dong vai tro quan trong trong khi brightness gradient gan nhu bang 0. Co gi confused cho nay khong? Ve mat lam cho toc do hoi tu ve 0 cua brightness va velocity gan nhu nhau thi minh hieu roi.

  6. Cho minh hoio them cau nua, tai sao o muc so 14 lai phat bieu rang solution is most accurately determined in regions where the brightness gradient is not too small and varies in direction from point to point.

  7. Tai mot frame thoi gian , minh co the iteration may lan vay ban? Theo minh doc tai lieu thi tai mot frame co the thuc hien iteration nhieu lan.

  8. Hi trang, bạn hỏi dồn dập quá, từ từ mình giải thích từng điểm như sau 😀
    1. Hình 4 thể hiện mối liên quan giữa (u, v) với (E_x, E_y)(\bar{u}, \bar{v}). Giá trị hợp lí của (u, v) phải nằm trên constraint line (vuông góc với (E_x, E_y), do tính chất của pt optical flow), đồng thời vector (u-\bar{u}, v-\bar{v}) cũng phải vuông góc với constraint line (do tính chất của 2 phương trình trong mục 10).

    2. Tại sao không dừng lại ở mục số 9? Hai phương trình trong cuối phần 9 và đầu phần 10 thực chất chỉ là 1 phương trình (GIống hệt nhau nếu thay thế u bằng v hoặc v bằng u). Như vậy khi kết hợp với phương trình optical flow thì mỗi pixel trên ảnh sẽ có 2 phương trình, từ đó mới giải được cả u và v.

    3. Tại sao phải lặp? Mỗi pixel ta có 2 phương trình, như vậy với mỗi frame có 2*w*h phương trình (w, h là rộng và cao của frame ảnh). Mục tiêu của ta là giải toàn bộ các phương trình này. Các phương trình này tạo thành hệ phương trình tuyến tính, có thể viết dưới dạng ma trận. Tuy nhiên kích thước ma trận này rất lớn. Như đã nói trong phần 12, để giải hpt này thì các phương pháp trực tiếp như Gaussian elimination là không thực tế, do đó tác giả sử dụng phương pháp lặp Gauss-Seidel để giải. Tất nhiên bạn có thể ddùng các phương pháp lặp khác. Có rất nhiều phương pháp như thế, và Gauss-Seidel chỉ là một lựa chọn.

    4. Số lần lặp? Số lần lặp hoàn toàn phụ thuộc vào kết quả mà bạn muốn nhận: theo mình biết thì trong các phương pháp lặp để giải hpt tuyến tính, càng lặp thì lời giải càng hội tụ về nghiệm chính xác (tất nhiên khi đó thời gian tính toán sẽ tăng). Cứ mỗi frame ta lại có một hệ pt tuyến tính, và để giải hpt tuyến tính đó thì phải lặp (nếu sử dụng phương pháp lặp). Như vậy số lần lặp không liên quan gì tới frame ảnh.

    5. Về alpha “Finally we can see that alpha plays a significant role only for areas where brightness gradient is small”. Brightness gradient mà tác giả đang nói ở đây là sự thay đổi brightness giữa các pixel lân cận trong cùng một frame. Còn E_b mà mình nói là sự thay đổi brightness tại một pixel cố định qua các frame khác nhau. Hai cái này là khác nhau, bạn cần phân biệt 😀 Theo đó rõ ràng trong cùng 1 frame tại thời điểm t thì các pixel lân cận rất có thể có brightness gần nhau, còn xét tại một pixel nhất định (giả sử là pixel (5, 5)) thì brightness của pixel này tại frame thứ t+1 rất khó để bằng với giá trị của nó trong frame thứ t (do nhiễu thiết bị, do lượng tử hóa v.v….), chưa kể thời gian càng dài thì sự thay đổi càng lớn.
    Trên đây chỉ là cách hiểu của mình, mình không nói là cách hiểu này đúng hoàn toàn, bạn cần critical thinking nhé 😀

  9. Chao Vu, thank ban nhhieu nha, minh nghi ban hieu rat ro, ban gioi thiet. Laplacian cua optical flow =0 khi nao, tien den vo cuc khi nao vay ban, co phai tien den vo cuc khi khong tinh duoc derivative khong, co phai khi bi occluding bound khong?

  10. Hi trang,
    Trong trường hợp này thì Laplacian của optical flow là đạo hàm riêng bậc 2, như vậy nếu Laplacian bằng 0 thì có nghĩa là đạo hàm bậc 1 của optical flow không đổi, mà đạo hàm bậc 1 không đổi thì nghĩa là bản thân optical flow biến thiên đều. (Cũng giống như 1 cái xe chạy với gia tốc = 0 thì nghĩa là vận tốc không đổi, tức là đang chuyển động nhanh dần đều hoặc chậm dần đều).
    Ngược lại khi laplacian tiến ra vô cực thì đạo hàm bậc 1 biến thiên đột ngột.
    Từ ý nghĩa “lý thuyết” này, áp dụng vào thực tiễn thì sẽ có được ý nghĩa “nôm na” của nó.
    Trong trường hợp cụ thể này thì còn tùy Laplacian theo chiều nào: tọa độ (x, y) hay là thời gian. Nếu là theo (x, y) thì có thể hiểu nôm na rằng sự thay đổi của flow là “smooth” theo tọa độ.

  11. Hi Vu, ban co biet tai sao lai co moi lien he giua Eb va Ec khong? Vi theo minh nghi, tai lieu Horn muon noi rang can cuc tieu hoa Eb va Ec. Hai thanh phan error nay phai co lien quan gi day thi moi can alpha dung khong? Chu khong thi manh thang nao thi tinh thang nay thoi, tuc la minh nghi Ec neu hoi tu ve 0 nhanh thi cung khong dinh dang gi den Eb. Co moi lien quan gi giua anh sang va toc do o day thi phai?
    Phuong trinh o trang so 7, muc so 9, co hai dau tich phan: alpha(binh phuong)*Ec(binh phuong) + Eb(binh phuong). Minh nghi y nghia hinh hoc cua no quan trong. Tai sao chi co hai thanh phan dx va dy ma khong co dt, co phai no dang cuc tieu hoa error theo khong gian? Khong phai theo thoi gian.
    Tai sao van de cuoi cung cua optical flow la di tim (u,v) ma cuc tieu hoa nhung loi tren, co phai optical flow chi la phuong phap uoc luong motion field cho nhung motion ma duoc gia dinh co brightness constancy va velocity constancy khong?
    Alpha duoc su dung de lam tang muc do error cua Ec dung khong ban?
    Co phai muc dich cuoi cung cua optical flow la de tracking chuyen dong cua mot vat khong? Vi du minh co mot vat chuyen dong, minh muon biet chuyen dong ke tiep cua vat do la gi thi minh se su dung optical flow de tien doan truoc chuyen dong day?
    Minh hieu dung ko? Hay sai bet roi? 🙂 Thanks Vu. Happy new year 🙂

  12. Hi trang,
    Tại sao phải có sự ràng buộc giữa Eb và Ec? Câu hỏi cũng thú vị. Mình chưa nghĩ kĩ về mối liên hệ nếu có giữa brightness và velocity, nhưng từ góc nhìn toán học thuần túy, có thể thấy không thể optimize Eb và Ec riêng biệt được. Eb là vế trái của pt optical flow, do đó Eb=0 chính là pt optical flow. Còn nếu optimize Ec=0 thì sẽ rơi vào trường hợp tầm thường khi u=\bar{u}v=\bar{v} tại tất cả mọi điểm trên ảnh. Rõ ràng ta đang muốn tìm thêm 1 phương trình nữa để tính (u,v), do đó optimize Eb+Ec là để tìm được phương trình thứ 2 này.
    Phương trình optimization của pp Horn-Schunck được tính trên toàn bộ frame ảnh hiện tại. Cái này bắt nguồn từ giả sử của Horn-Schunck khi lập ra phương trình thứ 2 (đại lượng Ec) để tính optical flow. Cụ thể Horn-Schunck giả sử rằng tại mỗi frame thứ t, tại mọi pixel thì Eb^2+Ec^2 = 0. Điều này tạo nên tính chất chính của phương pháp Horn-Schunck: advantages ở chỗ tính được flow ở tất cả pixel trên ảnh, disadvantages ở chỗ nhạy với nhiễu hơn so với các phương pháp local như của Lucas-Kanade.
    Nói chung giả định chính của các pp optical flow là brightness constancy, còn tùy giả định thứ 2 (để lập pt thứ 2) mà mỗi phương pháp khác nhau sẽ có tư tưởng khác nhau. Đúng là pp Horn-Schunck có giả định velocity constancy, nhưng các pp tính optical flow khác như Lucas-Kanade, Buxton… thì không nhất thiết như vậy.
    Nói alpha để tăng mức độ error thì có lẽ cũng chưa chuẩn lắm. Cứ nói chung chung là để chuẩn hóa, cân bằng giữa velocity và brightness chắc nghe dễ tin hơn 😀
    Nói chung optical flow hay ứng dụng trong các bài toán motion estimation, không nhất thiết là tracking. Về vấn đề này thì bài trên wiki (http://en.wikipedia.org/wiki/Optical_Flow) viết khá đầy đủ.

  13. Ah, minh hieu roi, thank ban nhe. Minh khong the phan beit dduoc su khac nhau giua 2 thi nghiem 1 va 2 cua Horn Schunck, Tai sao 2 thi nghiem nay lai dua ra hai ket qua khac nhau, thi nghiem thu 2 theo trong paper thi tot hon thi nghiem ban dau. Nhung minh khong hieu nguyen nhan vi sao tot hon.

  14. Hi trang, phần experiment của Horn-Schunck trình bày khá lung tung và có vẻ không đầy đủ ý. Mình đọc qua cũng không get được idea gì từ đó 😀
    Còn về Ec và Eb thì mình đọc paper của Horn-Schunck rồi hiểu như vậy, hoàn toàn không phải do thực nghiệm.

  15. 🙂 vay ha, minh nghi quan trong nhat khi tim hieu ve alpha la cai cau nay.
    Ban giai thich theo cach nghi cua ban thu xem nhe:
    Finally we can see that aZ plays a significant role only for areas where
    the brightness gradient is small, preventing haphazard adjustments to the
    estimated flow velocity occasioned by noise in the estimated derivatives.
    This
    parameter should be roughly equal to the expected noise in the estimate of
    Ex^2 + Ey^2.
    Minh nghi ban thu tap trung vao Ex^2 + Ey^2 xem sao.

  16. Vế này “This parameter should be roughly equal to the expected noise in the estimate of Ex^2 + Ey^2.” đơn giản chỉ là nói alpha nên tỉ lệ với nhiễu mong muốn trong quá trình optimize.

  17. Ha ha vay ha, minh dau co thay ban ghi cau do ra dau. Ma minh van chua hieu cai cau cuoi cung day quan trong lam day. Ma minh ko hieu no noi gi het. Ban giai thich gium minh duoc khong?

  18. oh, thi minh cung hieu la vay, nhung ma no dang estimate cai Ex^2 + Ey^2. Ex, Ey chac chan la brightness gradient roi. Nguoi ta dang mong muon no bi error, hoac noise trong qua trinh uoc luong no, tuc la neu no nho qua (too small) thi nguoi ta ko chap nhan, ma phai them alpha vao de tang no len ah :). Minh duoc biet brightness gradient qua nho la do bi under -estimate derivatives, tuc la computer khong the nao chua du lieu cua nhung brightness gradient nay, no qua nho so voi 0, vuot qua kha nang chua cua may tinh. Minh sure la vay.

  19. Nhung minh co den may cai slide o day ghi alpha = 10, alpha = 25 ban oi. Khi no binh phuong len lai can ac liet nua alpha^2 = 100, alpha^2=625.

  20. Ma no cung hop ly voi giai thich ban dau cua ban day, vi Ec hoi tu nhanh hon Eb nen no se can co alpha > 1 vao de lam cho no hoi tu cham lai. Khong phai ngay tu dau ban da nghi alpha > 1 sao 🙂

  21. À đúng rồi. Lúc đầu mình cũng hơi nghi ngờ vì \alpha < 1 thì càng nhân nó càng về 0. Alpha > 1 thì ok rồi.
    Vậy thì có thể hiểu vai trò của alpha là bổ sung vào cái thiếu sót của Ex và Ey. Ex và Ey là đạo hàm của brightness theo tọa độ, do vậy bị lỗi (error) do thiết bị hoặc trong quá trình lượng tử hóa (lượng tử màu thành 255 giá trị chẳng hạn: thực tế chụp 1 tờ giấy trắng nhưng pixel có thể có giá trị là 253, 254 hoặc 255…). Như vậy nếu lỗi càng lớn thì Ex và Ey càng lớn, nghĩa là Eb càng lớn, càng khó hội tụ về 0. Khi đó ta phải đặt alpha lớn thì Alpha*Ec mới càng khó hội tụ về 0. Nhờ đó hi vọng Alpha*Ec + Eb có thể cho ra kết quả mong muốn. Đây chính là ý nghĩa của “alpha tỉ lệ với độ lỗi mong muốn”. Theo đó nếu mình tin là file video/ảnh có lỗi lớn thì set alpha càng cao.

  22. Trang upload lên đâu đó (mediafire, 4shared…) rồi cho mình cái link là ok rồi ^^

    Bạn đang công tác/học ở đâu? Hiện mình có 1 reading group về Computer Vision, nếu bạn thích thì join để trao đổi cùng mọi người. Làm việc online và qua mail là chủ yếu 😉

  23. Hi em, trong truong hop mot qua cau sphere bi shading, khi no rotate, optical flow se la 0 tai tat ca cac diem tren anh, neu nhu shading khong move. Dung khong em?

  24. Dạ, nếu quả cầu đồng nhất về màu sắc, và trong quá trình rotate nó không thay đổi vị trí, thì trên lí thuyết là vậy 😀

  25. Hi em, khai niem spatial domain trong mean shift segmentation va filtering hoan toan khac trong optical flow phai khong? Optical flow la image sequence, giong nhu video, khong co lien quan gi den spatial domain. ?

  26. Hi chị, spatial domain thường để chỉ không gian 2 chiều (x-, y-) của các pixel trên ảnh. Trong vài trường hợp nó có thể là không gian cụ thể nào đó mà phải xét trong ngữ cảnh thì mới nói dc.

  27. Chi co lay mot doan code tren mang ve de chay thu Optical Flow

    #include
    #include
    #include
    #include

    int c;

    int usePrevious = 0; //one parameter of cvCalcOpticalFlowHS

    IplImage *velx=0;
    IplImage *vely=0;
    IplImage *bk_img=0;
    IplImage *gray_img=0; //the next frame (gray) used to track optical flow from the result
    //(foreground image of mixture model,the model is got from the previous frame);
    IplImage *fg_img=0; //foreground image obtained from mixture Gauss modeling
    int nFrame=0; // frame counter

    int main( int argc, char** argv )
    {
    char * filename = “D:\\handsnake.mpg”;
    CvTermCriteria IterCriteria;
    IterCriteria.type = CV_TERMCRIT_ITER;
    IterCriteria.max_iter = 100;

    //if(!color_img)
    //return;
    IplImage* frame = 0;
    CvCapture* capture = 0;

    cvNamedWindow(“Video”, CV_WINDOW_AUTOSIZE);
    cvNamedWindow(“VelY”, CV_WINDOW_AUTOSIZE);
    cvNamedWindow(“VelX”, CV_WINDOW_AUTOSIZE);

    CvGaussBGModel* bg_model=NULL;
    capture = cvCaptureFromFile(filename);
    for(;;)
    {
    nFrame++;

    frame = cvQueryFrame( capture );
    if( !frame )
    break;
    if (nFrame==1)
    { //Initialize Gauss Model
    fg_img =cvCreateImage(cvGetSize (frame),IPL_DEPTH_8U, 1);
    bg_model = (CvGaussBGModel*) cvCreateGaussianBGModel(frame, 0);
    bk_img = cvCreateImage( cvGetSize(frame), 8, 3 );
    //the image is to store x-component velocity
    velx = cvCreateImage(cvGetSize(bk_img),IPL_DEPTH_32F, 1);
    //the image is to store y-component velocity
    vely = cvCreateImage(cvGetSize(bk_img),IPL_DEPTH_32F, 1);

    cvCopy(bg_model->foreground,fg_img,0);
    }

    bk_img->origin = frame->origin;
    cvCopy(frame, bk_img, 0 );
    gray_img =cvCreateImage(cvGetSize(bk_img),IPL_DEPTH_8U, 1);
    gray_img->origin = bk_img->origin;
    cvCvtColor( bk_img, gray_img, CV_BGR2GRAY );

    cvShowImage(“Video”, fg_img);

    //calculate optical flow of every pixel which is not zero from foreground image.
    //the foreground image is a white-black image,that the object that we are interested is white,
    //the other background pixels are black.

    cvCalcOpticalFlowHS
    (fg_img,gray_img,usePrevious,velx,vely,0.1,IterCriteria);

    cvShowImage( “VelX”, velx );
    cvShowImage( “VelY”, vely );

    cvUpdateBGStatModel(frame, (CvBGStatModel *)bg_model );
    cvCopy(bg_model->foreground,fg_img,0);

    c = cvWaitKey(10); // wait for 10 ms or keystroke
    if(c == 27) // ESC
    break;
    }
    cvReleaseImage(&gray_img);
    cvReleaseImage(&fg_img);
    cvReleaseImage(&velx);
    cvReleaseImage(&vely);

    cvDestroyAllWindows();
    return 0;
    }

    ma chay den cai doan
    capture = cvCaptureFromFile(filename);
    no chet toi.
    Bao loi violation access, crash
    Em biet tai sao khong? Cai file path duong dan cua chi ro rang, debug den do thay khong co gi, hinh nhu no khong mo ra duoc hay sao ay.

  28. Hi chị,
    Chị thử đổi sang file movie khác xem thử được không (tốt nhất là phim AVI). Nếu không được thì có thể do bản OpenCV của chị bị lỗi, chị download mã nguồn OpenCV về biên dịch lại thử xem.

  29. oh, chi chay may ham khac cua openCV thi ok. Chi co cai ham ay. Chi doi file avi hoac file movie gi cung bi loi. Em chay duoc khong?

  30. Hi em, thank em da giup chi tra loi nhieu cau hoi nhe. Dong dat co anh huong den em nhieu khong? Chuc em moi su tot lanh nhe!

  31. Chào anh Vũ, hiện em đang làm khóa luận tốt nghiệp về xác định vận tốc xe sử dụng pp Optical Flow, như em có nhiều thắc mắc lắm, em tìm mail anh nhưng không thấy, anh có thể cho em xin mail để em hỏi anh một số thứ được không ạ.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s