2016-04-01 47 views
6

Chcę znaleźć rozwiązanie, aby uzyskać wymiary obiektu przy użyciu aparatu, Dobrze to brzmi jak Duplikat jedenZnajdź wymiarów (wysokość, szerokość) obiektu przy użyciu aparatu

How to measure height, width and distance of object using camera?

ale rozwiązanie nie pomaga mi. Z linku Above mam pomysł, aby dowiedzieć się odległość (Measure Distance).

Czy ktoś może zasugerować mi, w jaki sposób mam uzyskać szerokość i wysokość obiektu. Prosta matematyka lub jakikolwiek Pomysł byłby naprawdę pomocny.

Czy są jakieś możliwości osiągnięcia powyższego rozwiązania za pomocą OpenCV. Measure Height and Width

Co próbowałem dotąd:

enter image description here

Załóżmy zakładamy stałą odległość, możemy obliczyć Angle of elevation

tan(α/2) = (l/2)/d, 

hence 

α = 2*atan(l/2d) 

Ale nadal nie wiemy wartość L (długość obiektu)

Inny sposób wyszukiwania kąta widzenia:

double thetaV = Math.toRadians(camera.getParameters().getVerticalViewAngle()); 
    double thetaH = Math.toRadians(camera.getParameters().getHorizontalViewAngle()); 

Wydaje się, że nie działa!

Odpowiedz

4

Rzeczywistą fizykę obiektywu objaśniono na przykład na this website of Georgia State University.

Zobacz tę ilustrację, która wyjaśnia, jak można użyć powiększenie liniowe lub ogniskowe stosunki długości, aby dowiedzieć się rozmiar obiektu od rozmiaru obrazu:

Nice lens illustration with equations

w szczególności -i/h' = o/h, a relacja ta o/h prawdą dla wszystkich podobnych trójkątów (to znaczy obiekt o rozmiarze 2h w odległości 2o ma ten sam rozmiar h' na zdjęciu). Jak widać, nawet w przypadku pełnego równania, nie można znać zarówno odległości o, jak i rozmiaru h obiektu - jednak jeden da ci drugi.

Z drugiej strony, dwa obiekty w tej samej odległości o będzie zobaczyć ich rozmiary h1' i h2' na obrazek być proporcjonalne do ich wielkości w prawdziwym życiu h1 i h2, ponieważ h1'/h1 = M = h2'/h2.

Stąd jeśli wiesz dla jednego obiektu zarówno o i h wiesz M, więc znając wielkość obiektu, na filmie można odliczyć jego rozmiar od jego odległości i vice versa.

Wartość -i/h' jest wyrażana naturalnie dla maksymalnej wartości h'. Jeśli rozmiar obiektu dokładnie wypełnia obraz, wypełnia on pole widzenia, a stosunek jego odległości do jego rozmiaru to tan(α/2) = (l/2)/d (zauważ, że w konwencjach na poniższym obrazku: d = o i l = 2 * h).

enter image description here

Ten α jest to, czego nazwać teta w swoim przykładzie. Teraz, z rozmiaru obrazu, można uzyskać pod kątem, w którym widać obraz - to znaczy, jaki rozmiar byłby obrazem, gdyby był w odległości d. Stamtąd możesz wywnioskować rozmiar obiektu z jego odległości i odwrotnie.

Algorytm kroki:

  1. get stosunek r = size of object in image (in px)/total size of image (in px).
    Wykonaj to wzdłuż osi, dla której wiesz lub planujesz uzyskać rzeczywisty rozmiar obiektu, oczywiście.
  2. uzyskać odpowiednie pole widzenia i kąt wielowarstwowego r przez styczną połowę tego kąta
    r *= tan(camera.getParameters().getXXXXViewAngle()/2)
  3. r jest styczna z pół-kąt pod którym można zobaczyć obiekt, stąd następujące relacje są prawdziwe: r = (l/2)/d = h/o (z odpowiednimi zapisami rysunku).
    • Jeśli znasz odległość d do obiektu, jego rozmiar jest l = 2 * r * d
    • Jeżeli znasz rozmiar l obiektu, to jest w odległości jest d = l/(2 * r)

to działa w przypadku przedmiotów kapelusz jest rzeczywiście wskazany przez aparat, jeśli nie są wyśrodkowane, matematyka może być wyłączona.