Encontre os cantos de um polígono representado por uma máscara de região
BW = poly2mask(x, y, m, n)
calcula uma máscara de região de interesse (ROI) binária, BW, a partir de um polígono de ROI, representado pelos vetores x e y. O tamanho do BW é m-por-n.
poly2mask
define pixels em BW que estão dentro do polígono (X, Y) para 1 e define pixels fora do polígono como 0.
Problema: Dada uma tal máscara bináriaBW
de um quadrilátero convexo, qual seria a maneira mais eficiente de determinar os quatro cantos?
Por exemplo.,
Melhor solução até agora: Usaredge
para encontrar as linhas delimitadoras, a transformação Hough para encontrar as 4 linhas na imagem da borda e, em seguida, encontrar os pontos de interseção dessas 4 linhas ou usar um detector de canto na imagem da borda. Parece complicado, e não posso deixar de sentir que há uma solução mais simples por aí.
Btw,convhull
nem sempre retorna 4 pontos (talvez alguém possa sugerirqhull
opções para evitar isso): ele retorna alguns pontos ao longo das bordas também.
EDITAR: Resposta de Amro parece bastante elegante e eficiente. Mas pode haver vários "cantos" em cada canto real, já que os picos não são únicos. Eu poderia agrupá-los com base emθ e média dos "cantos" em torno de um canto real, mas o principal problema é o uso deorder(1:10)
.
É10
o suficiente para explicar todos os cantos ou isso excluirá um "canto" em um canto real?