Projeto Parte 1
Uma imagem digital é uma matriz de elementos, podendo ter duas ou mais dimensões, em que cada elemento é um pixel com uma cor ou tom de cinza. Cada cor pode ser representada por um número (tom de cinza) ou por uma tupla (por exemplo, quando utiliza-se o sistema de cores RGB, que é a sigla para Red Green Blue, a representação da cor será uma tripla com três valores).
Nesta primeira etapa do projeto, não será necessário trabalhar diretamente com imagens digitais, mas vamos tomá-las como exemplo para explicar o problema a ser resolvido. Considere as seguintes imagens de uma pista em miniatura:
![Duas imagens de uma pista](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/buscaPorPadraoEmLista1.png)
Quando a pista é percorrida com uma câmera e as imagens de cada instante são obtidas, surgem visões diferentes da pista, principalmente nas curvas, em que pode ocorrer cortes na visão da pista. Observe, por exemplo, a sequência de imagens a seguir:
![Seis imagens de uma pista](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/buscaPorPadraoEmLista2.png)
Nessa sequência de imagens, a partir da primeira, é possível ver que há uma curva próxima e, à medida que se caminha na pista e a curva se aproxima, a câmera captura cada vez menos as bordas da pista (que são as linhas brancas) devido ao seu campo de visão e ao seu movimento. Na última imagem da sequência, é possível ver somente a borda direita, ou seja, parte da pista foi cortada.
Imagine agora que a pista foi colorida de vermelho. Se fizermos um corte na imagem e tormarmos apenas uma linha (desenhada em amarelo nas imagens abaixo), veremos que, quando a imagem da pista aparece sem cortes (primeira imagem), as cores que aparecem na altura da linha são preto, branco, vermelho, branco e preto, da esquerda para a direita.
![Duas imagens de uma pista vermelha](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/buscaPorPadraoEmLista3.png)
Quando a imagem da pista aparece com cortes, outras possibilidades são possíveis, por exemplo, na segunda imagem temos a seguinte sequência de cores na altura da linha amarela: vermelho, branco e preto, da esquerda para a direita.
O objetivo da primeira parte do projeto é, dada uma linha da imagem, buscar pelo padrão de sequência de cores que indica que a pista está sendo vista por completo (da borda esquerda até a borda direita).
No exercício de programação “Análise de segmentos com elementos iguais”, foi fornecido um arquivo com os valores (“cores”) dos elementos de uma linha e foi realizada a análise dos tipos dos segmentos e a contagem do número de elementos do respectivo segmento.
Se considerarmos o seguinte mapeamento dos valores do vetor para os números inteiros (o mapeamento será sempre o mesmo no projeto, independentemente dos valores dos elementos fornecidos): 0(preto) = 0; 128(vermelho*) = 1; 255(branco) = 3.
(*) Observação: na verdade o valor 128 representa um tom de cinza mas que no exemplo será entendido como a cor vermelha para simplificar.
Então o padrão da pista completa que estamos buscando é a seguinte sequência dos tipos dos segmentos: 1 3 2 3 1.
Que representam as cores: preto, branco, vermelho, branco e preto. A sequência dos tipos dos segmentos foi parte da saída do exercício de programação citado e, portanto, o código entregue poderá ser aproveitado na solução desta parte do projeto.
Se eu já tenho um programa que imprime a sequência dos tipos dos segmentos, o que devo fazer então? Você deverá verificar se o padrão “1 3 2 3 1” está presente em alguma parte dessa sequência. Por exemplo, considere a sequência dos tipos dos segmentos:
| 1 | | 3 | | 1 | | 3 | | 2 | | 3 | | 1 | | 3 | | 1 |
Nesse exemplo há o padrão da pista completa em uma parte da sequência (colorido em amarelo). No exemplo a seguir não há o padrão de pista completa:
| 1 | | 3 | | 1 | | 3 | | 1 |
Há várias outras possibilidades de sequências em que o padrão pode ou não estar presente. O padrão será considerado presente na sequência somente se a sub-sequência “1 3 2 3 1” for encontrada nesta ordem.
Os valores dos pixels (elementos) da linha da imagem serão fornecidos em um arquivo texto com o seguinte formato: na primeira linha o valor de N e na linha seguinte os N valores dos elementos separados por um espaço em branco. Todos valores são números inteiros. Esse formato é igual ao do exercício de programação “Análise de segmentos com elementos iguais”.
O programa deverá solicitar o nome do arquivo de entrada.
O programa deverá produzir a impressão na tela conforme o modelo a seguir, de acordo com o resultado encontrado (não utilize acentuação nem cedilha na saída para esse programa):
Digite o nome do arquivo: teste.txt
Resultado: Padrao encontrado.
Ou:
Digite o nome do arquivo: teste.txt
Resultado: Padrao nao encontrado.
Projeto Parte 2
Na primeira etapa do projeto, foi implementada a busca pelo padrão da pista em uma linha da imagem (desenhada em amarelo na imagem de exemplo abaixo). Esse padrão é uma sequência de cores que indica que a pista está sendo vista por completo (da borda esquerda até a borda direita). A sequência de cores que aparecem na altura da linha amarela é: preto, branco, vermelho, branco e preto.
![Pista colorida de vermelho](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/buscaPorPadraoEmSequencia-faixaDePedestres1.png)
O objetivo da segunda parte do projeto é, dada uma linha da imagem, identificar o padrão de uma faixa de pedestres como, por exemplo, da imagem a seguir:
![Pista com faixa de pedestres](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/buscaPorPadraoEmSequencia-faixaDePedestres2.png)
Nesse exemplo há o padrão da faixa de pedestres em uma parte da sequência. Esse padrão é mostrado abaixo:
| ... | | 1 | | 3 | | 1 | | 3 | | 1 | | 3 | | 1 | | 3 | | 1 | | 3 | | 1 | | 3 | | 1 | | ... |Há várias possibilidades de sequências em que o padrão pode ou não estar presente. O padrão será considerado presente na sequência somente se a sub-sequência “1 3 1 3 1 3 1 3 1 3 1 3 1” for encontrada nesta ordem
Para a implementação da Parte II, o código da Parte I poderá ser utilizado.
Os valores dos pixels (elementos) da linha da imagem serão fornecidos em um arquivo texto com o seguinte formato: na primeira linha o valor de N e na linha seguinte os N valores dos elementos separados por um espaço em branco. Todos valores são números inteiros. Esse formato é igual ao do exercício de programação “Análise de segmentos com elementos iguais”.
O programa deverá solicitar o nome do arquivo de entrada.
O programa deverá produzir a impressão na tela conforme o modelo a seguir, de acordo com o resultado encontrado (não utilize acentuação nem cedilha na saída para esse programa):
Digite o nome do arquivo: teste.txt
Resultado: Padrao de faixa de pedestres encontrado.
Ou:
Digite o nome do arquivo: teste.txt
Resultado: Padrao de faixa de pedestres nao encontrado.
Projeto Parte 3
Na segunda etapa do projeto, foi implementada a identificação do padrão de uma faixa de pedestres dada uma linha da imagem. Considere que agora não há apenas um, mas L linhas selecionadas na imagem, como mostrado na figura abaixo, em que cada linha está colorida de azul.
![Duas imagens de pistas de coloridas divididas em faixas horizontais](/vazConnected/cefet-laed1/raw/main/exercicios/projeto/imagens_projeto/deteccaoDeFaixaDePedestresEmUmaImagemDaPista1.png)
O objetivo da terceira etapa do projeto é realizar a detecção de faixa de pedestres em uma imagem da pista de forma simples, considerado as informações de vários perfis (linhas) da imagem. Dessa forma, cada perfil da imagem deverá ser analisado e o resultado (Pista normal, Faixa de pedestres ou Padrão não identificado) deverá ser armazenado em uma estrutura de dados do tipo lista.
Para armazenar o resultado da análise de cada perfil em uma lista, utilize uma das implementações do livro texto do Ziviani para o tipo abstrato de dados Lista (por meio de arranjo ou apontadores), disponíveis em: DCC UFMG.
Cada item da lista, que representa um perfil, deverá conter: um campo Chave (número inteiro que será atribuído sequencialmente a cada perfil lido do arquivo) e um campo Resultado (Pista normal, Faixa de pedestres ou Padrão não identificado).
É obrigatório utilizar as funções da implementação do Ziviani e não é permitido alterá-las, com exceção da função main e das definições solicitadas neste enunciado. Funções adicionais poderão ser criadas, se necessário.
Cada grupo deverá escolher qual método será utilizado para realizar a detecção de faixa de pedestres (por exemplo, pode ser considerado que há faixa de pedestres se em pelo menos um perfil for detectado o padrão da faixa). Lembrem-se de levar em consideração que há perfis diversos na imagem, alguns somente com o padrão da pista completa, outros com falhas devido à iluminação ou movimento do robô, etc.
Para a implementação da Parte III, o código da Parte II poderá ser utilizado.
Os valores dos N pixels (elementos) dos L perfis da imagem serão fornecidos em um arquivo texto com o seguinte formato: na primeira linha o valor de L e nas linhas seguintes: o valor de N e na próxima linha os N valores dos elementos do perfil separados por um espaço em branco. Todos valores são números inteiros.
O programa deverá solicitar o nome do arquivo de entrada.
O programa deverá produzir a impressão na tela conforme o modelo a seguir, de acordo com o resultado encontrado (não utilize acentuação nem cedilha na saída para esse programa):
Digite o nome do arquivo: teste.txt
Resultado: Pista sem faixa de pedestres.
Ou:
Digite o nome do arquivo: teste.txt
Resultado: Pista com faixa de pedestres.