Eu tenho um brinquedo robô rastreado e estou controlando-o com um iPhone. O robô gera um feed de câmera ao vivo com um tamanho de quadro conhecido e estou exibindo na UIImage.
Adicionei um ponteiro laser ao robô e o fixei ao longo do eixo do robô. Estou tentando detectar o ponto do ponteiro laser na imagem e, assim, tentar calcular a proximidade do objeto. Se o ponto do laser estiver longe do centro, sei que o robô está preso na parede e precisa fazer o backup.
Como posso detectar um ponto de pixels branco-vermelho brilhante em uma tela? Uma solução seria provar a cor dos pixels dentro de um determinado raio do centro e detectar uma cor brilhante de blob. Alguém pode sugerir um algoritmo para esta atividade?
Outra abordagem seria acompanhar a posição média do ponto nos últimos quadros, reduzindo assim o raio do palpite. Se não houver ponto em uma região predefinida, a região de pesquisa poderá ser expandida.
Finalmente, quero ser capaz de ensinar o robô a detectar carpetes ao seu redor. O tapete reflete um ponteiro laser de uma certa maneira, e quero entender quantos quadros ao redor do robô têm propriedades semelhantes. Se eu souber onde o ponteiro do laser está na tela, posso cortar um pequeno retângulo dessa imagem e compará-los. Existe uma maneira eficiente de comparar várias imagens pequenas entre si para entender se as silhuetas correspondem?
Notei que o laser é refletido em superfícies brilhantes, e a direção dessa reflexão pode me dizer algo sobre a orientação da superfície no espaço, de acordo com as leis da refração.
Obrigado!
fonte
Respostas:
O OpenCV é compilável para iOS. Embora possa não ser o mais eficiente, oferece a opção de portar o algoritmo. Eu fiz um problema de rastreamento de marcador semelhante usando o algoritmo ConDensation. Procure o rastreamento de marcadores com o OpenCV. É uma área de pesquisa MUITO grande e o algoritmo exato que você deseja depende completamente da sua aplicação. Se bem me lembro, existem cerca de 3000 técnicas de processamento de imagens relatadas - escolher uma boa é uma arte real!
A propósito, essa é a idéia básica por trás do que é chamado de filtro de partículas (do qual a condensação é um método). Bem feito, você descobriu a idéia básica por si mesmo!
Isso é chamado de persistência de estado e pode ser modelado de várias maneiras. O algoritmo de condensação usa uma abordagem estocástica não diferente de um filtro Kalman antigo e simples.
Este é um pouco mais difícil. Você pode tentar a correspondência de modelos, mas eu não sei o desempenho da mesma no iOS (o cálculo muito pesado e a câmera do iOS não se adaptam a ela).
fonte
Que tal esse código
https://www.youtube.com/watch?v=MKUWnz_obqQ
https://github.com/niitsuma/detect_laser_pointer
Neste código, a cor HSV é comparada usando o teste t quadrado de hotelling
fonte