Mobile Image ProcessingThales Levi Azevedo Valente
João Dallyson Sousa de Almeida
Apresentação
• João Dallyson– [email protected]– Doutor em Engenharia Elétrica – UFMA
• Área: Ciência da Computação
– Professor do DEINF/UFMA e Pesquisador em:• Processamento de Imagens Médicas• Reconhecimento de Padrões
– Lattes:• http://lattes.cnpq.br/6047330108382641
• Thales Levi Azevedo Valente– [email protected]– Graduando em Ciência da Computação - UFMA– Pesquisador PIBIC em:
• Processamento de imagens• Android
– Lattes:• http://lattes.cnpq.br/1509490497932923
26/11/2014 2Mobile Image Processing
Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-NãoComercial-SemDerivações 4.0 Internacional. Para ver uma cópia desta licença,visite http://creativecommons.org/licenses/by-nc-nd/4.0/.
• Você é livre para:
– Copiar, distribuir o material
• Sobre as seguintes condições:
– Atribuição de créditos: você deve fazer referência ao autor
– Não-comercial: você não deve usar este material para propósitos comerciais
– Não-Derivados: Se você criar trabalhos derivados deste, você não deve distribuí-lo.
Termos de uso deste material
3Mobile Image Processing26/11/2014
Cronograma do Curso
• Introdução• Fundamentos da linguagem Java• Fundamentos Processamento de Imagens
• Roteiro Android: Preparando o ambiente de desenvolvimento Android – Passo a Passo Ciclo de vida de uma Activity Criando o primeiro projeto Android Estrutura básica de um projeto Android Criando Máquina Virtual usando o AVD Manager Executando o primeiro “Hello World” Carregando uma imagem da galeria
4Mobile Image Processing26/11/2014
Cronograma do Curso
• Roteiro OpenCV: Importando a biblioteca OpenCV para Android no Workspace
Instalação do OpenCV Manager no AVD por linha de comando
Adicionando a biblioteca ao Projeto
Processamento de imagens pela primeira vez (sem OpenCV)
Processamento de imagens pela segunda vez(Agora usando OpenCV)
Gerando o instalador (.apk)
5Mobile Image Processing26/11/2014
INTRODUÇÃO
Por que nós processamos imagens?
• Aquisição de Imagem– Corrigir abertura e equilíbrio das cores
• Preparar para exibir ou imprimir– Ajustar o tamanho da imagem
• Facilitar o armazenamento e transmissão da imagem– Armazenamento eficiente em câmeras digitais– Enviar uma imagem de Marte para a Terra
• Melhorar e restaurar imagens– Remover arranhões de um filme antigo– Melhorar a visibilidade de um tumor em uma radiografia
• Extrair informação de imagens– Ler o CEP de uma carta– Medir a poluição da água a partir de imagens aéreas
7Mobile Image Processing26/11/2014
Sistema de Processamento de Imagem Digital
8Mobile Image Processing26/11/2014
Plataformas Mobile Populares
9Mobile Image Processing26/11/2014
Foco no Android
• Plataforma Mobile Open Source
• Mantido pela Open Handeset Alliance (OHA)
– Aliança entre diversas empresas para criar padrões abertos para telefonia móvel.
• Usa o kernel do linux personalizado e uma máquina virtual projetada para dispositivo móvel
• Android domina 84,6% do mercado global de smartphones. (Pesquisa realizada segundo trimestre 2014 pela Strategy Analytics)
10Mobile Image Processing26/11/2014
API do Android
11Mobile Image Processing26/11/2014
Programando em Java
• Android encoraja o desenvolvimento em alto nível;
• Android usa Java como a principal linguagem de programação;
• Herda classes básicas do Java padrão:
– String, Container, Math, IO e Network
• Adiciona novas classes especificas para dispositivos móveis:
– Camera, Telephony, Map, Speech
12Mobile Image Processing26/11/2014
Fundamentos de Linguagem Java
Dificuldades dos programadores na década de 1990
• Ponteiros
• Gerenciamento de memória
• Organização
• Falta de bibliotecas
• Ter de reescrever parte do código ao mudar de SO.
• Custo financeiro de usar a tecnologia
14Mobile Image Processing26/11/2014
Máquina Virtual
• Realiza a gerência de memória, threads, a pilha de execução, etc...
• Java Virtual Machine (JVM)
15Mobile Image Processing
FONTE: [Caelum, 2014]
26/11/2014
JVM, JRE, JDK
• O que baixar no site da Oracle?– http://www.oracle.com/technetwork/java/.
• JVM = Java Virtual Machine. Não existe apenas esse download.
• JRE = Java Runtime Environment. JVM + Bibliotecas. Necessário para executar uma aplicação java.
• JDK = Java Developement Kit.– JRE + Ferramentas
16Mobile Image Processing26/11/2014
Objetos
• Um objeto é uma entidade (física, conceitual, ou do domínio de algum problema) que tem:
– identidade (a referência)
– estado (seus atributos)
– comportamento (seus métodos)
17Mobile Image Processing26/11/2014
Classe
• Classes são uma especificação para objetos com propriedades semelhantes (atributos), comportamentos semelhantes (métodos) e relacionamentos comuns com outros objetos
• Classes descrevem
– Tipos dos dados que compõem o objeto (o que podem armazenar)
– Procedimentos que o objeto pode executar (o que podem fazer)
18Mobile Image Processing26/11/2014
Definição de Classe Java
19Mobile Image Processing26/11/2014
Ex: Programa que cria e manipula conta
20Mobile Image Processing26/11/2014
Membros estáticos
• Métodos estáticos
– Aplicam-se a classe como um todo
– Não é necessário criar um objeto para utilizá-los
– Chamada: NomeClasse.nomeMétodo()
• Campos estáticos
– A mesma cópia é compartilhada entre todas as instâncias da classe (objetos)
– Uma espécie de ―variável global‖ da classe
21Mobile Image Processing26/11/2014
Herança em Java
22Mobile Image Processing26/11/2014
Fundamentos de Processamento de Imagens
Imagem Digital
• Definição: função bidimensional, f(x,y), em que x e y são coordenadas espaciais (plano), e a amplitude de f em qualquer par de coordenadas (x,y) é chamada de intensidade ou nível de cinza da imagem nesse ponto. (Gonzalez and Woods, 2010)
24Mobile Image Processing26/11/2014
Origens do Processamento Digital de Imagens
• Transmissão de Imagens por cabo submarino atravessando o oceano atlântico. (1920)
– Reduziu de 1 semana para menos de 3 horas
25Mobile Image Processing
Fotografia Digital produzida em 1921 com base em uma fita codificada poruma impressora telegráfica com fontes tipográficas especiais.
26/11/2014
Etapas do Processamento de Imagens
26Mobile Image Processing26/11/2014
Relacionamento entre pixels
Operações aritméticas entre 2 pixels
Adição:
p + q
Reduzir ruídos
Subtração:
p – q
Imagem médica. Remove informação estática de fundo
Multiplicação:
p * q (pq e pxq)
Corrigi sombra
Divisão:
p / q
Média
z=1/9 (Z1,Z2,...,Z9)
27Mobile Image Processing26/11/2014
Relacionamento entre pixels
• Operações aritméticas entre 2 pixels
– Subtração
28Mobile Image Processing26/11/2014
Relacionamento entre pixels
Operações lógicas entre 2 pixels
Mobile Image Processing26/11/2014 27
Melhoramento de Imagens
Objetivo
Processar uma imagem de modo que o resultado seja mais apropriado para uma aplicação específica do que a imagem original.
Divide-se :
Domínio espacial: refere-se ao plano da imagem, e as abordagens são baseadas na manipulação direta dos pixels
Domínio da freqüência: baseadas na modificação das transformadas de Fourier
Combinação de ambos
30Mobile Image Processing26/11/2014
Melhoramento de Imagens
Histograma
Representa a freqüência de pixels na imagem
algoritmo
31
for(i=0; i< lin; i++)
{
for(j=0; j < col; j++)
{
v = valor_do_pixel
++H[ v ];
}
}
/* H depende do maior valor do pixel */
Mobile Image Processing26/11/2014
32Mobile Image Processing
Equalização do Histograma
Melhora o contraste da imagem da imagem
Algoritmo
Calcula histograma:
Calcula o histograma acumulado:
Novo histograma
Nova imagem
Melhoramento de Imagens
26/11/2014
Melhoramento de Imagens
Equalização do Histograma
Exemplo
Mobile Image Processing26/11/2014 31
Melhoramento de Imagens
Convolução
1/9.(10x1 + 11x1 + 10x1 + 9x1 + 10x1 + 11x1 + 10x1 + 9x1 + 10x1) = 1/9.( 90) = 10
10 11 10
9 10 11
10 9 10
1
1010
2
9
0
9
0
9
9
9
9
0
1
99
10
10 11
10
1
11
11
11
11
1010
I
1
1
1
1
1 1
1
1
1
F
X X X
X 10
X
X
X
X
X
X
X
X
X
X
X
X
X
X
XX
1/9
O
Mobile Image Processing26/11/2014 32
Exemplos Processamento de Imagens
• Melhoramento de Imagens
35Mobile Image Processing
FONTE: [GIRORD, 2013]
26/11/2014
Exemplos Processamento de Imagens
• Redução de Ruídos
36Mobile Image Processing
FONTE: [GIRORD, 2013]
26/11/2014
Exemplos Processamento de Imagens
• Efeitos especiais
37Mobile Image Processing
FONTE: [GIRORD, 2013]
26/11/2014
Exemplos Processamento de Imagens
• Detecção de Faces
38Mobile Image Processing
FONTE: [GIRORD, 2013]
26/11/2014
Exemplos Processamento de Imagens
• Aplicações na Oftalmologia
39Mobile Image Processing26/11/2014
ROTEIRO ANDROID
Preparando o ambiente de desenvolvimento Android –Passo a Passo
Baixe e instale os seguintes itens:
• Java Runtime Environment (JRE) para a versão do seu sistema Windows (32/64 bits).
• Java Development Kit (JDK) para a versão do seu sistema Windows (32/64 bits).
• Baixar e descompactar a IDE Eclipse ADT com o Android SDK da Google para a versão de seu sistema Windows (32/64 bits).
• http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html
• https://developer.android.com/sdk/index.html?hl=i
– Obs: esta versão do Eclipse fornecido pela Google só funciona em ambiente Windows.
42Mobile Image Processing26/11/2014
Página de download do JRE.
Baixe o JRE no site da Oracle e instale em sua máquina.
43Mobile Image Processing26/11/2014
Página de download do JDK.
Baixe o JDK no site da Oracle e instale em sua máquina
44Mobile Image Processing26/11/2014
Página de download do Eclipse ADT
Baixe a IDE Eclipse ADT no site da Google.
45Mobile Image Processing26/11/2014
Página de download do Eclipse ADT
Baixe a IDE Eclipse ADT no site da Google.
46Mobile Image Processing26/11/2014
Descompacte a IDE Elipse ADT e o Android SDK
47Mobile Image Processing26/11/2014
Tela de escolha do workspace
Abra o Eclipse e escolha o seu workspace
48Mobile Image Processing26/11/2014
Figura X. Página de download do Eclipse ADT
Tela inicial da IDE Elipse ADT
Logo após, o Eclipse carregará e abrirá sua tela de interface.
49Mobile Image Processing26/11/2014
Tela inicial da IDE Elipse ADT
Verificaremos se o diretório do SDK está correto.
50Mobile Image Processing26/11/2014
Clique em “Browse” para selecionar o diretório, caso queira mudar
Tela da opção preferências do Eclipse ADT
51Mobile Image Processing26/11/2014
Navegue até o diretório do sdk e clique em “OK”
Tela da opção preferências do Eclipse ADT
52Mobile Image Processing26/11/2014
Clique no botão “Apply” para aplicar a mudança de diretório.
Tela da opção preferências do Eclipse ADT
53Mobile Image Processing26/11/2014
Tela da opção preferências do Eclipse ADT
Serão listadas todas as APIs instaladas em seu SDK. Finalize clicando no botão “OK”
54Mobile Image Processing26/11/2014
Fechando o Eclipse ADT
Caso apareçam estes erros, apenas reinicie o eclipse e serão resolvidos.
55Mobile Image Processing26/11/2014
Figura X. Página de download do Eclipse ADT
Tela inicial do Elipse ADT
Abriremos o SDK Manager apertando este botão
Logo após, o Eclipse carregará e abrirá sua tela de interface.
56Mobile Image Processing26/11/2014
• É um gerenciador de pacotes do SDK com um UI para iteração com usuário.
• O SDK nada mais é que o kit de desenvolvimento para Android, contendo bibliotecas e ferramentas de desenvolvimento necessários para construção, teste e debug de aplicativos para Android.
O que é o SDK Manager ?
57Mobile Image Processing26/11/2014
Inicialização do Android SDK
Inicialização do Android SDK
58Mobile Image Processing26/11/2014
Instalar os Tools, de preferência os mais atualizados por questões de compatibilidade com as APIs
59Mobile Image Processing26/11/2014
• SDK Tools:
– Dalvik Debug Monitor Server (ddms): rede, memória utilizada, logcat, explorador de arquivos, captura de tela, informações sobre o disp.
– Hierarchy Viewer: mostra a presentação da hierarquia dos layouts.
– Mksdcard: cria imagem de disco para usar com sdcard no emulador
• SDK Platform Tools:
– Adb: comunicação em linha de comando entre o user e dispositivos
– Sqlite3: dá acesso a arquivos Sqlite criados e usados no Android
• SDK Build Tools: requerido para geração de código
O que são estes 3 itens? (exemplos)
60Mobile Image Processing26/11/2014
A mais recente API é necessária para se utilizar as bibliotecas de compatibilidade. Instale mesmo que não a use
61Mobile Image Processing26/11/2014
Depois, instale suas APIs preferenciais.
62Mobile Image Processing26/11/2014
Selecionaremos essa API por ainda ser muito utilizada por uma parte do mercado
63Mobile Image Processing26/11/2014
Extras necessários para utilização das bibliotecas de compatibilidade e usar um smartphone para teste direto do aplicativo
64Mobile Image Processing26/11/2014
• SDK Platform: kit de desenvolvimento para plataforma específica
• ...System Images: tipos de emulador com seus respectivos processadores. Emuladores são utilizados para executar aplicativos
• Android Support Repository e Android Support Libraries: necessários para utilização de bibliotecas de compatatibilidades.
• Google USB driver: necessário para utilização de aparelhos físicos ao invés de emuladores.
O que marcamos?
65Mobile Image Processing26/11/2014
Ao clicar no botão instalar, aceite os termos de compromisso e clique em instalar
66Mobile Image Processing26/11/2014
As bibliotecas serão baixadas e o SDK Manager será reiniciado.
67Mobile Image Processing26/11/2014
Ciclo de vida de uma Activity
O que é uma Activity ?
• Representa uma simples tela com interface com o usuário
• Um programa Android inicia com uma Activity assim como programas Java/C iniciam com uma Main()
• Tem um ciclo de vida bem definido
• É gerenciada no sistema por uma pilha de Activitys. Quando uma nova Activity é iniciada, esta vai para o topo da pilha. Ao ser destruída esta saí do topo. Quando uma nova é chamada, a nova vai para o topo.
• Se uma Activity não estiver em primeiro plano, ela pode ser destruída pelo sistema caso haja falta de memória.
Mobile Image Processing 6926/11/2014
Principais métodos:
• OnCreate():
– o sistema o chama ao criar a Activity (Componente “mãe” de GUI)
– Nele deve ser chamado setContentView()para definir o layout.
– É executada somente uma vez durante a “vida” do aplicativo
• OnStart():
– Chamado quando a Activity é visível para o usuário.
• OnResume():
– Chamado quando o aplicativo irá interagir com o usuário
Mobile Image Processing 7026/11/2014
• OnPause():
– É o primeiro método a ser chamado quando a Activity perde o foco (uma outra Activity vem à frente, mas a primeira não deixa de ser visível).
– Mudanças feitas pelo usuário devem ser salvas neste ponto (ex: mudanças no provedor de conteúdo, como contatos, mídias, etc), animações devem ser paradas, sensores, etc..
– Deve ser executada rapidamente, pois a próxima Activity só será só “ganhará a tela” quando este método for finalizado.
Principais métodos:
Mobile Image Processing 7126/11/2014
• onStop():
– Quando chamado, o aplicativo não é mais visível para o usuário.
– Por algum motivo, um outro aplicativo foi colocado no topo da pilha
• onDestroy():
– Destruição da Activity
– Pode tanto ser chamada em código, quanto o sistema pode fazê-lo caso precise de memória
• onRestart():
– Chamado quando o aplicativo volta ao primeiro plano.
Principais métodos:
Mobile Image Processing 7226/11/2014
Mobile Image Processing 7326/11/2014
Loops chaves do ciclo de vida
• Tempo de vida inteiro:
– Ocorre entre onCreat() e onDestroy()
• Tempo de vida visível:
– Ocorre entre onStart() e onStop()
– A Activity está visível, mas não está em primeiro plano.
• Tempo de vida em primeiro plano:
– Ocorre ente onResume() e onPause()
– A Activity está a frente de todas as outras e interagindo com o usuário.Mobile Image Processing 7426/11/2014
Criando o primeiro projeto Android
Selecione a opção de criação de novo projeto.
76Mobile Image Processing26/11/2014
Escolha o nome do projeto, pacote, aplicação e APIs mínima, máxima e de compilação do projeto
77Mobile Image Processing26/11/2014
Deixe como está, apenas “dê next”
78Mobile Image Processing26/11/2014
Tela de customização do ícone.
79Mobile Image Processing26/11/2014
Tela de escolha do esqueleto inicial da primeira tela de seu aplicativo. Selecionaremos a tela vazia.
80Mobile Image Processing26/11/2014
Definiremos os nomes da classe principal e do arquivo de layout dela
81Mobile Image Processing26/11/2014
Projeto criado. Ignore estes erros, se ocorrerem. São bugs da IDE.
82Mobile Image Processing26/11/2014
Porque foram criados 2 projetos?
Porque foram criados dois projetos?
• O primeiro projeto é uma biblioteca de compatibilidade. Ela está localizada no Android SDK e selecionamos ela no início da apresentação.
• Esta biblioteca necessita da API 21 (Android 5.0 /L). Tanto ela quanto o seu projeto devem ter esta API como API de compilação ou haverá erros tanto na linkagem, quanto a biblioteca acusará erros de falta de recursos (classes java ou arquivos xml de layouts)
84Mobile Image Processing26/11/2014
Estrutura básica de um projeto Android
Estrutura básica de um projeto AndroidPasta, pacotes e
classes
Adicionais (arquivos)
Linka Xmls e classes java(gerado automaticamente
Bibliotecas .jars
Informações sobre o aplicativo
Códigos gerados
86Mobile Image Processing26/11/2014
Estrutura básica de um projeto Android
Classe principal
Sempre chamado na criação de uma Activity
Setando o layout
87Mobile Image Processing26/11/2014
Estrutura básica de um projeto Android
240 dpi
Definições de layout de menus
Definições de layout de telas
Recursos para versões especíificas
120 dpi
160 dpi
480 dpi
320dpi
Definições de dimensões
Definições de strings
Definições de estilos de views
88Mobile Image Processing26/11/2014
Estrutura básica de um projeto Android
“organizador”
View usada para texto
Espaço ocupadoEspaçamento de
margem
String que aparecerá para o usuário
89Mobile Image Processing26/11/2014
Criando Máquina Virtual usando o AVD Manager
Abriremos o AVD Manager apertando este botão
91Mobile Image Processing
Abrindo o AVD Manager
26/11/2014
Tela inicial do AVD Manager
Aba 1- Android Virtual Devices
92Mobile Image Processing26/11/2014
Dispositivos Virtuais Android disponíveis. Também podem ser criados outros
Aba 2- Devices Definitions
93Mobile Image Processing26/11/2014
Tela de criação de dispositivos virtuais. Especificam-se características de tela, sensores, câmeras, etc.
94Mobile Image Processing
Tela de criação de definição de um dispositivo
26/11/2014
Tela de criação de máquina virtual.
95Mobile Image Processing
Tela de criação de Máquina Virtual
26/11/2014
96Mobile Image Processing
Máquina virtual criada pronta para ser inicializada
26/11/2014
Desmarcar essa opção para que fique maior a
tela
97Mobile Image Processing
Máquina virtual criada pronta para ser inicializada
26/11/2014
98Mobile Image Processing
Máquina virtual inicializada
26/11/2014
Executando o primeiro “Hello World”
100Mobile Image Processing
Executando o primeiro projeto
26/11/2014
101Mobile Image Processing
Aplicativo HelloWorld
26/11/2014
Carregando uma imagem da galeria
Primeiro vamos fazer o emulador inserir uma imagem na galeria
• Com seu emulador inicializado, abra o aplicativo de câmera
• Ao abrir, clique no botão de tirar foto e uma imagem será adicionada na galeria.
103Mobile Image Processing26/11/2014
Mudanças no código
104Mobile Image Processing26/11/2014
Mudanças no código
105Mobile Image Processing26/11/2014
Mudanças no código
106Mobile Image Processing26/11/2014
Mudanças no código
107Mobile Image Processing26/11/2014
Mudanças no código
108Mobile Image Processing26/11/2014
Mudanças no código – mudar aqui
109Mobile Image Processing26/11/2014
Mudanças no código
110Mobile Image Processing26/11/2014
Mudanças no código
111Mobile Image Processing26/11/2014
Voltando ao emulador
112Mobile Image Processing26/11/2014
Mudanças no código
113Mobile Image Processing26/11/2014
Mudanças no código
114Mobile Image Processing26/11/2014
Mudanças no código
115Mobile Image Processing26/11/2014
ROTEIRO OPENCV
Importando a biblioteca OpenCV para Android no Workspace
Página de download do OpenCV
118Mobile Image Processing
1- Baixe o OpenCV
26/11/2014
Arquivo compactado
119Mobile Image Processing
2- Abra o arquivo de descompacte-o. Você quaisquer adicionais com os arquivos descomparctados, como usar o Cmake ou compilar o projeto de quaisquer forma.
26/11/2014
Interface do Eclipse ADT
120Mobile Image Processing
3- Abra a IDE Eclipse ADT e vá na opção de importar projetos. (Não esqueça de estar n Workspace do projeto que usará a biblioteca)
26/11/2014
Página de download do OpenCV
121Mobile Image Processing
4- Selecione a opção ...marcada de vermelho...
26/11/2014
Tela de importar projetos do Eclipse
122Mobile Image Processing
5- Selecione o diretório do(s) projeto(s) que deseja importar
26/11/2014
Tela de seleção de diretórios para importar projetos
123Mobile Image Processing
6- Navegue em ...\OpenCV.. > sdk > java e dê ok.
26/11/2014
Página de download do OpenCVTela de seleção de diretórios para importa projetos
124Mobile Image Processing
7- Logo após, aparecerá o projeto OpenCV a ser importado. Marque a opção de copiar o projeto e finalize.
26/11/2014
125Mobile Image Processing
8 – A biblioteca aparecerá em seu Workspace
26/11/2014
Instalação do OpenCV Manager no AVD por linha de comando
• O AVD deve ter sido criado a inicializado antes da realização dos passos a seguir.
Instalação do OpenCV Manager no AVD
• A versão do APK do OpenCV a ser instalado deve ser
a mesma do processador emulado em seu AVD.
127Mobile Image Processing26/11/2014
Instalação do OpenCV Manager no AVD
• Abra o CMD• Mude para o diretório do Android sdk\platform –
tools• Execute o comando adb install “...\diretório
opencv\apk\apk conforme seu emulador”• Espere instalar e feche o CMD• Aparecerá um novo Aplicativo no emulador:
OpenCV Manager
• OBS: deve haver apenas um AVD inicializado e quaisquer dispositivos Android não deve está conectado no computador em modo de debug. Caso falhe por falta de conexão com o ADB, reinicie o emulador e o Eclipse, para reiniciar o processo do ADB.
128Mobile Image Processing26/11/2014
Adicionando a biblioteca ao Projeto
130Mobile Image Processing
1- Clique com botão direto do mouse sobre o projeto e selecione a opção “Properties.
26/11/2014
131Mobile Image Processing
2- Clique em “Android” do lado esquerdo e depois em “Add...” no lado direito
26/11/2014
132Mobile Image Processing
3- Selecione o projeto do OpenCV e clique em “Ok”
26/11/2014
133Mobile Image Processing
4- Verifique se a biblioteca foi adicionada e clique em “Ok”
26/11/2014
134Mobile Image Processing
5- A biblioteca aparecerá em seu Workspace
26/11/2014
Processamento de imagens pela primeira vez (sem OpenCV)
1- Imagem em tons de cinza (sem OpenCV)
Mobile Image Processing 13626/11/2014
1- Imagem em tons de cinza (sem OpenCV)
Mobile Image Processing 13726/11/2014
1- Imagem em tons de cinza (sem OpenCV)
Mobile Image Processing 13826/11/2014
• Executando o projeto e selecionando a imagem da galeria, teremos este resultado.
1- Imagem em tons de cinza (sem OpenCV)
Mobile Image Processing 13926/11/2014
Processamento de imagens pela segunda vez(Agora usando OpenCV)
Segmentando o olho do Android
Nível de cinzaDetecção de
BordasBuscar olhos
Metodologia
102Mobile Image Processing26/11/2014
142Mobile Image Processing
Resultado a ser alcançado
26/11/2014
0- Chamada à biblioteca
Estes métodos
SEMPRE devem ser
chamados em sua
Activity principal.
104Mobile Image Processing26/11/2014
2- Imagem em tons de cinza (com OpenCV)
Mobile Image Processing 14426/11/2014
• Ao executar o código, o resultado será o “mesmo”.
• A imagem sempre deve ser convertida de bitmap para mat
• Percebe-se que com o OpenCV usamos menos código e o desenvolvimento fica muito mais simples.
• O tempo de processamento é muito menor.
2- Imagem em tons de cinza (com OpenCV)
Mobile Image Processing 14526/11/2014
3- Detecção de bordas com Canny
• Detecção de Bordas:
– Processo no qual a imagem passa por alguma técnica para realçar as suas bordas, sendo que a mais utilizada é a técnica de Canny (Sonka et. al. 1994)
Mobile Image Processing 14626/11/2014
3- Detecção de bordas com Canny - Teoria
• Etapas:
1) Suavização da imagem:
• Remoção de ruídos
2) Cálculo da Magnitude do Gradiente:
• As bordas são os locais onde os gradientes tem maior magnitude
3) Não Máxima supressão:
• Locais de máximo devem ser marcados como bordas
4) Limiarização por histerise ou duplo limiar + Rastreamento de bordas
• pixels fracos são descartados e pixels fortes determinados como borda. Os que forem meio termo serão analisados e posteriormente classificados como borda ou não borda.
Mobile Image Processing 14726/11/2014
3- Detecção de bordas com Canny - Teoria
1) Suavização da imagem (Gaussiana):
– Tem por objetivo eliminar os ruídos, pois podem ser detectados como bordas.
– Geralmente é utilizado um kernel com desvio padrão σ = 1.4, como o da figura abaixo
Mobile Image Processing 14826/11/2014
3- Detecção de bordas com Canny - Teoria
1) Suavização da imagem(Gaussiana):
Mobile Image Processing 149
(a) Imagem original em escala de cinza (b) Imagem borrada com o filtro da Gaussiana
26/11/2014
3- Detecção de bordas com Canny - Teoria
2) Cálculo da Magnitude dos Gradientes:
– Aplica-se operadores para determinar os gradientes de cada pixel, tanto na direção x quanto na direção y.
– Geralmente utiliza-se os operadores de sobel.
Mobile Image Processing 15026/11/2014
3- Detecção de bordas com Canny - Teoria
2) Cálculo da Magnitude dos Gradientes:
– Calcula-se a Distância Euclidiana utilizando-se a Lei de Pitágoras(a), ou ainda calcula-se a distância de Manhattan(b) para reduzir a complexidade. Assim, se obtêm a magnitude dos gradientes ou “força das bordas”.
Mobile Image Processing 151
(b)
Gx e Gy são gradientes nas direçõesx e y respectivamente.
(a)
26/11/2014
3- Detecção de bordas com Canny - Teoria
3) Não Máxima Supressão:
Mobile Image Processing 152
– O ângulo das direções dos gradientes são calculados:
– e aproximados para:
26/11/2014
3- Detecção de bordas com Canny - Teoria
3) Não Máxima Supressão:
– Consiste em eliminar os pixels não máximos locais, na direção do gradiente da imagem.
Mobile Image Processing 153
(b) Setores considerados para a supressão não máxima(a) Esquema de supressão não máxima para θ=45º;
26/11/2014
3- Detecção de bordas com Canny - Teoria
3) Não Máxima Supressão:
– Compare a força do pixel central (c,l) como a de seus vizinhos na direção positiva e negativa do gradiente.
– Então, no caso anterior, será comparada a magnitude do gradiente do pixel central (c, l) com a magnitude de seu vizinho no sentido do gradiente (c+1, l-1)[45 graus].
– Depois compara-se com a magnitude de seu vizinho no sentido contrário ao do gradiente (c-1, l+1).
– Se o pixel (c,l) for o maior dos 3, então preserve o valor do pixel. Senão, suprima o seu valor - zera (agora o nome está explicado ).
Mobile Image Processing 15426/11/2014
3- Detecção de bordas com Canny - Teoria
3) Não Máxima Supressão:
Mobile Image Processing 155
(a) Gradiente (b) Não-máxima supressão
• São preservadas as bordas onde o gradiente é máximo local.
• Obs: ninguém, ainda, foi classificado como borda. Apenas dizemos o que não é borda. Até agora não “embrancamos” nenhum pixel.
26/11/2014
3- Detecção de bordas com Canny - Teoria
4) Limiarização por histerise ou duplo limiar *
– Dois limiares: um alto e um baixo.
– Tentativa e erro.
– Qualquer pixel acima do maior limiar é convertido para branco(forte).o Um pixel (x, y) é chamado forte se cor(x, y) > Thalto
– Qualquer pixel abaixo do menor limiar é convertido para preto(supressão).
o Um pixel (x, y) é chamado fraco se cor(x, y) <= Thbaixo
– Os pixels entre os limiares são candidatos(fracos).
Mobile Image Processing 15626/11/2014
3- Detecção de bordas com Canny - Teoria
4) Limiarização por histerise ou duplo limiar *
Mobile Image Processing 157
(a) Não-máxima supressão (b) Duplo limiar (marcando fortes e fracos)
26/11/2014
3- Detecção de bordas com Canny - Teoria
4) Limiarização por histerise ou duplo limiar + Rastreamento de bordas
– Os candidatos são analisados:
o se, seguindo a cadeia de pixels (sua vizinhança e seus vizinhos em 3x3 ou 5x5), for descoberto que ele está conectado a um pixel forte ele é considerado borda.
o Senão, ele é “descartado”.
Mobile Image Processing 15826/11/2014
3- Detecção de bordas com Canny - Teoria
4) Limiarização por histerise ou duplo limiar + Rastreamento de bordas
Mobile Image Processing 159
(a) Duplo limiar (marcando fortes e fracos)
(b) Canditatos(B:ligados com forte e R:ligado com fracos)
(c) resultado
26/11/2014
3- Detecção de bordas com Canny - Teoria
Exemplos:
Mobile Image Processing 16026/11/2014
3- Detecção de bordas com Canny - Prática
Mobile Image Processing 161
Obs: Nossa imagem é simples e pode-se dizer que sem ruídos. Por este motivo, não utilizaremos qualquer filtro para suavizar a imagem.
26/11/2014
3- Detecção de bordas com Canny
Mobile Image Processing 16226/11/2014
4- Buscando os olhos do Android na Imagem - busca
Mobile Image Processing 163
Parâmetros do Hough = img, circles, method, dp, minDist, thCanny, votes, minR, maxR
26/11/2014
4- Buscando os olhos do Android na Imagem - busca
• Detecção de círculos com a Transformada de Hough
Mobile Image Processing 16426/11/2014
4- Buscando os olhos do Android na Imagem - busca
• Detecção de círculos com a Transformada de Hough
Mobile Image Processing 16526/11/2014
4- Buscando os olhos do Android na Imagem - delimitar
Mobile Image Processing 16626/11/2014
4- Buscando os olhos do Android na Imagem - exibir
Mobile Image Processing 16726/11/2014
IMPORTANTE: Não é necessária a utilização do método do Canny antes do Hough no openCV, pois o próprio Hough do OpenCV já vem com o Canny internamente. Usamos aqui apenas para fins didáticos e ilustrativos. Porém, se for utilizado o Canny antes do Hough (pois dá resultados diferentes em algumas situações), talvez os parâmetros passados para o Hough tenham de ser mudados.
Mobile Image Processing 16826/11/2014
Manipulando pixels com OpenCV
Manipulando pixels com OpenCV
Trocando o verde pelo azul
130Mobile Image Processing26/11/2014
Manipulando pixels com OpenCV
131Mobile Image Processing
Gerando o instalador (.apk)
Gerando o instalador
133Mobile Image Processing26/11/2014
Gerando o instalador
134Mobile Image Processing26/11/2014
Gerando o instalador
135Mobile Image Processing26/11/2014
Gerando o instalador
136Mobile Image Processing26/11/2014
Gerando o instalador
137Mobile Image Processing26/11/2014
Gerando o instalador
138Mobile Image Processing26/11/2014
Gerando o instalador
139Mobile Image Processing26/11/2014
Gerando o instalador
140Mobile Image Processing26/11/2014
Gerando o instalador
141Mobile Image Processing26/11/2014
Referências
GONZALES, Rafael C.; WOODS, Richard E. Processamento Digital de Imagens, 3. ed. São Paulo: Pearson Prentice Hall, 2010.
Caelum. Apostila Java e Orientação a Objetos. Disponível em: <https://www.caelum.com.br/apostila-java-orientacao-objetos/ > Acesso em 02 de novembro de 2014.
SILVA, Aristófanes C. Fundamentos de Imagens Digitais: pós graduação em Engenharia de Eletricidade, Notas de Aula. 2004.
BRAZ, Geraldo. Paradigmas de Programação: curso graduação em Ciência da Computação, Notas de Aula. 2004.
GIRORD, Bernd. Digital Image Processing. Stanford, Lecture Notes. 2013-2014.
KUMAR, Prem K. Canny Edge Detection. Indian Institute of Technology Delhi, Lectures Notes. 2009.
Android Developers. Android API Guides. Disponível em: http://developer.android.com/guide/index.html > Acesso em 02 de novembro de 2014.
182Mobile Image Processing26/11/2014
183Mobile Image Processing
Dúvidas ?
26/11/2014
184Mobile Image Processing
Até a próxima
26/11/2014