-
1. Data: 2020-10-21 10:29:24
Temat: Odczyt ciśnienia - analiza obrazu
Od: heby <h...@p...onet.pl>
Cześć.
Jest takie coś:
https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkH
eubBNSpJPAS5F/view?usp=sharing
Zdjęcie jest zrobione normalnym aparatem, docelowo będzie to nagrywane
gorszej jakosci kamerą, więc kontrast i szumy będa inne, odczyt będzie
też w nocy (podświetlowny z boku) więc cienie też będą inne.
Wiem, że zawsze orientacja obrazu będzie taka jak widać, czyli połowa
zakresu, wskazówka w pionie. Kamerę mam pod kontrolą.
Zadanie:
Mając do dyspozycji niewielką moc obliczeniową (~-pi) zanalizować obraz
i odczytać położenie wskazówki na tarczy dostając liczbę 0-max.
To nie jest krytyczne, wiec jesli raz na jakiś czas będzie bład to nie
złego się nie stanie.
Po drugie, to nie jest real-time. Jeśli odczytam położenie raz na
kilkanaście sekund, będzie ok.
Najwygodniej będzie mi uzyć OpenCV + python bo mam w tym jakieś
doświadczenia.
Teraz:
Mam jakieś pomysły jak to zrealizować za pomocą kilku algorytmów, ale
całośc rozbija się o to, że warunki w których to robię, będą zmienne.
Zarówno oświetlenie jak i "zaparowanie" górnej częsci wyświetlacza będą
zależały od pogody.
Coś czuje że bez sprytniejszych algorytmów daleko nie zajadę.
Opcja czołgowa: generować sztuczny obraz czyjnika bez wskazówki,
metodami porównywania obrazu dopasować go idealnie do klatki z kamery,
wklejać wskazówkę co kilka stopni i sprawdać która z takich wklejonych
wskazówek splecie się najlepiej z obrazem. Tylko że to czasochłonne.
Opcja sensowna: algorytm potrafiący określić od razu kąt pod którym
widać wskazówkę, np. po wykasowaniu pierścienia i tarcz (tarcze pewnie
załatwi prosta binaryzacjia + erozja). Jakieś propozycje na odczyt kąta
pod którym jest wskazówka?
Może ktoś widział podobne zagadnienie w postaci publikacji gdzie mógłbym
zerknąć choćby na hasłowe algorytmy?
PS. Nie, nie da się podłaczyć czujnika innego niż ten ;) Z przyczyn
pozatechnicznych.
PS2. To nie zaliczenie, to konkretny problem ad-hoc z domu ...
-
2. Data: 2020-10-21 10:50:10
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: heby <h...@p...onet.pl>
On 21/10/2020 10:29, heby wrote:
> Cześć.
I jeszcze jedno: tak wiem że są "gotowce" na sieci, nawet kilka
obejrzałem, zwyczajowo sprawadzaja się do binaryzacji i użycia na tym
transformaty Hougha. Ale może ktoś ma jakiś inny pomysł, nie wykluczam
że fajnie by było usłyszeć o AI.
-
3. Data: 2020-10-21 21:44:43
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: Maciej Sobczak <s...@g...com>
> Jest takie coś:
>
> https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkH
eubBNSpJPAS5F/view?usp=sharing
Wolfram:
img = Import["cisnieniomierz.jpg"];
img2 = ImageTake[
ImageResize[ImageMultiply[img, 5], 500], {76, -39}, {86, -82}];
img2 to rozjaśniony, wycentrowany (na oś wskazówki, wartości dobrane) i pomniejszony
obraz ciśnieniomierza.
mask = Rasterize[
Graphics[{Disk[{0, 0}, 1.1], White, Disk[{0, 0}, 1]},
PlotRange -> {{-1.75, 1.75}, {-1.75, 1.75}}],
RasterSize -> ImageDimensions[img2]];
mask to maska, która wycina pierścień tam, gdzie jest czerwone pole (tam jest tylko
czarna wskazówka na czerwonym, więc nic innego nie przeszkadza).
img3 = ImageMultiply[img2, ColorNegate[mask]];
img4 = ImageAdd[img3, mask];
img4 to wycięte czerwone pole z kawałkiem czarnej wskazówki, reszta jest całkiem
biała.
blacks = PixelValuePositions[img4, Black, 0.15];
blacks to lista pozycji czarnych (lub prawie czarnych, tolerancja dobrana) pikseli.
Jest ich w sumie 7.
Map[
Function[p,
N@ArcTan[Divide @@ Reverse[(p - ImageDimensions[img2]/2)]]/Degree
],
blacks
] // Median
7.81529
I tyle właśnie, w stopniach, jest odchylona wskazówka od poziomu.
Można też porobić dużo zdjęć wzorcowych i porównywać korelacją albo jakimiś sieciami,
ale samą arytmetyką jest dużo taniej. Da się to zrobić w dowolnym innym języku.
(BTW - Google twierdzi, że w tym kodzie są adresy mailowe. Dobre.)
--
Maciej Sobczak * http://www.inspirel.com
-
4. Data: 2020-10-21 22:03:22
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: heby <h...@p...onet.pl>
On 21/10/2020 21:44, Maciej Sobczak wrote:
>> https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkH
eubBNSpJPAS5F/view?usp=sharing
> Wolfram:
Niestety ciezko go wdrożyć, troche jak matlab, dobry do prezentacji na
konferencji i reszte rób se sam ;)
> Map[
> Function[p,
> N@ArcTan[Divide @@ Reverse[(p - ImageDimensions[img2]/2)]]/Degree
> ],
> blacks
> ] // Median
>
> 7.81529
>
> I tyle właśnie, w stopniach, jest odchylona wskazówka od poziomu.
Co to w zasadzie robi? Wcześniejsze funkcje to tylko prosta obróbka
obrazu, ale tutaj troche niejasne, nie znam składni Wolframa. Tylko
arctang liczysz z pixeli? Co to za mapa?
> Można też porobić dużo zdjęć wzorcowych i porównywać korelacją albo jakimiś
sieciami, ale samą arytmetyką jest dużo taniej.
Obawiam się że nie zadziała jak tylko zmienią się warunki oświetlenia.
Obecnie projektuje podstawkę pod kamerę, trzeba to jeszcze wydrukować i
będę miał pełny zakres oświetlenia po 1 dobie, więc grybam sobie jak to
będzie wygladać, ale raczej będzie oświetlenie nocne i może część detali
zmieni kompletnie wygląd.
Robiłem kilka analiz tego typu róznymi metodami i zazwyczaj proste
liczenie pixeli wybija sobie zęby o pierwszą muchę na obrazie, słabo się
sprawdzą jak pojawią się odbicia, cienie, szum. Szukam czegoś bardziej,
bo ja wiem, statystycznego. Transformata Hougha jest tutaj praktycznie
oczywistym rozwiązaniem, ale o ile wiem jest bardzo cieżka obliczeniowo
(masa latania po obrazie i kręcenia prostą sumując pixele). Ale może się
mylę i z tej prostej metody wynika jednak jakaś optymalizacja stosowana
w opencv?
Obecnie szyje sobie na boku własnie coś oparte o Hougha, czuje jednak że
można prościej, np. można zrobić splot ze sztuczną wskazówką, bo środek
tarczy jestem w stanie łatwo znaleźć i ją sobie narysować. W tedy z
Hougha zostanie tylko 1 punkt z nieznanym "fi" co znacząco zmniejszy
ilośc liczenia. Albo nie mam racji i nie warto tak optymalizować.
> Da się to zrobić w dowolnym innym języku.
Wiadomo.
-
5. Data: 2020-10-22 00:07:26
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: Maciej Sobczak <s...@g...com>
> > Wolfram:
>
> Niestety ciezko go wdrożyć,
Na RaspberryPi jest już wdrożony. Akurat do gapienia się na ciśnieniomierz w piwnicy.
> > Map[
> > Function[p,
> > N@ArcTan[Divide @@ Reverse[(p - ImageDimensions[img2]/2)]]/Degree
> > ],
> > blacks
> > ] // Median
> Co to w zasadzie robi? Wcześniejsze funkcje to tylko prosta obróbka
> obrazu, ale tutaj troche niejasne, nie znam składni Wolframa. Tylko
> arctang liczysz z pixeli? Co to za mapa?
Z wcześniejszych obliczeń, blacks to lista pozycji czarnych punktów, np. taka
(powiedzmy, że są 3 punkty obok siebie):
{{42,65},{43,65},{43,66}}
Powiedzmy, że obrazek ma 200x200, więc środek ma w punkcie {100,100}. Taką wartość
dostajemy z ImageDimensions[img2]/2.
Trzeba znaleźć wektor ze środka obrazka (bo wcześniejsze obliczenia były po to, żeby
środek obrazka był w osi wskazówki) do tych czarnych punktów - to robi odejmowanie (p
- ImageDimensions[img2]/2), jeśli p jest jednym z punktów z listy. Dalej liczymy
normalnie ArcTan[y/x] tego wektora, ale skoro mamy {x,y}, to trzeba odwrócić
kolejność (Reverse) i zamienić parę na dzielenie (Divide). Wynik chcemy w stopniach -
dzielimy przez Degree, co jest stałą oznaczajacą ilość radianów w stopniu. Mapa robi
to wszystko dla każdego punktu z listy. Na sam koniec (notacja post-fix) jest
wybierany środkowy wynik, na wypadek gdyby trafiła się jakaś "mucha" gdzieś.
Można się jeszcze zastanowić, w którym kwadrancie są te punkty, bo to wpływa na znak
kąta.
> Robiłem kilka analiz tego typu róznymi metodami i zazwyczaj proste
> liczenie pixeli wybija sobie zęby o pierwszą muchę
Właśnie nie. Można nawet przyjąć jakąś oczekiwaną liczbę pikseli z tej analizy. Jak
jest ich za dużo, to masz muchę i odrzucasz pomiar. Jak jest ich tyle, co trzeba, to
jest ok (albo się urwała wskazówka i jest mucha udająca wskazówkę - ale takiego
sabotażu niczym się nie obsłuży).
> Transformata [...]
Szkoda liczenia.
--
Maciej Sobczak * http://www.inspirel.com
-
6. Data: 2020-10-22 08:55:02
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: Andrzej S <a...@e...pl>
W dniu 2020-10-21 10:29, heby pisze:
> Cześć.
>
> Jest takie coś:
>
> https://drive.google.com/file/d/1wsunQU_gOmqgQ1-jFkH
eubBNSpJPAS5F/view?usp=sharing
>
1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
Grubość wskazówki mówi ile ich powinno być.
2. Wzdłuż każdego odcinka policz sumę RGB.
3. Wskazówka to ten odcinek, dla którego suma jest minimalna.
pozdro
--
A S
-
7. Data: 2020-10-22 09:19:34
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: heby <h...@p...onet.pl>
On 22/10/2020 08:55, Andrzej S wrote:
> 1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
> Grubość wskazówki mówi ile ich powinno być.
> 2. Wzdłuż każdego odcinka policz sumę RGB.
> 3. Wskazówka to ten odcinek, dla którego suma jest minimalna.
To własnie uproszczona transformata Hougha. Bede to m.in. próbował jak
ogarnę mechaniczne mocowanie, ale najpierw pójdzie uproszczony algorytm
od Maćka.
-
8. Data: 2020-10-22 18:29:01
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: Maciej Sobczak <s...@g...com>
> 1. Skonstruuj pęk kilkuset odcinków od środka do brzegu (jak wskazówka).
> Grubość wskazówki mówi ile ich powinno być.
Dobry pomysł, ale odcinki powinny mieć taką samą długość, bo inaczej odległość do
brzegu będzie mieć wpływ na sumę. W sensie - niech to będzie "do brzegu", ale np.
tarczy, a nie całego obrazka.
--
Maciej Sobczak * http://www.inspirel.com
-
9. Data: 2020-10-22 19:52:51
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: Roman Tyczka <r...@h...you.spammer>
W dniu 21.10.2020 o 10:29, heby pisze:
> PS. Nie, nie da się podłaczyć czujnika innego niż ten ;) Z przyczyn
> pozatechnicznych.
>
> PS2. To nie zaliczenie, to konkretny problem ad-hoc z domu ...
A może wybić szybkę, pomalować wskazówkę mocno odblaskowym lakierem i
robić fotę z drobnym oświetleniem?
Wtedy wskazówka będzie "świecić" i łatwo ją będzie zlokalizować.
--
pzdr
Roman
-
10. Data: 2020-10-22 22:16:22
Temat: Re: Odczyt ciśnienia - analiza obrazu
Od: heby <h...@p...onet.pl>
On 22/10/2020 19:52, Roman Tyczka wrote:
> A może wybić szybkę, pomalować wskazówkę mocno odblaskowym lakierem i
> robić fotę z drobnym oświetleniem?
Za 5 lat. Po gwarancji ...
> Wtedy wskazówka będzie "świecić" i łatwo ją będzie zlokalizować.
A jak by jeszcze do niej przymocować mały enkoder ... Wiesz, jak bym
mógl pozbyć się tego manometru i wstawić czujnik elektroniczny to by w
ogóle tematu nie było ...
Na razie w grę wchodzą metody bezinwazyjne, kiedyś, w przyszłosci, będa
metody sensowne.
PS. Znalazłm wiele lat temu rozwiązanie podobnego problemu za pomocą
kilku cewek wykrywajacych zmianę inducyjności gdy pod nimi była
wskazówka. Autor narzekał, że całośc rozkalibrowuje się co chwile.
PS2. A całkiem serio to pomyślałem że to taka zabawa. Wiedza o ciśnieniu
jest mi prawie niepotrzebna, ale chciałem sobie poćwiczyć pythona i
opencv. To czemu nie skorzystać z okazji i zrobic coś użytecznego.