Wykrycie poziomu wody w naczyniu
Wykrycie poziomu wody w naczyniu
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.
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Wykrycie poziomu wody w naczyniu
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.
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
Sebastian
Re: Wykrycie poziomu wody w naczyniu
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 (44.14 KiB) Przejrzano 19147 razy
-
- Image 2016_01_07_132417.468 Image 000.jpg (43.9 KiB) Przejrzano 19147 razy
-
- Image 2016_01_07_132235.616 Image 000.png (499.51 KiB) Przejrzano 19147 razy
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: Wykrycie poziomu wody w naczyniu
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ęć?
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 (263.32 KiB) Przejrzano 19069 razy
Pozdrawiam,
Sebastian
Sebastian
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: Wykrycie poziomu wody w naczyniu
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
Sebastian
Re: Wykrycie poziomu wody w naczyniu
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 (26.78 KiB) Przejrzano 19046 razy
-
- Image 2016_01_11_174745.108 Image 000.jpg (28.19 KiB) Przejrzano 19046 razy
-
- Image 2016_01_11_174606.447 Image 000.jpg (28.07 KiB) Przejrzano 19046 razy
-
- Image 2016_01_11_174337.109 Image 000.jpg (28.29 KiB) Przejrzano 19046 razy
Re: Wykrycie poziomu wody w naczyniu
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
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 (42.35 KiB) Przejrzano 19044 razy

- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Wykrycie poziomu wody w naczyniu
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.
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.zip
- v2015
- (1.22 KiB) Pobrany 495 razy
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: Wykrycie poziomu wody w naczyniu
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 (89.58 KiB) Przejrzano 19012 razy
Pozdrawiam,
Sebastian
Sebastian
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Wykrycie poziomu wody w naczyniu
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.

Re: Wykrycie poziomu wody w naczyniu
smiga ma rację, a poza tym kamery nie można ustawić na równi z dnem, bo jest ona na małym stojaku
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Wykrycie poziomu wody w naczyniu
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.
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: Wykrycie poziomu wody w naczyniu
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.
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 516 razy
Pozdrawiam,
Sebastian
Sebastian
Re: Wykrycie poziomu wody w naczyniu
Dzięki za pomoc, zapomniałem dodać że korzystam z LV 2014 ;)
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: Wykrycie poziomu wody w naczyniu
Proszę.
- Załączniki
-
- Tank Liquid Surface - generated.vi
- (82.82 KiB) Pobrany 494 razy
Pozdrawiam,
Sebastian
Sebastian