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?

questionAnswers(5)

yourAnswerToTheQuestion