2011-01-19 11 views
7

Obecnie pomagam przyjaciołom pracującym nad projektem geofizycznym, nie jestem w żadnym razie profesjonalistą zajmującym się przetwarzaniem obrazów, ale czerpię radość z grania w tego rodzaju problemach z . =)Znajdowanie wysokości nad poziomem wody w skałach

Celem jest oszacowanie wysokości małych skalnych wystających z wody, od powierzchni do góry.

Eksperymentalnym sprzętem będzie kamera o rozdzielczości 10 megapikseli zamontowana na mierniku odległości z wbudowanym wskaźnikiem laserowym. "Operator" wskaże to na skale, naciśnij spust, który zarejestruje odległość wzdłuż zdjęcia skały, która będzie znajdować się w środku obrazu.

Zakłada się, że urządzenie zawsze trzyma się w stałej odległości nad powierzchnią wody.

Jak widzę to istnieje szereg problemów do przezwyciężenia:

  1. warunki oświetleniowe

    • w zależności od pory dnia itp skała może być jaśniejszy następnie woda lub przeciwnie.
    • Czasami skała będzie miała kolor bardzo zbliżony do wody.
    • Pozycja cienia przesunie się przez cały dzień.
    • W zależności od stopnia chropowatości wody może być czasami odbicie skały w wodzie.
  2. Różnorodność

    • Skała nie jest równomiernie kształcie.
    • W zależności od rodzaju skały, wzrostu porostów itp. Zmienia wygląd skały.

Fortunateness, nie brakuje danych testowych. Zdjęcia skał w wodzie są łatwe do zdobycia. Oto kilka przykładowych obrazów: alt text Uruchomiłem detektor krawędzi na obrazach, a szczególnie na ekranie. na czwartym zdjęciu słaby kontrast sprawia, że ​​trudno jest dostrzec krawędzie: alt text Wszelkie pomysły będą mile widziane!

+0

Działają nieco na ten sam problem: http://gaugecam.com/blog/?page_id=62 (chociaż nie widzę rozwiązania Twojego problemu) – svrist

+0

Wygląda na to, że możesz poprawić swoje wykrywanie krawędzi więcej http://en.wikipedia.org/wiki/Edge_detection – svrist

+0

To jest problem ze wzrokiem; chyba że potrzebujesz pomocy w poprawie detektora krawędzi. – koan

Odpowiedz

4

Nie sądzę, że wykrywanie krawędzi jest najlepszym sposobem wykrywania skał. Inne obiekty, takie jak góry, a nawet odbicia w wodzie, będą miały krawędzie.

sugeruję spróbować podejścia klasyfikacji pikseli do segmentu skały z tłem obrazu:

  • Dla każdego piksela obrazu, wyodrębnić zbiór deskryptorów obraz z okolicy NxN skupione na tym piksel.
  • Wybierz zestaw obrazów i ręcznie oznaczaj piksele jako kamień lub tło.
  • Użyj oznaczonych pikseli i odpowiednich deskryptorów obrazu, aby wyszkolić klasyfikator (np.klasyfikator Naive Bayes)

Ponieważ skały mają zazwyczaj podobną teksturę, użyłbym deskryptorów obrazu tekstury do trenowania klasyfikatora. Możesz spróbować, na przykład, wyodrębnić kilka miar statystycznych z każdego koloru chanel (R, G, B), takich jak średnia i odchylenie standardowe wartości intensywności.

+0

Tak, myślałem o używaniu klasyfikatora probabilistycznego, takiego jak NB, ale nie mogę myśleć, jak to by wyeliminowało odbicia .. – Theodor

2

Podział kolorów w celu znalezienia skały wraz z wykrywaniem krawędzi w celu znalezienia góry.

Aby znaleźć poziom wody, spróbuję znaleźć wszystkie granice skały wodnej i horyzont (jeśli to możliwe), a następnie dopasować samolot do powierzchni wody. W ten sposób nie musisz martwić się odbiciami skały.

Łatwiejszy, jeśli znasz kąt nachylenia pomiędzy aparatem i wodą, a aparat jest wypoziomowany poziomo (rolka).

ps. Jest to o wiele trudniejsze, niż myślałem - nie znasz odległości do wszystkich skał, więc dopasowanie samolotu jest trudne.

Występuje, że odbicie jest w rzeczywistości idealnym sposobem na znalezienie poziomu, szukanie symetrycznych krawędzi ścieżki w wykryciu krawędzi skały i wybrania wierzchołka?

+0

Skała będzie wyśrodkowana na obrazie, więc znalezienie skały na obrazie nie stanowi problemu. Ale gdzieś prawdopodobnie chodzi o wydobywanie skały z obrazu. Dopasowanie płaszczyzny do powierzchni wody ma sens, ale jak odfiltrować odbicia? Zgadzam się, że kąt przechyłu i pochylenia powinien być znany, co można łatwo uzyskać, dopasowując prosty poziom, taki jaki ma się na statywach do aparatu. – Theodor

2

Klasyfikacja pikseli może tutaj działać, ale nigdy nie przyniesie 100% dokładności. Różnice w danych są naprawdę duże, kamienie mają różne kolory (które są również "zepsute" oświetleniem) i różną teksturę. Tak więc, należy również uwzględnić informacje globalne.

Problemem, z którym masz do czynienia jest ekstrakcja pierwszego planu. Są dwa podejścia, które znam.

  1. Minimalizacja zużycia energii za pomocą wykresów, patrz np. http://en.wikipedia.org/wiki/GrabCut (istnieją linki do dokumentu i implementacji OpenCV). Niektóre inicjacje ("nasiona") powinny być wykonane (przez użytkownika lub przez jakąś wcześniejszą wiedzę, tak jak skała znajduje się w centrum, gdy woda znajduje się na obrzeżach). Innym wariantem danych wejściowych jest przybliżony prostokąt ograniczający. Jest zaimplementowany w narzędziu do wyodrębniania pierwszego planu MS Office 2010. Funkcja energetyczna możliwych poletek na pierwszym planie/w tle wymusza na pierwszym planie podobne do nasion pierwszego planu i gładką granicę. Zatem minimalna energia odpowiada dobrej masce pierwszego planu. Zauważ, że w przypadku metody klasyfikacji pikselowej należy wstępnie oznaczać wiele obrazów, z których można się uczyć, a następnie segmentacja jest wykonywana automatycznie, a przy takim podejściu należy wybierać nasiona na każdym obrazie zapytania (lub są one wybierane niejawnie).

  2. Active contours a.k.a. węże również wymagają interakcji użytkownika. Są bardziej podobne do narzędzia Photoshop Magic Wand. Próbują również znaleźć gładką granicę, ale nie biorą pod uwagę wewnętrznego obszaru.

Obie metody mogą mieć problemy z odbiciami (klasyfikacja pikseli z pewnością będzie miała). W takim przypadku możesz spróbować znaleźć przybliżoną pionową symetrię i usunąć dolną część, jeśli taka istnieje. Możesz również poprosić użytkownika o zaznaczenie reflaction jako tła podczas zbierania statystyk dla cięć wykresów.

+0

Fajnie, technika GrabCut/Graph Cut wygląda naprawdę obiecująco. Wraz z techniką wykrywania powierzchni wody może to być interesujące. Być może możesz dopasować trójkąt do wyodrębnionej kropli i uzyskać oszacowanie przez wysokość trójkątów. – Theodor

Powiązane problemy