Upload
dannyxyz22
View
5.051
Download
2
Embed Size (px)
DESCRIPTION
This was the vision lecture I've presented in Campus Party 2009
Citation preview
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 2
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 3
Usos de visão computacional Reconhecimento
– Objetos, classes de objetos
• Ex: Reconhecimento facial, veículos
Imagens médicas
– IVUS, tomografia computacional
Visão estéreo
Detecção de movimento, tracking
Augmented Reality
Reconstrução de cenas: SLAM
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 4
SLAM – Simultaneous Localization and Mapping
http://www.youtube.com/watch?v=bq5HZzGF3vQ
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 5
SLAM – Simultaneous Localization and Mapping
The Mobile Robot Programming Toolkit (MRPT)
http://babel.isa.uma.es/mrpt/index.php/Main_Page
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 6
Visão Estéreo
Profundidade
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 7
Visão Estéreo
Profundidade
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 8
Visão Estéreo
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 9
Visão Estéreo
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 10
Visão Estéreo
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 11
Visão Estéreo – mapa de profundidade
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 12
Augmented Reality
http://www.youtube.com/watch?v=enXTKvhE7yk
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 13
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 14
Como os computadores veem?
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 15
Como os computadores veem?
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 16
O que é uma imagem?
Vetor 2d de pixels
Imagens binárias:
– Pixels são bits
Imagens em tom de
cinza:
– Pixels são escalares
Imagens coloridas:
– Pixels são vetores
– A ordem pode variar (RGB, BGR, HSV, YUV)
– Podem conter um canal alpha para sobreposições
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 17
O que é uma imagem?
Vetor 2d de pixels
Imagens binárias:
– Pixels são bits
Imagens em tom de
cinza:
– Pixels são escalares
Imagens coloridas:
– Pixels são vetores
– A ordem pode variar (RGB, BGR, HSV, YUV)
– Podem conter um canal alpha para sobreposições
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 18
O que é uma imagem?
Vetor 2d de pixels
Imagens binárias:
– Pixels são bits
Imagens em tom de
cinza:
– Pixels são escalares
Imagens coloridas:
– Pixels são vetores
– A ordem pode variar (RGB, BGR, HSV, YUV)
– Podem conter um canal alpha para sobreposições
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 19
O que é uma imagem?
Vetor 2d de pixels
Imagens binárias:
– Pixels são bits
Imagens em tom de
cinza:
– Pixels são escalares
Imagens coloridas:
– Pixels são vetores
– A ordem pode variar (RGB, BGR, HSV, YUV)
– Podem conter um canal alpha para sobreposições
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 20
O que é uma imagem?
Vetor 2d de pixels
Imagens binárias:
– Pixels são bits
Imagens em tom de
cinza:
– Pixels são escalares
Imagens coloridas:
– Pixels são vetores
– A ordem pode variar (RGB, BGR, HSV, YUV)
– Podem conter um canal alpha para sobreposições
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 21
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 22
Imagens ruidosas e filtros: Gaussian Blur
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 23
Imagens ruidosas e filtros: Gaussian Blur
Gaussian Blur
Blur simples (convolução 3x3):
1 2 1
2 4 2
1 2 1
Como filtrar uma imagem no GIMP?
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 24
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 25
OpenCV
Biblioteca open source de visão computacional
http://sourceforge.net/projects/opencvlibrary/
Desenvolvida e mantida pela Intel
Escrita em C e C++, roda em Linux, Windows e Mac
OS X com interfaces para Python, Ruby, Matlab e
outras linguagens. Otimizada para aplicações em
tempo real (> 15 fps)
Prover infra-estrutura para aplicações de visão
computacional de fácil utilização: mais de 500 funções
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 26
OpenCV
Composta por 4 sub-módulos:
CV
Processamento de imagens
Algoritmos de visão
MLL
Classificadores estatísticos
Ferramentas de clusterização
HighGUI
GUI, entrada e
saída
de imagens e vídeos
CXCore
estruturas básicas e
algoritmos, suporte a XML,
funções de desenho
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 27
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 28
Camshift - Continuously Adaptive Mean Shift Algorithm
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 29
Camshift - Continuously Adaptive Mean Shift Algorithm
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 30
Camshift
Demonstração
Onde encontrar o software?
– Programas de demonstração da biblioteca OpenCv
• /usr/local/share/opencv/samples/c/camshiftdemo
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 31
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 32
Detecção de movimentos - Diferença absoluta
cvAbsDiff(frame1gray,frame2gray,result)
cvShowImage("res",result)
cvThreshold(result,result,30,255,CV_THRESH_BINARY)
cvShowImage("res1",result)
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 33
Detecção de movimentos - Diferença absoluta
Importante: desabilitar ganho automático da webcam
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 34
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 35
Cascata de classificadores – Viola Jones
Detecção de feições
Face tracking
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 36
Features Retângulos Fáceis de serem calculados
– Áreas brancas são subtraídas das áreas pretas– Integral Image – Representação especial que torna a
extração da feature mais rápida
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 37
Cálculo das Features – Integral Image
Soma dos valores de cada pixel (x,y)– Pode ser rapidamente computada com somente uma
passagem pela imagem
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 38
Cálculo das Features Soma no interior de um Retângulo
– Sejam A, B, C e D os valores dos retângulos considerando-se o canto superior esquerdo da imagem
– Logo, a soma dos valores do retângulo ABCD é dada por:• SOMA = A – B – C + D
Somente três adições são necessárias para qualquer tamanho de retângulo!
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 39
AdaBoost: Super Efficient Features Selector
Classificadores fracos = Features
A cada iteração:– Calculam-se os valores de cada feature em cada exemplar– Ordenam-se os exemplares pelos valores dos features– Seleciona-se o melhor feature / threshold– Recalculam-se os pesos dos exemplar
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 40
Principais features identificadas
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 41
Principais features identificadas
Classificador extremamente rápido (60 microinstruções)
Ajustado para detectar 100% das faces, com 40% de falsos positivos no primeiro estágio
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 42
Cascata de classificadores: visando tempo-real
Prioridade de rejeição de background nos estágios iniciais
Imagem em escala de cinza (8 bits), 320x240, 500 mil janelas
Tempo de deteção ~ 10ms (1 face) ~20 ms (nenhuma face)
25 estágios, 2912 features, menor janela 24x24
Otimizado para encontrar apenas a maior face
70% a 80% das janelas são rejeitadas nos 2 primeiros estágios
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 43
Pré processamento Conversão para escala de cinza
– cvCvtColor( img, cinza, CV_BGR2GRAY );
• RGB[A]->Gray: Y<-0.299*R + 0.587*G + 0.114*B
Redimensionamento
– cvResize( cinza, imagem_reduzida, CV_INTER_LINEAR );
Normalização de brilho
– cvEqualizeHist( imagem_reduzida, imagem_reduzida );
• 1. calcular histograma H para src.
• 2. normalizar histograma, de forma que a soma seja 255.
• 3. computar a integral do histograma:
• H’(i) = somatório0≤j≤iH(j)
• 4. transformar a imagem usando H’ como look-up table: dst(x,y)=H’(src(x,y))
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 44
Face Tracker
Onde encontrar o software?
– Programas de demonstração da biblioteca OpenCv
• /usr/local/share/opencv/samples/c/facedetect
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 45
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 46
Optical Flow
Objetivo: recuperar vetores de movimento aparente
entre um par de imagens
Pode-se utilizar o algoritmo de Lucas-Kanade para
verificar a velocidade de cada feição
Método diferencial de dois framesI(x,y,z,t) = I(x + δx,y + δy,z + δz,t + δt)
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 47
Lucas-Kanade
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 48
Lucas-Kanade
Demostração do Lucas Kanade
Onde encontrar o software?
– Programas de demonstração da biblioteca OpenCv
• /usr/local/share/opencv/samples/c/lkdemo
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 49
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 50
POSIT: “Pose from Orthography and Scaling with Iteration” Estimar posicionamento e rotação 3D de um objeto
conhecido
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 51
POSIT - “Model-based object pose in 25 lines of code” D. DeMenthon and L. S. Davis
Solução iterativa para o problema de
encontrar o vetor de translação e a
matriz de rotação (6 graus de
liberdade)
Supor inicialmente que todos os
pontos têm a mesma profundidade
Solução de sistema linear super-
determinado. Decomposição SVD e
cálculo de pseudo-inversa
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 52
EHCI – Enhanced Human Computer Interaction
Utilização do algoritmo Posit para obter head tracking
com 6 graus de liberdade
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 53
EHCI – Enhanced Human Computer Interaction
http://code.google.com/p/ehci/
Demonstração EHCI
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 54
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 55
Reconhecimento de Caracteres - OCR
Bibliotecas:
– OCR Opus http://code.google.com/p/ocropus/
– Tesseract http://code.google.com/p/tesseract-ocr/
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 56
Reconhecimento de Caracteres - OCR
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 57
Tópicos
O que é a visão computacional? Como os computadores veem? Filtros OpenCV Algoritmos
– Segmentação por cor
– Detecção de movimento por diferença absoluta
– Classificadores: detecção de faces
– Fluxo óptico
– Estimativa de posição e rotação 3D
– Leitura de caracteres
Módulo de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 58
Arquitetura de visão computacional do TORP
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 59
Instalação de drivers – UVC PWC
USB Video Device Class - Linux
– http://linux-uvc.berlios.de/
Philips USB Webcam driver for Linux
– http://www.saillard.org/linux/pwc/
Instalação dos drivers para Gumstix
– http://www.theopenrobotproject.org/tiki-index.php?
page=Installation+Instructions
V4L, V4L2: APIs para captura de vídeo para Linux
– http://linuxtv.org/v4lwiki/index.php/Main_Page
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 60
Mjpeg streamer
Servidor http + obtenção frames UVC
./mjpg_streamer -o "output_http.so -w ./www"
http://sourceforge.net/projects/mjpg-streamer/
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 61
Referências
Gary Bradsky & Adrian Kaehler “Learning OpenCV”
D. DeMenthon and L. S. Davis “Model-based object
pose in 25 lines of code”
Jean-Yves Bouguet. “Pyramidal Implementation of
the Lucas Kanade Feature Tracker Description of
the algorithm”
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 62
Referências
Rainer Lienhart and Jochen Maydt. “An Extended Set
of Haar-like Features for Rapid Object Detection.”
Submitted to ICIP2002
Viola, P; Jones, M. “Rapid Object Detection Using a
Boosted Cascade of Simple Features – (2004)”
Alexander Kuranov, Rainer Lienhart, and Vadim
Pisarevsky. “An Empirical Analysis of Boosting
Algorithms for Rapid Objects With an Extended Set
of Haar-like Features”. Intel Technical Report MRL-
TR-July02-01, 2002
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 63
Agradecimentos
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 64
Agradecimentos
The Open Robot Project | Módulo de Visão Computacional | [email protected] | 65
Dúvidas, sugestões e contribuições
Daniel Lélis Baggio