Obrazy w IMAQdx jako array

Tematyka związana z tworzeniem aplikacji w LabVIEW do obsługi wizji oraz wszelkich operacji na obrazie.
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Obrazy w IMAQdx jako array

Post autor: mikema72 »

Witam. Po dwóch dniach prób i szukania rozwiązań poddałem się :-\ . Mój problem polega na tym że chciałem odebrać obraz z kamery DFK 41bf02 podłączonej przez FireWire i trochę go potem obrobić. Dokładniej to mam już podgląd obrazu jako Image i niby jest wszystko w porządku ale gdy włączam opcję czekania na bufor obraz zaczyna migać (przykład na dole), jak ustawie bez czekania na bufor to wszystko jest OK (opcja Immediate w Grab - Legacy). Ale dokładnie mój większy problem polega na tym że przez to że obrazek w IMAQ jest tylko jako referencja to nie umiem stworzyć z tego czegoś arraya np. za pomocą Shift Registerów. Jak zrobić taką tablicę obrazów w pamięci aby można było je potem poobrabiać i pooglądać w trybie "offline". Próbowałem różnych sposobów od zamiany na stringi poprzez zamiane na tablice i zapis do pliku ale to wszystko za wolne. Zaznaczam że interesuje mnie około 15 klatek na sek. w rozdzielczości ~1280x960 rejestrowana w czasie ok 30 sek. Niestety wszystkie moje rozwiązania są za wolne. Proszę o wszelkie możliwe pomysły bo już nie wiem czego się chwycić. :( Jak coś jest niejasne to pytajcie...
Załączniki
obraz.jpg
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: Obrazy w IMAQdx jako array

Post autor: coolfon »

Napisałem kiedyś program, w którym musiałem zapamiętywać kolejne klatki obrazu (źródło - webcam). Aby uwolnić się od referencji i otrzymać obraz w formie tablicy korzystałem z funkcji IMAQ ColorImageToArray. Kolejne tablice zapamiętywałem właśnie w Shift Register.
Wrzuć jakieś swoje rozwiązanie, które było "za wolne". Może uda się je przyspieszyć ;)
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Obrazy w IMAQdx jako array

Post autor: mikema72 »

Niestety tak jak pisałem użycie klocka IMAQ ColorImageToArray to zwolnienie u mnie do około 3-4 klatek na sek. Niestety to za mało. Ale wymyśliłem coś innego. Może robić kolejne zdjęcia Snap-em i potem zrobić z nich film. Tylko muszę zobaczyć co z czasami. Prośbę swoją ponawiam co do pierwszego problemu (zniekształceń). Nie wiem co to może być...
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Obrazy w IMAQdx jako array

Post autor: mikema72 »

No widzę że odpowiadam sam sobie. Znikąd pomocy? :-s :-w. Niestety nie działa Snap. I tak czas jest chyba uzależniony od możliwości kamery. Ze snapem mogę zrobić tylko 4 klatki na sek. Pomóżcie coś
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: Obrazy w IMAQdx jako array

Post autor: coolfon »

Ile klatek na sekundę uzyskujesz, gdy nic nie robisz z obrazem? Wg informacji które tutaj znalazłem, wymagana przez Ciebie rozdzielczość i frame rate to jest teoretyczne maksimum, na jakie stać ten sprzęt (a teoria w praktyce sprawdza się różnie ;) ).

Możesz trochę zjechać z rozdzielczością i sprawdzić ile wtedy fps będzie?
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Obrazy w IMAQdx jako array

Post autor: mikema72 »

W sumie na razie nie obrabiam obrazu. Widzę że nie zwiększę możliwości kamery. Te 15 klatek na sek. to max. Gorzej że cały czas mam te zniekształcenia. Zauważyłem że są one dopiero powyżej 3,5 fps i w cz-b i w kolorze. A jak zmniejszyć rozdzielczość tej kamery? Chyba się nie da, bo nie mam takich mozliwości na samej kamerze a późniejsze obrabianie w programie niewiele daje bo obraz i tak jest odebrany zniekształcony. Znalazłem coś takiego w necie : http://digital.ni.com/public.nsf/allkb/ ... 0E0052E76A ale to nic nie dało i nie do końca to mój problem..
CLAD, LabVIEW 6.0 -> LabVIEW 2013
folon
Posty: 19
Rejestracja: 03 sty 2008 09:43
Wersja środowiska: LabVIEW 2012
Lokalizacja: Wrocław

Re: Obrazy w IMAQdx jako array

Post autor: folon »

mikema72 pisze:Zaznaczam że interesuje mnie około 15 klatek na sek. w rozdzielczości ~1280x960 rejestrowana w czasie ok 30 sek.
Ciężko taką ilość w shift registerze przetrzymać: 15klatek * 30 sekund * 1280 * 960 * bitów kolorów, zapis na zwykły dysk też opóźni działanie, ale jeśli zrobiony w osobnej pętli i poprawnie to jakieś rozwiązanie to jest. Jeśli obróbki nie trzeba robić online to jeszcze lepiej.

1) Wykorzystać IMAQ Create tyle razy ile klatek zamierzasz jednorazowo przetrzymywać (każdy strumień musi mieć unikalną nazwę), ile max można otworzyć - musisz potestować.
2) Po każdym zebraniu nowej klatki wykonywać IMAQ Copy na kolejnych referencjach z utworzonej tablicy. Równlolegle zapisywać na dysk (IMAQ Write File), jeśli wystąpią problemy z pamięcią - sugerował bym po zapisie wykonywać IMAQ Dispose (no chyba, że jest potrzeba przetwarzania obrazów online)
3) Po zakończeniu akwizycji zamknąć wszystkie pozostałe referencję poprzez IMAQ Dispose.
4) W przypadku możliwości wykonania przetwarzania offline - odczytywać kolejne klatki z dysku i wykonywać to co dusza zapragnie.
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Obrazy w IMAQdx jako array

Post autor: mikema72 »

Dzięki za pomoc. Trochę ominąłem problem tzn. Te zniekształcenia były przez to że próbowałem wszystko na laptopie. Na zwykłych komputerach z dodatkową kartą FireWire wszystko gra. Więc chyba w rolę wchodzi prędkość procesora albo samego łącza FireWire, grunt że tego problemu już nie ma. A drugi problem rozwiązało zainstalowanie innych sterowników. Niestety te z Labview nie są za dobre. Po instalacji pokazało mi się jeszcze parę innych formatów i fps których pod IMQdx nie było. I na nich też nie ma klatkowania i zniekształceń. Zamykam temat. :)
CLAD, LabVIEW 6.0 -> LabVIEW 2013
ODPOWIEDZ