Recursão em pixelsRegiao

Recursão em pixelsRegiao

por Renato de Souza -
Número de respostas: 7

olá

Não entendi muito bem o funcionamento dessa função. Ela deve varrer o desenho inteiro? Por exemplo, se há uma região amarela no canto esquerdo superior do desenho, e uma região na mesma cor em outro canto (ou seja, as regiões são da mesma cor, mas não tem nenhum pixel vizinho entre si), ela deve colocar essa segunda região na mesma lista em que está a primeira? Ou deve parar de fazer chamadas quando atinge um pixel de cor diferente do utilizado para a chamada original?

Em resposta à Renato de Souza

Re: Recursão em pixelsRegiao

por Gustavo Estrela de Matos -

Pelo o que eu entendi, essa função varre todos os pixels. Mesmo que não exista um "caminho" de vizinhos de mesma cor entre dois pixels de mesma cor. O que determina quando a função para é a característica "visitado", pois ele determina se será ou não chamada a função novamente de maneira recursiva.

Em resposta à Renato de Souza

Re: Recursão em pixelsRegiao

por Victor Sanches Portella -

Acho que para essa dúvida da pra levar em consideração a definição dada para a função: 

 Essa lista devolvida deve ser criada recursivamente 
   visitando-se 

        - os vizinhos do pixel da posicao (h,w) 
          que tem a mesma cor que o pixel semente 
          e ainda nao foram visitados 

Caso você fosse criar uma função recursiva que colocasse em uma mesma região pixels da mesma cor de regiões desconexas da imagem, você teria que visitar pixels de cor diferente da cor semente.

Em resposta à Victor Sanches Portella

Re: Recursão em pixelsRegiao

por Renato de Souza -

Obrigado boca aberta
Em relação as regiões, só formam uma região pixels vizinhos e da mesma cor, então? Estou em dúvida porque no executável, ao apertar 'r', ficam apenas pixels vizinhos de mesma cor, mas ao clicar em uma cor, todos pixels da mesma cor, mesmo não vizinhos, mudam.

Em resposta à Renato de Souza

Re: Recursão em pixelsRegiao

por Victor Sanches Portella -

Então, também tive essa dúvida quando fui ver o EP. corado

A primeira coisa que eu pensei foi que a função trocaCor fosse trocar a cor de todas as regiões que tivessem a mesma cor, mas se você for perceber, mexendo no executável dá para ber que as vezes, quando trocamos a cor de um conjunto de regiões de mesma cor, pode acontecer de ser a mesma cor de outra região que não estava no "conjunto original".

Caso a função trocaCor trocasse a cor de todas as regiões de mesma cor, as regiões começariam a "se juntar", até que no final todas ficariam de uma mesma cor, depois de um número suficiente de cliques.

Mas eu acho que fazer uma função recursiva que "pule" as regiões de cores diferentes para deixar todos os pixels de mesma cor em uma mesma região pode deixar a função mais chata que o necessário, e provavelmente bem mais pesada (em alguns casos é difícil achar a base da recursão, e possivelmente a função entraria em loop).

Então talvez o mais interessante seria, na hora em que você está criando sua lista de regiões, fazer algo que junte regiões de mesma cor.

Em resposta à Renato de Souza

Re: Recursão em pixelsRegiao

por José Coelho de Pina -

Salve, 

Deixa eu ver se ajuda.

No EP há duas imagens.
No enunciado essas imagens são chamadas de original (imgOriginal) e corrente ou atual (tela).

só formam uma região pixels vizinhos e da mesma cor,

Sim, região (conexa de pixels de mesma cor) na imagem original.

ao apertar 'r', ficam apenas pixels vizinhos de mesma cor,

Sim, na imagem corrente são apresentadas as regiões da imagem original.

ao clicar em uma cor, todos pixels da mesma cor, mesmo não vizinhos, mudam.

Sim, mudam de cor na imagem corrente todos os pixels de mesma cor que o pixel na imagem original.

Em resposta à José Coelho de Pina

Re: Recursão em pixelsRegiao

por José Coelho de Pina -

Vou escrever mais uma coisas que talvez ajudem sorriso, ou atrapalhem tímido:

  • a imagem original (imgOriginal) é lida no início do programa;
  • a imagem original não é alterada ao longo do programa;
  • o conceito de região é referente a imagem original e é fixo ao longo da execução do programa;
  • a imagem corrente/atual (tela) é exibida pela janela do programa;
  • apenas pixels da imagem corrente/atual mudam de cor;