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 »

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
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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 »

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 17576 razy
Image 2016_01_07_132417.468 Image 000.jpg
Image 2016_01_07_132417.468 Image 000.jpg (43.9 KiB) Przejrzano 17576 razy
Image 2016_01_07_132235.616 Image 000.png
Image 2016_01_07_132235.616 Image 000.png (499.51 KiB) Przejrzano 17576 razy
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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 17498 razy
Pozdrawiam,
Sebastian
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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 »

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 17475 razy
Image 2016_01_11_174745.108 Image 000.jpg
Image 2016_01_11_174745.108 Image 000.jpg (28.19 KiB) Przejrzano 17475 razy
Image 2016_01_11_174606.447 Image 000.jpg
Image 2016_01_11_174606.447 Image 000.jpg (28.07 KiB) Przejrzano 17475 razy
Image 2016_01_11_174337.109 Image 000.jpg
Image 2016_01_11_174337.109 Image 000.jpg (28.29 KiB) Przejrzano 17475 razy
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Re: Wykrycie poziomu wody w naczyniu

Post autor: aaddaas »

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 17473 razy
Obrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga »

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 412 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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 17441 razy
Pozdrawiam,
Sebastian
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga »

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 »

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
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Wykrycie poziomu wody w naczyniu

Post autor: smiga »

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
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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 427 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 »

Dzięki za pomoc, zapomniałem dodać że korzystam z LV 2014 ;)
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: Wykrycie poziomu wody w naczyniu

Post autor: skoziate »

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