Detect biên của stripe của coded light patern trong Structured Light 3D camera?

Discussion in 'Computer science & Electrical Engineering' started by thangnghien, Jul 31, 2009.

  1. thangnghien

    thangnghien Thèm thuồng

    Chào các bác, em đang lúi húi và bị stuck trong cái vụ detect biên của stripe này.
    Bọn em dùng inverse Gray code cho pattern, để tìm biên cho các stripe thì em tìm điểm giao của 2 stripe cạnh nhau, đây cũng là cách phổ biến hay dùng. Nhưng có điều là gặp phải cái object có bề mặt phức tạp như là con gấu bông lông xù gì đó thì chắc chắn là biên của các layer khác nhau sẽ không trùng nhau, nên cái correspondence cũng bị sai nốt.
    GS yêu cầu phải làm sao detect được chính xác cái biên này, em ngồi cả mấy tuần rồi mà vẫn không ra, đang rất nản.
    Có bác nào cùng mảng này vào thảo luận cùng em với ạ.
     
  2. goahead

    goahead Thèm thuồng

    Chu de hay day, bac chu topic co the mieu ta them chut nua de nguoi khong biet nhu toi co the thao luan khong? Guc ko tim thay cai camera nao ca, chi co scanner, khong biet co phai bac noi ve cai nay khong?

    Structured Light 3D scanner.

    Structured-light 3D scanner - Wikipedia, the free encyclopedia

    Cai coded light patern co phai y bac noi den cai projected light patterns nay khong?

    Structured light - Wikipedia, the free encyclopedia

    Tutorial_Coded_Light_Projection_Techniques 1

    PS: sao ko go duoc tieng viet nhi, mac du da chon trong AVIM control
     
  3. thangnghien

    thangnghien Thèm thuồng

    Đúng nó đấy ạ. Nó có thể gọi là Structured light 3D camera hoặc scanner.

    Cấu trúc của nó thì gồm 1 projector (presentation projector phổ biến hơn là dùng laser projector) và 1 hoặc nhiều camera. Phía projector sẽ chiếu các pattern đã được mã hóa (hay là cái structured light như bác tìm thấy ấy). Phía camera sẽ capture và giải mã để tìm ra các correspondence, và dùng triangulation để khôi phục tọa độ 3D của các điểm đó. Ưu điểm của cái structured light camera này là tạo ra 3D point cloud có độ chính xác cao và có mật độ cao, bất kể là texture hay textureless surface, hơn hẳn các 3D camera dùng 2 camera (loại này thì khó có thể khôi phục 3D point cloud của textureless surface).

    Hiện nay thì người ta chỉ chủ yếu tìm cách mã hóa pattern để giảm thiểu số pattern cần phải chiếu (để tiết kiệm thời gian), nếu dùng Inverse Gray code thì phải chiếu đến 16 pattern. Còn cái issue của em chỉ là minor thôi, tức là khi chiếu patterns ra rồi, camera capture rồi, giốgn như cái hình sau:

    [​IMG][​IMG]

    thì vấn đề đặt ra là làm sao tìm chính xác được cái biên của các sọc đen trắng đó, cho tới sub-pixel. Việc tìm biên này đối với các object có bề mặt không xù xì thì tương đối đơn giản và chính xác bằng cách tìm giao điểm của 2 cái stripe cạnh nhau như em đã nói ở trên. Nhưng bề mặt nó xù xì hay nhiều lông như con chó hoặc cái sofa này chẳng hạn:

    [​IMG]

    Thì việc tìm biên chính xác và để biên các layer trùng nhau thì không dễ. Không biết với những trường hợp thế này ánh sáng có bị khúc xạ gì không. Nhưng ít ra mình cũng phải quan tâm đến cái stripe bị blur khi chiếu ra.

    Các bác tham gia góp vui cho cái topic này với ạ.

    PS: tốt nhất bác goahead dùng thêm cái Unikey hay Vietkey gì đó gõ tiếng Việt cho tiện.
     
    goahead likes this.
  4. goahead

    goahead Thèm thuồng

    Toi van chua hieu cau hoi cua bac lam? khong hieu bac de cap den layer la sao? va giao cua cac stripe la nhu the nao? Cai anh ve face thi ro rang roi, tuy nhien anh ma bac phai xu ly tren con cho bong do thi toi van chua minh dung ra duoc. Bac cho them cai anh con cho bong sau khi chieu cai projector len be mat xem no nhu the nao?

    Toi nghi con viec cua bac chac la lien quan den Image processing nhieu hon.

     
  5. thangnghien

    thangnghien Thèm thuồng

    Đúng là em hơi thiếu sót giải thích chỗ layer của code này, nó như ở hình. Giả sử code này có 3 layer 1, 2, 3; mỗi layer sẽ có 4 pattern của nó; projector sẽ lần lượt chiếu các pattern này và camera capture (như hình), ở hình, mỗi layer em chỉ để 1 pattern cho dễ nhìn.

    [​IMG]

    Khi detect biên của các stripe thì yêu cầu biên của các stripe trong các layer khác nhau ở các vị trí có khung màu xanh là phải trùng nhau, tại vì tại các vị trí này trong các pattern tương ứng ở phía projector là nó trùng nhau. Đây là hình các pattern được chiếu lên mặt phẳng, nhìn nó dễ thấy thế này, nhưng khi chiếu lên mấy con thú bông thì tìm biên làm sao để đạt yêu cầu trùng nhau như trên thì là cái em đang đau đầu (hình dưới).

    [​IMG]


    Đúng là cái vấn đề này liên quan nhiều đến xử lý ảnh, nhưng phải xử lý làm sao để cái vị trí biên không bị xê dịch khỏi vị trí ban đầu. Em nghĩ cũng phải quan tâm đến vấn đề optic nữa.
     
    Last edited: Aug 1, 2009
  6. goahead

    goahead Thèm thuồng

    Ah toi hieu ve layer roi, cam on bac da giai thich. Cai pattern cua bac hinh nhu no thay doi do nghieng tu pattern 1 toi 4 thi phai? Neu no thay doi do nghieng nhu the thi sao o cac layer lai trung nhau o camera caupture duoc nhi? toi van chua hinh dung ra duoc cai nay.

    Toi thu thao luan voi bac mot cai giai phap xap xi xem nhe. Gia su neu bac thay vi tim bien cua cac pattern, bac tim cai duong nam giua hai bien do? Lam nhan (smooth) no theo cach nao do? roi tim giao cua cac duong thang do thay vi pattern thi theo bac se nhu the nao?

    Toi noi the vi neu la scanner, toi gia su chieu sau cua object toi scanner la co dinh. Nhu vay be rong cua cac stripe len object la hoan toan co the biet duoc??? viec bac lay duong nam giua hai bien cua stripe cung co the dung no de reconstruct lai hai cai bien do??? ma co the trach duoc cai go ge cua hai bien, do long con thu do tao nen???

    Hoac neu khong cung co the lam nhan no bang cach dung mot line scan doc cai anh, cu khoang bao nhieu pixel thi bac chon vai diem la gia tri trung binh cua cac diem khac, roi thay no bang mot curve co gia tri ham mu nao do??? Khi do cai bien do cua bac se it bi sai so tai mot diem, ma long cua con thu nho len hoac thut xuong tao nen mot bien go len hoac lom vao.
     
  7. thangnghien

    thangnghien Thèm thuồng

    Cảm ơn bác goahead đã cùng thảo luận. Bác có thể gõ tiếng Việt có dấu được không (dùng thêm cái unikey hoặc vietkey là ok), đọc không có dấu cũng hơi nhức mắt.

    Em giải thích lại 1 tý chỗ cái projector chiếu các pattern, bác có vẻ đang hiểu sai chỗ này. Trong mỗi layer có 4 cái pattern, cái pattern ở đây nghĩa là 1 cái ảnh có kích thước full màn hình, thường là 1024x768, mỗi pattern có thể có 1 hoặc nhiều stripe: mỗi pattern của layer 1 thì chỉ có 1 stripe, của layer 2 thì 4 stripes, ... Trong cái hình vẽ đầu là chỉ vẽ biểu trưng thôi, nghĩa là ở mỗi layer có 4 pattern như thế với số lượng và vị trí của stripe trong mỗi pattern là như thế, các stripe được dịch chuyển theo thứ tự các pattern là do mã hóa quy định. Chứ không phải pattern thay đổi độ nghiêng. Projector sẽ chiếu lần lượt như sau:

    pattern 1 của layer 1 -> camera capture xong, chuyển qua chiếu:
    pattern 2 của layer 1 -> camera capture xong, chuyển qua chiếu:
    pattern 3 của layer 1 -> camera capture xong, chuyển qua chiếu:
    pattern 4 của layer 1 -> camera capture xong, chuyển qua chiếu:

    pattern 1 của layer 2 -> camera capture xong, chuyển qua chiếu:
    pattern 2 của layer 2 -> camera capture xong, chuyển qua chiếu:
    pattern 3 của layer 2 -> camera capture xong, chuyển qua chiếu:
    pattern 4 của layer 2 -> camera capture xong, chuyển qua chiếu:

    ......

    nó là như thế này đây ạ: (không biết trong hình này họ dùng code gì, giống giốgn Gray code)

    [​IMG]


    Thực ra lâu nay thì vẫn phải dùng cái đường nằm giữa 2 biên đó ạ, nhưng kết quả nó không chính xác, nên em mới phải kiếm cách khác đây. Làm smooth trong trường hợp này nhiều lúc cũng bất lợi là nó sẽ làm dịch chuyển vị trí của biên, (về mặt lý thuyết thì kô nhưng khi có nhiễu thực tế vào thì nó sẽ làm dịch chuyển)


    Cái bề rộng của stripe là kô biết được đâu ạ, vì bề mặt của object là không biết trước, nó có thể tròn, fẳng vuông góc với projector hoặc bị nghiêng (slanted).
     
  8. goahead

    goahead Thèm thuồng

    Đúng là tôi hình dung sai khi nói các stripe có bề rộng giống nhau. Tôi hình dung bài toán trên mặt phẳng và đối điện với scanner mà quên mất là bác cẩn phải scan cả cái chiều sâu của bề mặt object.

    Làm smooth trên đường biên của stripe tùy thuộc vào phương pháp bác sử dụng nữa. Cách đơn giản nhất là tính giá trị mean của các điểm lân cận. Bác cũng có thể suy nghĩ thêm những cách khác linh hoạt hơn, nhưng sẽ làm bài toán phức tạp hơn.

    Để tôi thử nghĩ theo hướng nhìn khác ngoài IP ra xem có cái gì hay thảo luận với bác không. Dang nghi he nen nhieu cai de choi qua :D.

     
  9. thangnghien

    thangnghien Thèm thuồng

    Em đang thử làm theo kiểu xử lý tín hiệu. Cứ xét theo từng hàng của ảnh, thì sẽ thu được các edge, thực ra các edge này được model là error function (tích phân của Gaussian function).
    Cái nguyên nhân gây ra sai lệch biên em nghĩ là do ở layer 4, các stripe nó nhỏ nên ánh sáng trung bình là yếu, yếu hơn nhiều so với các layer khác.
     
  10. titanic

    titanic Thèm thuồng

    Với sọc thì em nghĩ đến chuyện đưa một tiếp tuyến đi dọc theo biên. Đến chỗ nào có "nhảy" thì a lê-hấp.:D
     
  11. goahead

    goahead Thèm thuồng

    Hôm nay tôi nhớ lại cái bài giới thiệu của Andrew Blake ở microsoft research về segmentation, bác ấy demo một cái photo một người đang chơi golf và detect contours của người đó. Vì background của cái ảnh là sân cỏ nên tôi nghĩ sẽ kô khác cái bài toán lông thú của bác là bao nhiêu. Bác có thể thử, method bác đó dùng là snakes, nhưng phải xem lại paper của bác đó vì nó không hẳn là snakes của Kass. Bác cứ search gúc vào site bác đó là ra paper, ngày trước tôi còn download miễn phí một quyển sách bác đó viết về snakes khá hay nhưng hơi rắn.
     
  12. thangnghien

    thangnghien Thèm thuồng

    @titanic: Như thế thì có vẻ nó sẽ sensitive với noise quá :-?
     
    Last edited: Aug 3, 2009
  13. thangnghien

    thangnghien Thèm thuồng

    Bài toán segmentation và bài toán tìm biên của em nó rất khác nhau về độ chính xác đấy ạ. Vì đối với bài toán segmentation thì sai số có thể vài pixel cũng chẳng là vấn đề gì, miễn là nó segment được cái object yêu cầu là được. Còn đối với bài toán tìm biên của pattern để giải mã code thì nó yêu cầu có độ chính xác cao, thường là subpixel.
    Em nghĩ cái bài toán này cần hạn chế tối đa việc dùng Image processing. Em đã thử cái đơn giản nhất là Gaussian smooth theo hàng để làm smooth các đường biên, kết quả là nó làm cho biên càng bị lệch.
     
  14. compvis

    compvis Thèm thuồng

    Structured Light and Binocular Stereo System

    Cái chủ đề này thật là khó bỏ xừ. Em nghiên cứu cái Binocular Stereo System (2 camera) mãi mà chả ra vì cái đối tượng 3D em thu được có cái gì đó không đúng.

    http://s23.postimg.org/xv80hrjjv/IMG_2794.jpg

    Nên em định nhúng cái Structured Light vào để có đối tượng 3D tốt hơn. Nhưng càng đọc thì càng thấy khó. Các anh chị cho em ý kiến là có thể đưa structured light vào hệ binocular của em không ạ?
     

Share This Page