Znajdź rogi wielokąta reprezentowanego przez maskę regionu
BW = poly2mask(x, y, m, n)
oblicza masę obszaru binarnego (ROI), BW, z wielokąta ROI, reprezentowanego przez wektory x i y. Rozmiar BW to m-by-n.
poly2mask
ustawia piksele w BW, które są wewnątrz wielokąta (X, Y) na 1 i ustawia piksele poza wielokątem na 0.
Problem: Biorąc pod uwagę taką maskę binarnąBW
wypukłego czworoboku, jaki byłby najskuteczniejszy sposób określenia czterech rogów?
Na przykład.,
Najlepsze rozwiązanie do tej pory: Posługiwać sięedge
aby znaleźć linie graniczne, przekształć Hough, aby znaleźć 4 linie na obrazie krawędzi, a następnie znajdź punkty przecięcia tych 4 linii lub użyj detektora narożnego na obrazie krawędzi. Wydaje się to skomplikowane i nie mogę się oprzeć wrażeniu, że istnieje prostsze rozwiązanie.
Btw,convhull
nie zawsze zwraca 4 punkty (może ktoś może zasugerowaćqhull
opcje, aby temu zapobiec: zwraca również kilka punktów wzdłuż krawędzi.
EDYTOWAĆ: Odpowiedź Amro wydaje się dość elegancki i wydajny. Ale w każdym rzeczywistym kącie może być wiele „rogów”, ponieważ szczyty nie są wyjątkowe. Mogłem je grupować w oparciu oθ i uśrednij „rogi” wokół prawdziwego zakrętu, ale głównym problemem jest użycieorder(1:10)
.
Jest10
wystarczy, aby wziąć pod uwagę wszystkie zakręty lub czy wykluczy to „róg” w prawdziwym zakątku?