Znajdź określoną linię na zdjęciu

9

Chcę znaleźć linię między kolorem niebieskim a kolorem szarym na poniższym obrazku:

wprowadź opis zdjęcia tutaj

Dokładniej, punkty końcowe tej linii.

Czy transformacja Hougha jest wyborem? Jeśli tak, jak powinienem skonfigurować zdjęcie przed użyciem Hough?

Każdy sposób rozwiązania tego byłoby pomocne.


źródło
Wykonaj wykrywanie krawędzi przed transformacją Hougha. Zmieni to przejście w jasną linię z czernią po obu stronach
endolit

Odpowiedzi:

10

Ogólnie rzecz biorąc, potrzebujesz detektora krawędzi, takiego jak detektor krawędzi Canny, do tego rodzaju problemów. Transformacja Hougha jest przydatna do wydobywania linii, a nie krawędzi.

Jednak w tym konkretnym przypadku lepiej jest zrobić coś takiego:

imdata = imread('grayblue.jpg');
colidx = find(diff(imdata(1,:) ~= 0);

ponieważ jest to taki prosty obraz.

Nzbuu
źródło
0

W przypadku obrazu to proste jądro splotowe, takie jak poniżej, ładnie znajdzie krawędzie:

[-1 2–1]

Daje to pojedynczy piksel krawędzi w każdym punkcie krawędzi. Bez kłopotów, bez musów. Canny jest zbyt zaangażowany w ten problem. Jeśli chcesz znaleźć punkty krawędzi dla linii pod dowolnym kątem, możesz użyć prostego Laplaciana, Laplaciana Gaussa (LoG) lub Różnicy Gaussa (DoG). Sobel i Prewitt są również proste, ale nieodpowiednie, ponieważ dają linię „podwójnej grubości”.

Istnieje zła szybka implementacja Hougha opisana tutaj: http://www.ic.uff.br/~laffernandes/projects/kht/index.html

Istnieją również „bezparametrowe algorytmy Hougha”, które są bardzo szybkie, ale nieco trudne do wdrożenia i debugowania.

Rethunk
źródło