Jump to content
Sign in to follow this  
FET_Destroyer

Detecção de centro de um circulo

Recommended Posts

FET_Destroyer

Olá.

Sou novo a postar neste forum mas costumo acompanha-lo pois interessa-me bastante a programação.

Gostaria de saber se alguém me pode ajudar com isto.

Tenho uma imagem com apenas um circulo e gostaria de calcular o centro desse circulo.

Vi algoritmos na net como a tramsformada de hough no entanto não a posso aplicar devido à falta de recursos do micro que estou a usar, nomeadamente RAM. Gostaria de saber se existem outras opçoes viaveis, podem não ser MEGA precisas, apenas que calculem o centro aproximado de um circulo.

Cumprimentos

Share this post


Link to post
Share on other sites
pmg

O circulo é uma linha ou uma área (ie, o círculo está pintado)?

Suponho que tens maneira de descobrir informações sobre a imagem.

Procura, possivelmente pixel-a-pixel, um pixel aceso (pertencente ao circulo).

A recta horizontal que passa por esse pixel intersecta o circulo em dois pontos: chama esses pontos A e B (se o circulo for uma área escolhe os pontos mais afastados).

A recta vertical que passa por esse pixel intersecta o circulo em dois pontos: chama esses pontos C e D (idem como A e B).

O centro do circulo é a intersecção da recta perpendicular a AB que passa pelo meio de AB e da recta perpendicular a CD que passa pelo meio de CD.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
HappyHippyHippo

pseudo-código :

variável dist = 0
varável centro = 0
para cada linha da imagem
  guardar os y's dos pontos da circunferência encontrados
  se foram encontrados 2 então
    calcular a distância dos y's
    se a distância calculada for maior que a guardada na variável dist então
       guardar a distância na variável dist
       guardar o meio dos dois pontos na variável centro
    caso contrário (a distância é menor que a guardada, isto é a linha que passa pelo centro da circunferência já foi processada)
       retornar os indices : y = numero da linha que se está a ser processada / x = variável centro


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pikax

verificas os pixeis e guardas a posicao dos pixeis mais 'a esquerda(ou cima) e direita(ou baixo), mas tens que ver que a imagem deve ter pixeis meio transparente(para dar a sensação de circulo perfeito), depois basta calculares quantos pixeis sao de um ao outro depois e' calcular a relacao entre pixeis e distancia real.

Penso que desta forma consumiras pouca RAM, mas nao sei nunca tentei implementar algo do genero


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Dr_Lion

Outra opção é:

Escolheres 4 pontos distintos da circunferência, traçar duas rectas cada uma a passar por 2 desses pontos, e é calcular a intersecção das duas rectas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.