Pomiar prędkości danego koloru(punktu) na obrazie.

Tematyka związana z tworzeniem aplikacji w LabVIEW do obsługi wizji oraz wszelkich operacji na obrazie.
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Witam serdecznie wszystkich forumowiczów.
Na samym wstępie chciałbym określić problem,z którym się zmagam. Celem mojej pracy jest stworzenie programu który oznaczy obiekt nagrany z kamery termowizyjnej (chodzi tu o jego kolor, gdyż w kamerce jest możliwość ustawienia poziomu obszaru mnie interesującego np mój obiekt ma 20 stopni , więc całe tło poniżej 18 i powyżej 22 jest białe.).Obiekt ten jest w ruchu więc chciałbym na podstawie śledzenia danego obiektu( koloru) zmierzyć jego prędkośc w czasie . Obiekt będzie się przesuwał w linii pionowej obrazu kamery z uzgodnioną prędkością,którą znam i chce porównać z odczytem przez LabViev. Znalazłem wiele programów śledzących sam obiekt poprzez dodanie danego obiektu ( jego obrobionego zdjęcia i krawędzi) do bazy danych . MI jednak chodzi o śledzenie samego koloru , wyświetlenie ilośći punktów tego koloru na obrazie ( dajmy na to 3 obiekty na obrazie oddalone od siebie o 4 cm przesuwają się z prędkością 0.1 m/s ). Chciałbym aby program wykrył te 3 obiekty, wyznaczył ich prędkość i pokazał prędkość dla każdego osobno. Drodzy forumowicze , czy jest to możliwe do wykonania? Nie jestem programistą więc bardzo proszę o cenne wskazówki.
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: dajpanspokój »

Jasne ze jest mozliwosc!
Labview Vision ma duzo funkcji morfologicznych, ktore umozliwiaja wykrycie tego obiektu, wyciecie go z szumu itp.
http://zone.ni.com/reference/en-XX/help ... ology_pal/

Jak juz go masz opisanego to mozesz zamienic go w jeden punkt (np centroid) i uzyc optical flow do zmierzenia predkosci
http://zone.ni.com/reference/en-XX/help ... flow__lkp/
http://zone.ni.com/reference/en-XX/help ... _flow__hs/

Nie za bardzo sie na tym znam, ale wiem ze takie cos istnieje w labview, troche szukania i program gotowy! :)
Obrazek
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Dziekuje za wskazówki i zabieram się za robotę . Mogę liczyć na dalsze porady?:)
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Link dropbox do programu ( wersja na dzien dzisiejszy)
https://www.dropbox.com/sh/yceahtwnp0p0 ... auGWa?dl=0
Ostatnio zmieniony 16 gru 2016 05:28 przez wwosek1234, łącznie zmieniany 2 razy.
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Program znajduje kolor na obrazie( zaktualizowałęm folder dropbox) , użyłem do tego vision asisstanta oraz palety [cluster class and variants ] aby dodatkowo zaznaczyć wykryty obiekt lecz działa to bardzo mozolnie i nie wykrywa szybko poruszającego się obiektu . Gdy zatrzyma się film avi w danym okresie(przycisk stop) czasu to obrys koloru jednak jest zaznaczony kwadratem.Chciałbym to poprawić aby jednak było widać obrys czyli wykrycie tego obiektu na ekranie ( może ktoś ma jakiś fajny pomysł). Na głównym panelu umieściłem dodatkowo Lokacje przemieszczenia tego obiektu , obiekt się porusza więc zmieniają się współrzędne po x i po y , to działa bardzo dobrze. Teraz chciałbym do tego programu dopiąć moduł który mierzy prędkość tego obiektu oraz wylicza ile tych obiektów na ekranie jest :) Przydały by się jakieś porady drodzy forumowicze. Idzie weekend więc może o mnie pomyślicie w wolnej chwili :) Pozdrawiam serdecznie :)
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Re: Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: dajpanspokój »

Mi to dziala calkiem niezle, wykrywa kwadrat podczas poruszania sie. Widocznie masz za slaby komputer, ha ha ha!

Tak czy inaczej udalo mi sie zrobic to samo, ale przez ustawienie thresholda i zrobienie maski.
Zaznacza sie ta plama na zielono. To juz ci powinno isc dosc gladko, bo otwieranie templata z pliku moze jest dosc wolne jak sie nie ma ssd.

Pytanie czy to jest najlepszy sposob? bedziesz mial inne tlo niz biale? bedziesz mial wiecej takich obiektow?

Centroid wyrzuci ci srodek tego obiektu i mozesz obliczyc ruch przez wykrycie zmiany pozycji w czasie.
Załączniki
skos 2.vi
(143.74 KiB) Pobrany 395 razy
Obrazek
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Witam Cię , nie otwiera mi pliku gdyż pracuję na LV 2015 x 64 da się coś zrobić?:). W tym momencie będę pracował na jednym obiekcie a docelowo na wielu , chciałbym zobaczyc jak to wypadnie z jednym . Tło mogę zmieniać i przez funkcję kamery(gradient) więc obiekt może pozostać czarny na białym tle . Komputer rzeczywiście klatkuje ha !:) Chciałbym otworzyć ten plik a jeżeli się nie uda to chociaż screeny z vision assistanta oraz schematu blokowego :) Wpadłem na klolejny pomysł aby zliczać ilość tych obiektów w czasie który sobie sam ustawię np mam film trwający 10 minut i co 5 sekund przewinie się jakiś obiekt który program wykryje i będzie liczył dodawając . Czyli zrobić taki sumator z nastawowym czasem zliczania . Też jest to możliwe?:D Z góry dzięki za pomoc !:)
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Re: Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: dajpanspokój »

Sorry
Załączniki
skos 2015.vi
(130.43 KiB) Pobrany 395 razy
Obrazek
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: dajpanspokój »

Moja funkcja liczy srodek masy z maski. Jesli wykryjesz kilka obiektow, to musisz zrobic maske dla kazdego.
Ten filmik, ktory masz jest dobry, bo tam tak naprawde sa dwa obiekty (jeden maly drugi duzy), wiec mozesz juz tutaj zaczac kombinowac z dwoma obiektami.

Chodzi o to, zeby zastanowic sie jak zrobic kiedy:
- obiekty przesuna sie na tyle, ze program stwierdzi ze obiekt A to jest obiekt B (albo przeskoczy jeden drugiego)
- obiekty beda mialy czesc wspolna (wtedy zamiast dwoch masek bedzie tylko jedna).

Ten czasowy pomysl jest spoko, bo wtedy dostaniesz dokladny czas ktory minal miedzy klatkami, wiec latwo policzyc predkosc! Zeby to zrobic musisz po prostu brac kazda klatke z filmu, ale procesowac tylko wtedy jesli minelo 5s.
Do tego mozesz uzyc Elapsed Time.vi wewnatrz petli z ustawionym AutoReset True i Time Target 5s. Jesli wyjscie Time Elapsed? jest true, to procesujesz klatke, jesli nie to nie robisz nic. (Cala czesc procesujaca musisz dac do case structure)
Obrazek
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Właśnie nie do końca rozumiem o co chodzi z tym środkiem masy z maski.Po otwarciu Twojego pliku nie pojawiło się nic w Vision assistant , domyśliłem się , że skoro obraz i tak jest już przekonwertowany do grayscale U8 przez maskę Imaq to w vision assistant dodałeś do image tylko treshold aby ustawiać parametry . Teraz trochę o Centroidzie bo nie do końca rozumiem jak to działa . Wiem że obraz musi być 8 bitowy obraz więc cały zabieg z maską rozumiem. Podpiąłem centroid w vision assistant do threshold i tam już mam problem gdyż nie wiem co mam zaznaczyć . Czy mam obrysować ten czerwony punkt ( obiekt) i wtedy wyświetli mi jego środek jako punkt?:)( Ty zrobileś to jako dodatkowy bloczek i chyba nic nie zaznaczałeś) Ponadto napotkałem problem , zielonym obrysem , podczas działania programu jest znaczona ta linia boczna z wszystkimi kolorami zamiast obiektu który się przesuwa.

Co do mojego pomysłu z licznikiem obiektów . Mam nadzieje , że uda się mi dotrzeć do problemu wyznaczania prędkości jednak obecnie interesuje mnie to aby w front panelu pojawiłą się informacja nie ile obiektów jest na obrazie jednocześnie (jak dotąd) tylko ile obiektów przemknęło sumarycznie . Dajmy na to chcę liczyć na linii produkcyjnej gorące/ zimne obiekty i potrzebuje takiego sumatora aby liczył obiekty na ekranie przez np 1 min czy tam 5 minut :) Śmiga sobie zimny obiekt - program go widzi jako 1 , obiekt znika i to 1 dalej tam jest , następnie śmiga drugi obiekt , program go widzi jako 1 ale już przemkneły dwa obiekty więc chciałbym aby gdzieś była informacja że przemknęły już dwa obiekty :) Wiem , że te moje wypociny zajmują dużo czasu choćby przez samo czytanie ale jestem w kropce bo średnio się w tym orientuję a bardzo mi zależy na dobrym wyniku końcowym :)
Swoją drogą to w tym bloczku z mojego programu są podane współrzędne tego jednego obiektu jego X i Y i one się zmieniają tworząc drogę , jakby te współrzędne gdzieś zapisać i zmierzyć czas od wykrycia obiektu do jego zaniku to prędkość gotowa . tylko jak ;(
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Re: Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: dajpanspokój »

Hej

W vision assistant zaznaczylem cos takiego:
1.PNG
1.PNG (8.07 KiB) Przejrzano 14425 razy
1. Ustaw maske, ktora wycina z obrazu lewa czesc (obcina pasek z prawej)
2. Zamien kolory na HSL i wyciagnij L
3. Threshold 0-230

Dodalem na koncu zeby mozna bylo zmienic threshold podczas dzialania programu.
Na wyjsciu z Assistanta dostajemy maske, z ktorej liczymy centroid (srednia w x i y) i rysujemy ta maske na orginalnym obrazie
Nie wiem czemu tobie to nie dziala, moze sam musisz zrobic to samo recznie.

U mnie po nacisnieciu start pojawia sie takie chodzace cos:
koniec.PNG
koniec.PNG (15.02 KiB) Przejrzano 14425 razy
Obrazek
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Re: Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Nie wiem jak zrobić to zliczanie obiektów, jakieś wskazówki ? Pomiar prędkości jest już nie potrzebny , chciałbym aby program zliczał tylko ilość obiektów w danym czasie( np przez 30 sekund ) .Praca polega na wyłącznie jednym obiekcie więc problem przeskakiwania czy zamiany obiektu B na A po zniknięciu z kadru już odpada. Chciałbym aby powstało coś w stylu : Włączam program ( lepiej w mojej wersji z Bounding boxami ) śmiga sobie jeden obiekt , program go ładnie wykrywa poprzez funkcje vision assistant ,color location ,po czym ustawiam czas na minutę i w pętli ile razy dany obiekt się pojawi i zniknie na obrazie , program będzie mi sumował wyświetlenia tego obiektu . Poprzednie informacje bardzo trafne ale nie wiem kompletnie jak to ugryźć.
wwosek1234
Posty: 8
Rejestracja: 14 gru 2016 16:31
Wersja środowiska: LabVIEW 2014

Re: Pomiar prędkości danego koloru(punktu) na obrazie.

Post autor: wwosek1234 »

Udało mi się zrobić taki licznik tylko , że zamiast liczby 1 dobija do 130 a za drugim przejazdem do 260 , Ma ktoś pomysł ? ( film avi jest w folderze dropbox) Program znajduje obiekt klatka po klatce , więc praktycznie wynik jest poprawny , tylko nie o to mi chodzi . Czy istnieje jakaś funkcja która może zrobić to poprawnie?:)
Załączniki
1PLIKSKOS.vi
(169.86 KiB) Pobrany 397 razy
ODPOWIEDZ