Wykrycie poziomu wody w naczyniu

Tematyka związana z tworzeniem aplikacji w LabVIEW do obsługi wizji oraz wszelkich operacji na obrazie.
Sibulek
Posty: 8
Rejestracja: 05 sty 2016 10:15
Wersja środowiska: LabVIEW 2014

Wykrycie poziomu wody w naczyniu

Post autor: Sibulek » 05 sty 2016 10:32

Witam jestem nowym użytkownikiem labview Vision i chciałbym Was prosić o pomoc/sugestie. Mianowicie chcę aby mój program za pomocą kamery USB monitorował napełnianie naczynia wodą, a gdy poziom wody osiągnie jakiś poziom założony, żeby zaświeciła się kontrolka LED. Korzystam oczywiście z VisionAssistant. Bardzo dziękuję za pomoc.

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 05 sty 2016 14:24

Witaj,

Rozumiem, że zbornik będzie przejrzysty, a kamera będzie patrzyła na niego z boku. Zatem po (ważne!) zapewnieniu stabilnych warunków do akwizycji (stałe oświetlenie najlepiej rozproszone równomiernie we wszystkich kierunkach, aby zminimalizować liczbę krawędzi światła i cienia oraz nie wpadają promienie słoneczne przez okno) myślę, że metodą na ten problem byłyby następujące kroki:
1. Akwizycja obrazu
2. Znalezienie za obrazie zbiornika na podstawie przygotowanego wcześniej wzorca
3. Ustanowienie układu współrzędnych
4. Wykrycie krawędzi względem układu współrzędnych (krawędź dna zbiornika i powierzchni cieczy w zbiorniku)
5. Pomiar odległości krawędzi od siebie
6. Przeliczenie odległości na jednostki SI, pomnożenie przez powierzchnię podstawy naczynia i mamy objętość

Reszta, czyli określenie czy cieczy już wystarczy, czy nie, to pikuś.

Proponuję, żebyś przygotował naczynie i kamerę według wskazówek i wykonał kilka fotek. Wrzuć je do wątku, wtedy pomogę z programem.
Pozdrawiam,
Sebastian

Sibulek
Posty: 8
Rejestracja: 05 sty 2016 10:15
Wersja środowiska: LabVIEW 2014

Re: Wykrycie poziomu wody w naczyniu

Post autor: Sibulek » 07 sty 2016 13:35

Wykonałem kilka zdjęć zbiornika z wodą. Pliki są wygenerowane przez labview w różnych formatach i różnych typach oświetlenia.
Załączniki
Image 2016_01_07_132703.695 Image 000.jpg
Image 2016_01_07_132703.695 Image 000.jpg (44.14 KiB) Przejrzano 6186 razy
Image 2016_01_07_132417.468 Image 000.jpg
Image 2016_01_07_132417.468 Image 000.jpg (43.9 KiB) Przejrzano 6186 razy
Image 2016_01_07_132235.616 Image 000.png
Image 2016_01_07_132235.616 Image 000.png (499.51 KiB) Przejrzano 6186 razy

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 11 sty 2016 11:06

W zasadzie umieściłeś 3 zdjęcia tego samego przypadku. Docelowo potrzebujesz zmierzyć odległość pomiędzy dnem a powierzchnią, których krawędzie są wystarczająco widoczne. Ale zauważ, że na obrazie występują jeszcze inne bardzo wyraźne krawędzie, które znajdują się w głębi zbiornika (dno i powierzchnia cieczy).

Dlatego potrzeba więcej przypadków poziomu cieczy, żeby przygotować aplikację na wszystkie przypadki. To oczywiście będzie komplikowało logikę, ale jeśl nie uda Ci się znaleźć innego (łatwiejszego) kąta kamery, to będziemy musieli je brać pod uwagę. Będą to na pewno przynajmniej 3 przypadki, kiedy krawędź powierzchni będzie w jednym z tych regionów (patrz obrazek). Jesteś w stanie przygotować więcej zdjęć?
Załączniki
Przypadki.png
Przypadki.png (263.32 KiB) Przejrzano 6108 razy
Pozdrawiam,
Sebastian

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 11 sty 2016 16:10

Jeszcze jedna myśl: co gdyby umieścić kamerę tak, żeby patrzyła na zbiornik od środka znad zbiornika? Wtedy nie patrzysz na 4 krawędzie, ale na 2. Wtedy odchodzą nadmiarowe krawędzie i potencjalnie złożona logika, ale za to może być więcej nieliniowości przy obliczeniach.
Ostatnio zmieniony 12 sty 2016 11:10 przez skoziate, łącznie zmieniany 1 raz.
Pozdrawiam,
Sebastian

Sibulek
Posty: 8
Rejestracja: 05 sty 2016 10:15
Wersja środowiska: LabVIEW 2014

Re: Wykrycie poziomu wody w naczyniu

Post autor: Sibulek » 11 sty 2016 17:57

Wykonałem kilka zdjęć z różnymi poziomami wody, zmieniłem trochę oświetlenie i wydaje mi się że krawędzie są bardziej czytelne. Niestety położenie znad zbiornika nie sprawdza się, ponieważ zbiornik jest zbyt wąski i zbyt wysoki.
Załączniki
Image 2016_01_11_174851.718 Image 000.jpg
Image 2016_01_11_174851.718 Image 000.jpg (26.78 KiB) Przejrzano 6085 razy
Image 2016_01_11_174745.108 Image 000.jpg
Image 2016_01_11_174745.108 Image 000.jpg (28.19 KiB) Przejrzano 6085 razy
Image 2016_01_11_174606.447 Image 000.jpg
Image 2016_01_11_174606.447 Image 000.jpg (28.07 KiB) Przejrzano 6085 razy
Image 2016_01_11_174337.109 Image 000.jpg
Image 2016_01_11_174337.109 Image 000.jpg (28.29 KiB) Przejrzano 6085 razy

Awatar użytkownika
aaddaas
Posty: 182
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Re: Wykrycie poziomu wody w naczyniu

Post autor: aaddaas » 11 sty 2016 18:17

Możesz umieścić kamerę również na poziomie dna zbiornika, wtedy weliminujesz jedną linię.
PS: Może się mylę, ale wydaje mi się, że lepiej jest mieć pewność, że się wykryje dodatkową linię i uwzględnić to w kodzie, niż mieć nadzieję, że oświetlenie sprawi, że pogram nie zauważy rzeczonej linii.
PS: Paint dalej jest podstawowym narzędziem profesjonalnych inżynierów?:D
Załączniki
Akwarium.jpg
Akwarium.jpg (42.35 KiB) Przejrzano 6083 razy
Obrazek

Awatar użytkownika
smiga
Posty: 693
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 3 times
Been thanked: 1 time
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga » 12 sty 2016 01:03

Zastanawiam się czy jest sens tak to komplikować. Krawędź wody znajduje się całkiem dobrze - skrypt w załączniku.
Wystarczy umieścić kamerę na poziomie stołu (wyeliminujemy efekt znajdowania tylnej, dolnej krawędzi akwarium przy braku wody), wykryć krawędź wody praktycznie odczytując wartość Y wykrytej linii, skalibrować system (nalewamy wody, mierzymy wysokość poziomu wody linijką i odczytujemy wartość Y dla różnych poziomów wody) ewentualnie aproksymować jakąś krzywą, bo pewnie nie będzie to zależność liniowa.
Załączniki
akwarium.jpg
akwarium.zip
v2015
(1.22 KiB) Pobrany 108 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 12 sty 2016 11:01

Problem zmniejsza się o połowę, ponieważ z dołu i tak będzie widać dalszą-górną krawędź zbiornika. W zależności od poziomu cieczy, ta krawędź będzie się znajdować na krawędzią cieczy lub pod nią.
Załączniki
Górna krawędź.png
Górna krawędź.png (89.58 KiB) Przejrzano 6051 razy
Pozdrawiam,
Sebastian

Awatar użytkownika
smiga
Posty: 693
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 3 times
Been thanked: 1 time
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga » 12 sty 2016 12:12

Kwestia odległości kamery od akwarium. Do pełna i tak nikt nie leje wody (chyba :) ), więc łatwo to wyeliminować ograniczając ROI.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

Sibulek
Posty: 8
Rejestracja: 05 sty 2016 10:15
Wersja środowiska: LabVIEW 2014

Re: Wykrycie poziomu wody w naczyniu

Post autor: Sibulek » 12 sty 2016 15:30

smiga ma rację, a poza tym kamery nie można ustawić na równi z dnem, bo jest ona na małym stojaku

Awatar użytkownika
smiga
Posty: 693
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 3 times
Been thanked: 1 time
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga » 12 sty 2016 16:17

Ustaw kamerę tak, żeby Ci nie przeszkadzała dolna i górna krawędź lub ogranicz ROI od dołu i od góry - może pozbędziesz się informacji o zupełnym braku wody w akwarium, ale podejrzewam, że to nie jest duży problem. Można to naprawić dodając dodatkowe, lokalne ROI we wspomnianych obszarach.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 12 sty 2016 16:47

W Vision Assistant skonfigurowałem takie kroki:
1. Load Image (symulacja akwizycji)
2. Pattern Matching (wykrycie lewego dolnego rogu)
3. Set Coordinate System (zdefiniowanie układu współżędnych)
4. Clamp (pomiar odległości pomiędzy wykrytymi skrajnymi krawędziami)

Następnie wygenerowałem VI, którego kod nie wygląda źle i powinien być dość czytelny. Załączam VI, obrazy do akwizycji, wzorzec lewego dolnego rogu i skrypt Vision Assistant.
Załączniki
Zbiornik i krawędzie.zip
(789.17 KiB) Pobrany 118 razy
Pozdrawiam,
Sebastian

Sibulek
Posty: 8
Rejestracja: 05 sty 2016 10:15
Wersja środowiska: LabVIEW 2014

Re: Wykrycie poziomu wody w naczyniu

Post autor: Sibulek » 12 sty 2016 19:35

Dzięki za pomoc, zapomniałem dodać że korzystam z LV 2014 ;)

Awatar użytkownika
skoziate
NI Man
Posty: 243
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate » 12 sty 2016 20:46

Proszę.
Załączniki
Tank Liquid Surface - generated.vi
(82.82 KiB) Pobrany 127 razy
Pozdrawiam,
Sebastian

ODPOWIEDZ