Obj Detector » Histórico » Versão 7
Pedro Breda Pinkusz Nogueira, 02/10/2021 22:22 h
1 | 1 | André Vidal | h1. Obj Detector |
---|---|---|---|
2 | 2 | André Vidal | |
3 | Essa função deve retornar o ponto médio da linha mais baixa do primeiro obstáculo detectado. |
||
4 | É partido do ponto de que a imagem enviada está invertida, então para uma visualização mais intuitiva, a imagem é rotacionada através dos passos seguintes: |
||
5 | |||
6 | 7 | Pedro Breda Pinkusz Nogueira | São criadas variáveis para armazenar a altura e a largura através de um método dos objetos do tipo imagem. Com essas variáveis é criada uma tupla que guarda as coordenadas do centro. A rotação é feita com a função wapAffine e o objeto auxiliar M correspondente a uma matriz de rotação, que precisou da tupla que guardava o centro e as dimensões da imagem. A rotação feita é de 180º e a escala da imagem é mantida. Além disso, a orientação dos eixos também se mantém, ou seja, o eixo y continua crescendo de cima para baixo e o eixo x da esquerda para a direita. |
7 | 1 | André Vidal | |
8 | 3 | André Vidal | Após a rotação, são criados e usados dois vetores (lower e upper) para guardar os valores de uma máscara hls para deixar passar o laranja. Não testamos o filtro dessa função ainda com várias imagens, mas ele parece estar pegando um pouco mais do que o necessário, como alguns vermelhos escuros. Para criar a mascara primeiro é criada uma nova imagem com as cores no formato hls. Após isso, é criado o objeto *orangemask* com a função inRange. |
9 | Em seguida, é criada uma lista de retas com a função HoughLinesP. As retas na verdade são grupos de quatro numero na ordem x1,y1,x2,y2, em que (x1,y1) e (x2, y2) definem os dois pontos do segmento de reta. |
||
10 | 1 | André Vidal | |
11 | 3 | André Vidal | Em seguida é feita uma varredura nas retas em busca da que conta com o maiores y1 ou y2, pois em teoria esta semirreta é a mais baixa visto que o eixo y é para baixo. |
12 | Acredito que aqui mereça ser feita a seguinte correção no código: |
||
13 | 1 | André Vidal | |
14 | 3 | André Vidal | Às vezes, o segmento de reta selecionado dessa forma não é o que contém o x médio visto que pode ser que o segmento de reta mais baixo tenha algum corte de modo que não fique centralizado com o eixo de simetria vertical do bloco, como aconteceu na figura abaixo: |
15 | 5 | André Vidal | !Screenshot_2.png! |
16 | Aqui o ponto médio retornado pela função está marcado em azul. |
||
17 | 3 | André Vidal | |
18 | 6 | André Vidal | Sendo assim seria útil passar uma vez procurando qual a altura média do bloco. Depois disso, passar nas retas que tenham y1 e y2 menores que esse valor médio, e anotar o mínimo de x e o máximo de x. Para obter o y do ponto médio do segmento mais baixo, o processo anterior já fornecia bons resultados. O ponto médio retornado por essa nova fórmula de encontrar o x médio ( média do xmax e do xmin), na figura anterior, está representado abaixo: |
19 | 3 | André Vidal | !corrigido.png! |
20 | |||
21 | |||
22 | Nele os pontos extremos das linhas médias detectadas estão marcados em verde. Essa mudança deverá ser implementada nos códigos de 2021. |