Strona 1 z 2

Wykrycie poziomu wody w naczyniu

: 05 sty 2016 10:32
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.

Wykrycie poziomu wody w naczyniu

: 05 sty 2016 14:24
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.

Re: Wykrycie poziomu wody w naczyniu

: 07 sty 2016 13:35
autor: Sibulek
Wykonałem kilka zdjęć zbiornika z wodą. Pliki są wygenerowane przez labview w różnych formatach i różnych typach oświetlenia.

Re: Wykrycie poziomu wody w naczyniu

: 11 sty 2016 11:06
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ęć?

Re: Wykrycie poziomu wody w naczyniu

: 11 sty 2016 16:10
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.

Re: Wykrycie poziomu wody w naczyniu

: 11 sty 2016 17:57
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.

Re: Wykrycie poziomu wody w naczyniu

: 11 sty 2016 18:17
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

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 01:03
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.

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 11:01
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ą.

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 12:12
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.

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 15:30
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

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 16:17
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.

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 16:47
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.

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 19:35
autor: Sibulek
Dzięki za pomoc, zapomniałem dodać że korzystam z LV 2014 ;)

Re: Wykrycie poziomu wody w naczyniu

: 12 sty 2016 20:46
autor: skoziate
Proszę.