PDA

View Full Version : Những câu hỏi về xử lý ảnh


imaging
12-04-2006, 06:28 PM
Em có vấn đề như thế này: có một vật thể hình dạng bất kỳ trong ảnh (đã phân ngưỡng thành nhị phân, vật là 1 nền là 0) muốn tính diện tích của nó. Kính mong bác chỉ giáo

imaging
12-04-2006, 08:57 PM
còn về giải thuật tìm toạ độ các điểm thuộc vật thể đã được Threshold thì không có vấn đề gì phải không.

Cám ơn bác nhiều. Xin bác chỉ giáo về thuật toán này. Cái calib tính sau vì camera cố định và cảnh cũng tương đối cố định.

equation
12-04-2006, 09:42 PM
Chào bạn, mình nghe câu hỏi của bạn có vẻ giống câu hỏi hồi mới đầu mình bước chân vào lãnh vực xử lý ảnh. Có phải ý bạn muốn tính diện tích 1 vật có hình dạng bất kỳ trong 1 ảnh nhị phân không, đúng không? Như vậy trước hết mình cần quy ước rõ 1 vật ở đây là 1 tập hơp các pixel kết nối với nhau (connected). Thông thường tùy thuộc vào threshold chọn mà bạn có 1 ảnh " trong sạch" đến mức nào, tức là có nhiều noise hay chỉ 1 vật duy nhất. Nếu threshold của bạn tốt thì trong ảnh nhị fân chỉ còn duy nhất vật mà bạn cần. Nhưng trường hợp thông thường nhất là trong ảnh nhị fân ngoài vật ta cần tính còn có 1 số pixel giá trị 1 đứng riêng biệt. Do vậy ta không thể scan hết ảnh mà đếm pixel giá trị 1 để tính diện tích của vật cần tìm. Vấn đề chủ yếu của ta đặt ra ở đây là tìm những pixel giá trị 1 nào connect với nhau tạo nên vật ta cần tính diện tích. Để giải quyết vấn đề này, bạn hãy dùng thuật toán Connected Component Labelling. Kết quả của thuật toán này là các pixel của cùng 1 vật sẽ mang cùng 1 giá trị label. Như vậy, dựa trên các giá trị label này, bạn có thể biết được có bao nhiêu object trong ảnh nhị fân cũng như những pixel nào tạo nên vật bạn cần tính diện tích. Sau đó, việc sau cùng bạn phải làm chỉ là scan và đếm các pixel có cùng 1 label tạo nên vật mà bạn muốn tính diện tích. Số lượng pixel này chính là diện tích của vật cần tìm. Hy vọng là những suy nghĩ của mình có thể giúp ích cho bạn. Chúc bạn thành công.
Ps: Mình attach sơ đồ tóm tắt cho thuật toán Connected Component dưới đây. Thuật toán này có 2 kiểu: đệ quy và bình thường.

volvo
13-04-2006, 12:03 AM
Theo mình được biết, để giải bài toán này cần phải biết thông số của camera như góc mở, tiêu cự ....

T&T
13-04-2006, 01:00 AM
Thực ra, ngay khi đã biết tất cả các thông số của camera thông qua camera calibration, chúng ta cũng không thể tính toán được "diện tích thực" của vật.

Bởi giữa 2 chiều ngang và dọc của hình.

-Thông số bên ngoài: là sự tương quan giữa tọa độ camera và tọa độ gốc (một tọa độ nào đó mà ta chon trước - quan trọng trong tracking hay mobile robot).

Như vậy, ta có thể thấy, sau khi calibrate camera, từ 1 điểm ảnh nào đó, ta chỉ có thể biết phương hướng của nó so với camera mà thôi, khoảng cách của nó so với camera không thể biết được nếu ta chỉ chụp 1 ảnh ở cùng 1 vị trí. Muốn có được khoảng cách giữa vật và camera, cách duy nhất là phải có 2 camera trở lên (các camera này đều đã được xác định thông số) đặt ở 2 (hoặc nhiều nếu nhiều camera) vị trí khác nhau (cái này gọi là stereo vision - mình đang đau khổ với nó đây :p ). Các vị trí tương quan của camera phải được xác định Việc xác định vị trí của vật thông qua vị trí tương quan đó và hướng của vật so với camera (thông qua vị trí của nó trên hình). Phần còn lại chỉ là bài toán hình học không gian mà thôi.

Nói tóm lại, nếu bạn muốn tính "diện tích thực tế" của vật, bạn phải làm nhiều công đoạn như vậy. Còn nếu bạn chỉ cần tính diện tích trên hình mà thôi thì có lẽ equation cũng nói khá kỹ rồi. Tuy nhiên, thực tế, những tool về xử lý ảnh đều có hàm này (đơn cử là tool OpenCV - bạn có thể tìm trên mạng - cái này mình đã dùng rồi, khá đơn giản và dễ dùng).

Còn cái phần Computer Vision, có thể em sẽ giúp anh Lâm trình bày cho, cũng có khá nhiều vấn đề hay ho,:D

T&T
13-04-2006, 01:08 AM
Ặc ặc, bị equation chỉnh dữ quá, từ nay em xin chừa ko nói bậy nữa :((

imaging
13-04-2006, 01:58 AM
Cái này equation hơi nhầm 1 tí. Đây chỉ là trường hợp vật dạng khối đặc mà thôi. Đôi lúc (có lẽ là thường xuyên), sẽ có những lỗ khác giá trị pixel (ví dụ có nhãn mác, màu sắc khác chẳng hạn) cho dù có threshole tốt đến đâu nữa.
Lúc bấy giờ chỉ còn trông đợi vào đường biên mà thôi :D


Như vậy theo bác T&T thì thuật toán của bác equation không giải quyết triệt để được vấn đề tính diện tích (trong ảnh thôi) của vật thể bị hole?. Vậy bác có thuật toán giải quyết không, xin được chỉ giáo. (Tất nhiên OpenCV tốt rồi nhưng nhiều trường hợp không dùng được và làm nặng hệ thống).

falleaf
13-04-2006, 09:48 AM
1) Anh Chung Tấn Lâm
2) Cu T củ chuối, spam thiệt... hehehe...

Đùa chút thôi, F đang theo dõi và học các bạn, các anh về xử lý ảnh vì không làm về lĩnh vực này nên không biết gì nhiều

Cho F hỏi chút thôi, nếu camera thay đổi được tiêu cự thì có đo khoảng cách đến vật được không? Khi có một điểm làm gốc chuẩn bên trong camera, thì khi camera focus vào một vật nào đó, thì có thể xác định khoảng cách từ camera đến vật không nếu biết vật chuẩn và tiêu cự của camera.

Nếu được thì đầu tiên mình nên giới hạn thảo luận bài toán bằng webcam!?

sinhluc
13-04-2006, 09:52 AM
neu bai toan nhu chi nhu ban noi: khoảng cách cô dịnh, da dc ma hoa vat la 1, nen là 0, moi pixel chi la mot bit,can tinh dien tich cua vật, neu khong can chinh xac lắm thi rat don gian. bạn chi can dem tong so bit 1 tren toan bo buc anh roi nhan voi dien tich thuc te cua vat the khi khi no bieu dien băng mot pixel, dien tich thuc te nay ban co the thu 1 lan la biet.
vi du mot vat co dien tich la 1 cm2 ban dem dc 100bit 1 thi moi bit mot tuong duong 1mm2, tu do ban nhan so bit mot cua mot dem dc voi 1mm2 se
Tuy nhien do lam the co nghia la minh coi 1 vat the la mot to hop khong lien nhau.
neu bạn mon tinh mot vat the la mot mang lien nhau thi phai phan tich them 1 chut

do la cach don gian nhat , con nhieu cach khac phuc tap doi hoi chinh xac cao, noi chung chi xu li phan mem la co the dat dc ket qua chinh xac den muc chap nhan dc , van de la minh can den do chinh xac nhu the nao, vi cau hoi cua ban chung chung nen minh chi co the tra loi nhu the, hay noi ro hon.

falleaf
13-04-2006, 10:03 AM
Vấn đề imaging đề ra, đó là chẳng lẽ quét hết, đếm hết từng điểm. Làm như vậy thì đến tết công gô mới xong.

Tuy nhiên, vấn đề của imaging vẫn chưa rõ ở chỗ là diện tích vật thật hay số pixel trên máy nhận được?

F muốn học cái xử lý ảnh này mà xem ra hơi khó hiểu :(

equation
13-04-2006, 10:09 AM
Thực ra thuật toán Connected Component mà mình đã dùng để giải quyết vấn đề xác định vị trí 1 object bất kì trong ảnh nhị phân. Cho dù trong vật có lỗ thì nó cũng xác định được cả vật trong lỗ và bản thân vật ấy chứ không phải như T&T nói là chỉ dùng cho vật solid đâu. Mình làm cái face detection cũng phải giải quyết cả vấn đề xác định các object này. Đôi khi trong hốc mắt sau khi skin segmentation thành ảnh nhị phân vẫn còn lại những nhóm pixel giá trị 1=>trường hợp này ta có vật trong vật. Tuy nhiên Connected Component Labelling vẫn giúp ta phân biệt được các vật này với nhau chứ không nhất thiết chỉ dùng cho solid. Đây là ưu điểm của Connected Component so với chỉ dùng histogram để xác định vị trí vật trong ảnh. Bài toán giải quyết vật trong vật là 1 bài tập mà giáo sư mình cho ra khi làm program về Connected Component này. Bạn Imaging có thể yên tâm thử thuật toán này nhé. Nếu bạn cần thì mình có thể share với bạn đoạn code của Connected Conponent.

T&T
13-04-2006, 01:43 PM
ĐÚng là Connected Component Labelling giúp ta phân biệt được vật trong vật, có thể cả nhiều vật lồng nhau. Tuy nhiên, mục đích của bạn imaging chỉ là tính diện tích của vật lớn mà thôi bao gồm cả các vật bên trong nữa). Như vậy, nếu làm theo phương pháp Connected Component Labelling, sau khi labelled các object xong, bạn phải cộng tất cả lại mới có vật lớn. Ví dụ như có 1 vật hình vuông màu trắng, bên trong là hình tròn màu đen. Connected Component Labelling sẽ cho ra 2 vật là hình vuông rỗng và hình tròn, trong khi ta chỉ cần tính diện tính của cả hình vuông lớn bên ngoài (đó mới là object cần tính). Có nghĩa là ta phải cộng cả 2 vật mà Connected Component Labelling xác định được, như vậy hơi tốn chút công sức :).

(Đang làm cái assignment Neural network mai nộp - sẽ bàn tiếp :))

imaging
14-04-2006, 01:10 PM
Muốn có được khoảng cách giữa vật và camera, cách duy nhất là phải có 2 camera trở lên (các camera này đều đã được xác định thông số) đặt ở 2 (hoặc nhiều nếu nhiều camera) vị trí khác nhau (cái này gọi là stereo vision - mình đang đau khổ với nó đây :p ). Các vị trí tương quan của camera phải được xác định Việc xác định vị trí của vật thông qua vị trí tương quan đó và hướng của vật so với camera (thông qua vị trí của nó trên hình).

Theo em được biết người ta còn sử dụng một camera quay (pan/tilt) và encoder đo góc để xác định khoảng cách từ vật tới camera.
Và để giải quyết một cách chính xác bài toán đo khoảng cách họ thường dùng 1 camera kết hợp với đo xa laser (LMS).

falleaf
14-04-2006, 02:34 PM
Có thể cho mình biết rõ hơn về kỹ thuật này được không? Mình chỉ mới biết 2 kỹ thuật là dùng 2 camera và 1 camera như nói ở trên thôi. Còn kỹ thuật camera quay thì mình chưa biết, vậy bạn có thể giải thích cho mình thêm về kỹ thuật này không? Có hình ảnh mình hoạ thì càng hay.

Chúc vui

imaging
14-04-2006, 11:50 PM
Bác F, cái kỹ thuật này em chưa thử nghiệm và đọc được đã lâu rồi, không nhớ chính xác lắm. Cái này tính toán phức tạp (robot là chính) và với cái đầu óc của "thằng bé" như em thì khó có thể hiểu được. Nhưng em hứa sẽ xem lại nhanh nhất và cài đặt thuật toán thử nghiệm. Em post bài báo lên trước nhé rồi cùng thảo luận xem có khả thi không. Kính mong các bác chỉ giáo.

falleaf
15-04-2006, 12:39 AM
Kỹ thuật này là kỹ thuật đã cũ, sử dụng 2 camera hoặc một camera nhưng xác định được khoảng cách di chuyển của camera đó. Xem các đối tượng là cố định so với độ dịch chuyển của camera, thì lúc này gần như là xử lý bằng 2 camera.

Đây là kỹ thuật theo xu hướng dùng 2 camera.

Các bài báo tham khảo của Hans P. Moravec, đó là phát triển từ kỹ thuật Sensor Fusion. Hướng nghiên cứu này đã lỗi thời vào năm 2000 (cũng là đề tài tốt nghiệp của F 2004). Hiện nay những nhà nghiên cứu không đi theo hướng này nữa, mà họ đi vào công nghệ mạng. Ở đâu cũng thấy Internet based....

Nhìn con robot này F còn nhìn nhiều hơn "my mom" nữa :D

Quay lại vấn đề camera, F không rành về xử lý ảnh, nhưng về hình chụp thì có biết một chút chút (thích chụp hình nhưng không có tiền mua máy ảnh xịn).

http://www.stereoscopy.com/3d-concepts/camera.html
Đây là dạng kỹ thuật 2 kính

http://www.photozone.de/3Technology/camtec2.htm
đây là kỹ thuật điểm focus

Một số camera dùng trong mô phòng nhà máy cũng dùng kỹ thuật đặc biệt để quay ảnh 3 chiều. Kỹ thuật pan/tilt mà mình hiểu cũng chỉ là kỹ thuật như dạng dùng 2 camera để quay. Không biết là có kỹ thuật nào khác không, vì cái máy quay trong mô phỏng nhà máy mình thấy hơi bị to khủng bố.

Chúc vui.

T&T
15-04-2006, 09:47 AM
Bản chất của stereovision là sử dụng từ 2 điểm nhìn trở lên để tổng hợp thông tin về độ sâu (depth) của vật. Người ta so sánh sự khác nhau về vị trí của vật ở các ảnh mà suy ra độ sâu. Những cách trên đều dựa trên nguyên lý đó cả. 2 cách falleaf nói cũng như vậy. Nói chung các điểm nhìn (view point) này có thể chính là các camera, hoặc là 1 camera đặt ở nhiều vì trí (di chuyển camera là trường hợp này), hoặc 1 camera thông qua 1 hệ thống thấu kính, lăng kinh, gương... biến thành 2 camera ảo. Cách camera+laser (hoặc 1 cảm biến khác) chỉ cho biết khoảng cách đến 1 vật mà thôi, ko tổng quát như các trường hợp kia.

Hiện tại T&T cũng chí có mớ kiến thức sách vở về vấn đề này thôi, vì chưa có thời gian để làm. Giải thuật để tính không khó, cái khó là làm sao cho độ chính xác tăng. Điều này phụ thuộc chủ yếu vào calibrate.

falleaf
15-04-2006, 01:32 PM
Vậy ngoại trừ hai cách này, nếu như có một điểm F (focus) và A đủ để độ sâu ảnh là mỏng, vậy thì có xác định được khoảng cách máy đến vật không? Liệu có máy quay nào làm được điều này không?

Vấn đề của máy quay, đó là không như máy ảnh, không thể thụt ra thụt vào liên tục tiêu cự đề cả định tất cả các khoảng cách được. Vậy máy quay dùng cách nào để có một kính mà vẫn xác định được khoảng cách của vật nếu không dùng phương pháp tạo ảnh ảo?

Mọi người có thể nói thêm về phương pháp này hay không? F rất quan tâm đến việc dùng camera để xác định được khoảng cách vật (có thể chế tạo thêm các kính bên ngoài tạo hiệu ứng quang học giống như cách 2 mà F viết). Cách nào hiệu quả nhất?

Chúc vui

tranhuuduy1981
27-09-2007, 06:12 PM
Bác F, cái kỹ thuật này em chưa thử nghiệm và đọc được đã lâu rồi, không nhớ chính xác lắm. Cái này tính toán phức tạp (robot là chính) và với cái đầu óc của "thằng bé" như em thì khó có thể hiểu được. Nhưng em hứa sẽ xem lại nhanh nhất và cài đặt thuật toán thử nghiệm. Em post bài báo lên trước nhé rồi cùng thảo luận xem có khả thi không. Kính mong các bác chỉ giáo.

Bác Imaging ơi, em không mở được file này, sao lại có cái đuôi .php vậy? mong bác chỉ giáo.

tranhuuduy1981
27-09-2007, 06:18 PM
Các Bác ơi, em mong muốn các Bác góp ý cho em vài điều nhé. Em đang làm một cái đề tài về Thị giác máy tính - Bám theo đối tượng di động. Em chỉ dùng được VB hoặc VB.NET thôi, em không lập trình VC++ được. Em làm được đến phần hiển thị Video lên form bằng cách sử dụng Các hàm trong VFW và đưa dữ liệu vào mảng. Nhưng đến phần vẽ một hình chữ nhật lên đối tượng cần theo dõi để dùng thuật toán Mean-Shift để điều chỉnh camera theo đối tượng thì em không làm được vì hình chữ nhật vẽ lên cứ bị hình ảnh camera che mất. Vì đây là lần đầu tiên tìm hiểu về nó nên em còn nhiều bỡ ngỡ quá mà đề tài thì gần đến ngày báo cáo rồi. Mong các Bác chỉ giáo dùm em với hoặc có tài liệu nào về nó mong các Bác cho em nhé.
Cảm ơn Các Bác nhiều!

tranhuuduy1981
27-09-2007, 06:34 PM
Thưa các Bác, trong Visual C++ tôi thấy người ta vẽ một hình chữ nhật quanh đối tượng cần theo dõi trên đoạn video từ camera rất dễ dàng mà sao tôi làm bằng VB thì không tài nào làm được. Có Bác nào cứu với!

petertran
22-12-2008, 10:37 PM
chào anh T&T. Em cũng đang làm cái đồ án môn học về xử lý ảnh. Thấy cái đề tài dùng camera đo khoảng cách của anh rất thú vị. Anh có thể gửi cho em một số tài liệu về vấn đề này được ko ạh.? Rất cảm ơn anh !

phamvanhop84
16-02-2009, 12:58 AM
em mới nhận đề tài tốt nghiệp môn xử lý ảnh là"nghiên cứu một số kỹ thuật ước lượng đo độ dài thông điệp dấu trên bit có trọng số thấp của ảnh".
mà không biết tìm tài liệu ở đâu.
mong các anh gửi cho em một số tài liêu này được không ạ!

hoangsonk49
25-08-2009, 02:43 PM
Em có vấn đề như thế này: có một vật thể hình dạng bất kỳ trong ảnh (đã phân ngưỡng thành nhị phân, vật là 1 nền là 0) muốn tính diện tích của nó. Kính mong bác chỉ giáo

Cái này đơn giản thôi. bạn làm một vòng lặp, giả sử vật thể là 1, nền là 0 thì cho vòng lặp chạy qua hết các điểm, cứ gặp cái 1 nào thì tăng lên 1

nhanconan030789
03-01-2011, 12:58 AM
Cái này đơn giản thôi. bạn làm một vòng lặp, giả sử vật thể là 1, nền là 0 thì cho vòng lặp chạy qua hết các điểm, cứ gặp cái 1 nào thì tăng lên 1

tại các bác chưa tìm hiểu hết matlab đó thôi trước khi tính diên tích của nó thì cần xử lý nó trước cái đã!! trước tiên là trong đối tượng sẽ có những lổ trống,matlab có hàm imfill để lấp đầy các lỗ này!
sao đó là xử lý các nhiểu,là một vài pixel đứng riêng rẽ,đã là nhiểu rồi thì số pixel không nhiều đâu nhá!!
mat lab tạo ra một dạng cấu trúc là một mặt nạ các pixel có hình dạng như ta mong muốn,hình đĩa,hình vuông,hình ch,hình chử thập..., sau đó quét cấu trúc này đi khắp ảnh,khi cấu trúc này đặt ở đâu trên ảnh mà số pixel tương ứng của ảnh không thỏa cấu trúc yêu cầu thì nó xóa đi(đây là nguyên tắc hoạt động thôi nhá chứ khi làm thì chỉ ghi hàm vô nó từ làm à)
cac bác về tìm hiểu các hàm này nè
imopen,imclose,bwareaopen,strel
bwareaopen còn cho phép mở ảnh với các đối tượng có số pixel đặt trước,cũng áp dụng để loại nhiểu được đó.
rồi sao đó dùng hàm bwarea để tính diện tích thôi,còn nếu ảnh có nhiều đối tượng thì dùng hàm khác chơi được luôn dùng hàm regionprop
vì sắp thi rồi nên mình cũng không có nhiều thời gian để viét,các bạn về mơ help của nó lên mà đọc

nhanconan030789
03-01-2011, 01:04 AM
Vậy ngoại trừ hai cách này, nếu như có một điểm F (focus) và A đủ để độ sâu ảnh là mỏng, vậy thì có xác định được khoảng cách máy đến vật không? Liệu có máy quay nào làm được điều này không?

Vấn đề của máy quay, đó là không như máy ảnh, không thể thụt ra thụt vào liên tục tiêu cự đề cả định tất cả các khoảng cách được. Vậy máy quay dùng cách nào để có một kính mà vẫn xác định được khoảng cách của vật nếu không dùng phương pháp tạo ảnh ảo?

Mọi người có thể nói thêm về phương pháp này hay không? F rất quan tâm đến việc dùng camera để xác định được khoảng cách vật (có thể chế tạo thêm các kính bên ngoài tạo hiệu ứng quang học giống như cách 2 mà F viết). Cách nào hiệu quả nhất?

Chúc vui
hôm trước đọc tài liệu về một con robot của bọn nhật,có dạng hình người,ở hai con mắt của nó dã có 2 camera rồi thế mà nó vẫn dùng một con cảm biến gắn ở lổ mủi để đo khoang cách,chắc là 2 camera kia để làm việc khác!!dại gì không dùng cảm biến đo khoảng cách,vừa chính xác,vừa nhanh gọn(chỉ là về mặt kinh tế thôi nhá,còn về mặt nghiên cú thì mình không nói)

tranphuonghoang
17-01-2011, 09:21 PM
Em dang lam do an dung camera nhan dang vat va xac dinh toa do vi tri cua vat trong vung quan sat duoc cua camera. Mong cac bac chi giup that toan va cac buoc lam

tranphuonghoang
17-01-2011, 09:27 PM
de em noi ro hon. Em dieu khien canh tay robo scara 2 khau chuyen dong quay de gap vat. dat camera co dinh de quan sat vat. dat vat trong vung quan sat cua camera, xac dinh toa do vi tri cua vat, suy ra goc can quay cua hai khau. Dung PLC de dieu khien. nhung cai bay gio em quan tam la bai toan xu li anh xac dinh vi tri toa do . Mong cac bac giup!

daothanhson
05-02-2011, 12:30 AM
Hi bạn tranphuonghoang, thuật toán của mình về vấn đề xác định vị vật thể của bạn như sau:
1. Chia vùng quan sát của camera thành 1 lưới ô vuông kích thước tùy ý.
2. Tính giá trị trung bình pixel của tất cả các ô vuông đó. Đây là database ban đầu mà bạn có dùng để so sánh sau này.
3. Tiếp theo, tính giá trị trung bình pixel của tất cả các ô vuông. Sau đó trừ giá trị trung bình này với database ban đầu mà bạn có được. Nếu nó lớn hơn hay nhỏ hơn một ngưỡng tùy ý, thì chứng tỏ là vùng quan sát của camera có 1 vật thể nào đó. Và vật thể đó nằm trong các ô vuông thỏa điều kiện trên.
4. Lặp lại B3.
Cuối cùng, bạn có thể tùy biến thuật toán trên sao cho phù hợp với đề tài của bạn.

nghi1987
30-09-2011, 12:28 PM
bác có đoạn code đó bằng matlab không cho e xài ké với! e mới tập tọe bước vào nên chẳng biết nhiều. share cho e qua mai: ngotiennghi@gmail.com

nghi1987
30-09-2011, 12:36 PM
Cái này đơn giản thôi. bạn làm một vòng lặp, giả sử vật thể là 1, nền là 0 thì cho vòng lặp chạy qua hết các điểm, cứ gặp cái 1 nào thì tăng lên 1

bạn cho mình doạn code đó nha! mình tham khảo thêm.cám ơn trước. share qua mail: ngotiennghi@gmail.com