184
Mobile Image Processing Thales Levi Azevedo Valente João Dallyson Sousa de Almeida

Mobile Image Processing - JIM 2014

Embed Size (px)

Citation preview

Page 1: Mobile Image Processing - JIM 2014

Mobile Image ProcessingThales Levi Azevedo Valente

João Dallyson Sousa de Almeida

Page 2: Mobile Image Processing - JIM 2014

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

Page 3: Mobile Image Processing - JIM 2014

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

Page 4: Mobile Image Processing - JIM 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

Page 5: Mobile Image Processing - JIM 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

Page 6: Mobile Image Processing - JIM 2014

INTRODUÇÃO

Page 7: Mobile Image Processing - JIM 2014

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

Page 8: Mobile Image Processing - JIM 2014

Sistema de Processamento de Imagem Digital

8Mobile Image Processing26/11/2014

Page 9: Mobile Image Processing - JIM 2014

Plataformas Mobile Populares

9Mobile Image Processing26/11/2014

Page 10: Mobile Image Processing - JIM 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

Page 11: Mobile Image Processing - JIM 2014

API do Android

11Mobile Image Processing26/11/2014

Page 12: Mobile Image Processing - JIM 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

Page 13: Mobile Image Processing - JIM 2014

Fundamentos de Linguagem Java

Page 14: Mobile Image Processing - JIM 2014

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

Page 15: Mobile Image Processing - JIM 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

Page 16: Mobile Image Processing - JIM 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

Page 17: Mobile Image Processing - JIM 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

Page 18: Mobile Image Processing - JIM 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

Page 19: Mobile Image Processing - JIM 2014

Definição de Classe Java

19Mobile Image Processing26/11/2014

Page 20: Mobile Image Processing - JIM 2014

Ex: Programa que cria e manipula conta

20Mobile Image Processing26/11/2014

Page 21: Mobile Image Processing - JIM 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

Page 22: Mobile Image Processing - JIM 2014

Herança em Java

22Mobile Image Processing26/11/2014

Page 23: Mobile Image Processing - JIM 2014

Fundamentos de Processamento de Imagens

Page 24: Mobile Image Processing - JIM 2014

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

Page 25: Mobile Image Processing - JIM 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

Page 26: Mobile Image Processing - JIM 2014

Etapas do Processamento de Imagens

26Mobile Image Processing26/11/2014

Page 27: Mobile Image Processing - JIM 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

Page 28: Mobile Image Processing - JIM 2014

Relacionamento entre pixels

• Operações aritméticas entre 2 pixels

– Subtração

28Mobile Image Processing26/11/2014

Page 29: Mobile Image Processing - JIM 2014

Relacionamento entre pixels

Operações lógicas entre 2 pixels

Mobile Image Processing26/11/2014 27

Page 30: Mobile Image Processing - JIM 2014

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

Page 31: Mobile Image Processing - JIM 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

Page 32: Mobile Image Processing - JIM 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

Page 33: Mobile Image Processing - JIM 2014

Melhoramento de Imagens

Equalização do Histograma

Exemplo

Mobile Image Processing26/11/2014 31

Page 34: Mobile Image Processing - JIM 2014

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

Page 35: Mobile Image Processing - JIM 2014

Exemplos Processamento de Imagens

• Melhoramento de Imagens

35Mobile Image Processing

FONTE: [GIRORD, 2013]

26/11/2014

Page 36: Mobile Image Processing - JIM 2014

Exemplos Processamento de Imagens

• Redução de Ruídos

36Mobile Image Processing

FONTE: [GIRORD, 2013]

26/11/2014

Page 37: Mobile Image Processing - JIM 2014

Exemplos Processamento de Imagens

• Efeitos especiais

37Mobile Image Processing

FONTE: [GIRORD, 2013]

26/11/2014

Page 38: Mobile Image Processing - JIM 2014

Exemplos Processamento de Imagens

• Detecção de Faces

38Mobile Image Processing

FONTE: [GIRORD, 2013]

26/11/2014

Page 39: Mobile Image Processing - JIM 2014

Exemplos Processamento de Imagens

• Aplicações na Oftalmologia

39Mobile Image Processing26/11/2014

Page 40: Mobile Image Processing - JIM 2014

ROTEIRO ANDROID

Page 41: Mobile Image Processing - JIM 2014

Preparando o ambiente de desenvolvimento Android –Passo a Passo

Page 42: Mobile Image Processing - JIM 2014

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

Page 43: Mobile Image Processing - JIM 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

Page 44: Mobile Image Processing - JIM 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

Page 45: Mobile Image Processing - JIM 2014

Página de download do Eclipse ADT

Baixe a IDE Eclipse ADT no site da Google.

45Mobile Image Processing26/11/2014

Page 46: Mobile Image Processing - JIM 2014

Página de download do Eclipse ADT

Baixe a IDE Eclipse ADT no site da Google.

46Mobile Image Processing26/11/2014

Page 47: Mobile Image Processing - JIM 2014

Descompacte a IDE Elipse ADT e o Android SDK

47Mobile Image Processing26/11/2014

Page 48: Mobile Image Processing - JIM 2014

Tela de escolha do workspace

Abra o Eclipse e escolha o seu workspace

48Mobile Image Processing26/11/2014

Page 49: Mobile Image Processing - JIM 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

Page 50: Mobile Image Processing - JIM 2014

Tela inicial da IDE Elipse ADT

Verificaremos se o diretório do SDK está correto.

50Mobile Image Processing26/11/2014

Page 51: Mobile Image Processing - JIM 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

Page 52: Mobile Image Processing - JIM 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

Page 53: Mobile Image Processing - JIM 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

Page 54: Mobile Image Processing - JIM 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

Page 55: Mobile Image Processing - JIM 2014

Fechando o Eclipse ADT

Caso apareçam estes erros, apenas reinicie o eclipse e serão resolvidos.

55Mobile Image Processing26/11/2014

Page 56: Mobile Image Processing - JIM 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

Page 57: Mobile Image Processing - JIM 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

Page 58: Mobile Image Processing - JIM 2014

Inicialização do Android SDK

Inicialização do Android SDK

58Mobile Image Processing26/11/2014

Page 59: Mobile Image Processing - JIM 2014

Instalar os Tools, de preferência os mais atualizados por questões de compatibilidade com as APIs

59Mobile Image Processing26/11/2014

Page 60: Mobile Image Processing - JIM 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

Page 61: Mobile Image Processing - JIM 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

Page 62: Mobile Image Processing - JIM 2014

Depois, instale suas APIs preferenciais.

62Mobile Image Processing26/11/2014

Page 63: Mobile Image Processing - JIM 2014

Selecionaremos essa API por ainda ser muito utilizada por uma parte do mercado

63Mobile Image Processing26/11/2014

Page 64: Mobile Image Processing - JIM 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

Page 65: Mobile Image Processing - JIM 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

Page 66: Mobile Image Processing - JIM 2014

Ao clicar no botão instalar, aceite os termos de compromisso e clique em instalar

66Mobile Image Processing26/11/2014

Page 67: Mobile Image Processing - JIM 2014

As bibliotecas serão baixadas e o SDK Manager será reiniciado.

67Mobile Image Processing26/11/2014

Page 68: Mobile Image Processing - JIM 2014

Ciclo de vida de uma Activity

Page 69: Mobile Image Processing - JIM 2014

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

Page 70: Mobile Image Processing - JIM 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

Page 71: Mobile Image Processing - JIM 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

Page 72: Mobile Image Processing - JIM 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

Page 73: Mobile Image Processing - JIM 2014

Mobile Image Processing 7326/11/2014

Page 74: Mobile Image Processing - JIM 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

Page 75: Mobile Image Processing - JIM 2014

Criando o primeiro projeto Android

Page 76: Mobile Image Processing - JIM 2014

Selecione a opção de criação de novo projeto.

76Mobile Image Processing26/11/2014

Page 77: Mobile Image Processing - JIM 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

Page 78: Mobile Image Processing - JIM 2014

Deixe como está, apenas “dê next”

78Mobile Image Processing26/11/2014

Page 79: Mobile Image Processing - JIM 2014

Tela de customização do ícone.

79Mobile Image Processing26/11/2014

Page 80: Mobile Image Processing - JIM 2014

Tela de escolha do esqueleto inicial da primeira tela de seu aplicativo. Selecionaremos a tela vazia.

80Mobile Image Processing26/11/2014

Page 81: Mobile Image Processing - JIM 2014

Definiremos os nomes da classe principal e do arquivo de layout dela

81Mobile Image Processing26/11/2014

Page 82: Mobile Image Processing - JIM 2014

Projeto criado. Ignore estes erros, se ocorrerem. São bugs da IDE.

82Mobile Image Processing26/11/2014

Page 83: Mobile Image Processing - JIM 2014

Porque foram criados 2 projetos?

Page 84: Mobile Image Processing - JIM 2014

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

Page 85: Mobile Image Processing - JIM 2014

Estrutura básica de um projeto Android

Page 86: Mobile Image Processing - JIM 2014

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

Page 87: Mobile Image Processing - JIM 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

Page 88: Mobile Image Processing - JIM 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

Page 89: Mobile Image Processing - JIM 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

Page 90: Mobile Image Processing - JIM 2014

Criando Máquina Virtual usando o AVD Manager

Page 91: Mobile Image Processing - JIM 2014

Abriremos o AVD Manager apertando este botão

91Mobile Image Processing

Abrindo o AVD Manager

26/11/2014

Page 92: Mobile Image Processing - JIM 2014

Tela inicial do AVD Manager

Aba 1- Android Virtual Devices

92Mobile Image Processing26/11/2014

Page 93: Mobile Image Processing - JIM 2014

Dispositivos Virtuais Android disponíveis. Também podem ser criados outros

Aba 2- Devices Definitions

93Mobile Image Processing26/11/2014

Page 94: Mobile Image Processing - JIM 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

Page 95: Mobile Image Processing - JIM 2014

Tela de criação de máquina virtual.

95Mobile Image Processing

Tela de criação de Máquina Virtual

26/11/2014

Page 96: Mobile Image Processing - JIM 2014

96Mobile Image Processing

Máquina virtual criada pronta para ser inicializada

26/11/2014

Page 97: Mobile Image Processing - JIM 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

Page 98: Mobile Image Processing - JIM 2014

98Mobile Image Processing

Máquina virtual inicializada

26/11/2014

Page 99: Mobile Image Processing - JIM 2014

Executando o primeiro “Hello World”

Page 100: Mobile Image Processing - JIM 2014

100Mobile Image Processing

Executando o primeiro projeto

26/11/2014

Page 101: Mobile Image Processing - JIM 2014

101Mobile Image Processing

Aplicativo HelloWorld

26/11/2014

Page 102: Mobile Image Processing - JIM 2014

Carregando uma imagem da galeria

Page 103: Mobile Image Processing - JIM 2014

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

Page 104: Mobile Image Processing - JIM 2014

Mudanças no código

104Mobile Image Processing26/11/2014

Page 105: Mobile Image Processing - JIM 2014

Mudanças no código

105Mobile Image Processing26/11/2014

Page 106: Mobile Image Processing - JIM 2014

Mudanças no código

106Mobile Image Processing26/11/2014

Page 107: Mobile Image Processing - JIM 2014

Mudanças no código

107Mobile Image Processing26/11/2014

Page 108: Mobile Image Processing - JIM 2014

Mudanças no código

108Mobile Image Processing26/11/2014

Page 109: Mobile Image Processing - JIM 2014

Mudanças no código – mudar aqui

109Mobile Image Processing26/11/2014

Page 110: Mobile Image Processing - JIM 2014

Mudanças no código

110Mobile Image Processing26/11/2014

Page 111: Mobile Image Processing - JIM 2014

Mudanças no código

111Mobile Image Processing26/11/2014

Page 112: Mobile Image Processing - JIM 2014

Voltando ao emulador

112Mobile Image Processing26/11/2014

Page 113: Mobile Image Processing - JIM 2014

Mudanças no código

113Mobile Image Processing26/11/2014

Page 114: Mobile Image Processing - JIM 2014

Mudanças no código

114Mobile Image Processing26/11/2014

Page 115: Mobile Image Processing - JIM 2014

Mudanças no código

115Mobile Image Processing26/11/2014

Page 116: Mobile Image Processing - JIM 2014

ROTEIRO OPENCV

Page 117: Mobile Image Processing - JIM 2014

Importando a biblioteca OpenCV para Android no Workspace

Page 118: Mobile Image Processing - JIM 2014

Página de download do OpenCV

118Mobile Image Processing

1- Baixe o OpenCV

26/11/2014

Page 119: Mobile Image Processing - JIM 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

Page 120: Mobile Image Processing - JIM 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

Page 121: Mobile Image Processing - JIM 2014

Página de download do OpenCV

121Mobile Image Processing

4- Selecione a opção ...marcada de vermelho...

26/11/2014

Page 122: Mobile Image Processing - JIM 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

Page 123: Mobile Image Processing - JIM 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

Page 124: Mobile Image Processing - JIM 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

Page 125: Mobile Image Processing - JIM 2014

125Mobile Image Processing

8 – A biblioteca aparecerá em seu Workspace

26/11/2014

Page 126: Mobile Image Processing - JIM 2014

Instalação do OpenCV Manager no AVD por linha de comando

Page 127: Mobile Image Processing - JIM 2014

• 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

Page 128: Mobile Image Processing - JIM 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

Page 129: Mobile Image Processing - JIM 2014

Adicionando a biblioteca ao Projeto

Page 130: Mobile Image Processing - JIM 2014

130Mobile Image Processing

1- Clique com botão direto do mouse sobre o projeto e selecione a opção “Properties.

26/11/2014

Page 131: Mobile Image Processing - JIM 2014

131Mobile Image Processing

2- Clique em “Android” do lado esquerdo e depois em “Add...” no lado direito

26/11/2014

Page 132: Mobile Image Processing - JIM 2014

132Mobile Image Processing

3- Selecione o projeto do OpenCV e clique em “Ok”

26/11/2014

Page 133: Mobile Image Processing - JIM 2014

133Mobile Image Processing

4- Verifique se a biblioteca foi adicionada e clique em “Ok”

26/11/2014

Page 134: Mobile Image Processing - JIM 2014

134Mobile Image Processing

5- A biblioteca aparecerá em seu Workspace

26/11/2014

Page 135: Mobile Image Processing - JIM 2014

Processamento de imagens pela primeira vez (sem OpenCV)

Page 136: Mobile Image Processing - JIM 2014

1- Imagem em tons de cinza (sem OpenCV)

Mobile Image Processing 13626/11/2014

Page 137: Mobile Image Processing - JIM 2014

1- Imagem em tons de cinza (sem OpenCV)

Mobile Image Processing 13726/11/2014

Page 138: Mobile Image Processing - JIM 2014

1- Imagem em tons de cinza (sem OpenCV)

Mobile Image Processing 13826/11/2014

Page 139: Mobile Image Processing - JIM 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

Page 140: Mobile Image Processing - JIM 2014

Processamento de imagens pela segunda vez(Agora usando OpenCV)

Page 141: Mobile Image Processing - JIM 2014

Segmentando o olho do Android

Nível de cinzaDetecção de

BordasBuscar olhos

Metodologia

102Mobile Image Processing26/11/2014

Page 142: Mobile Image Processing - JIM 2014

142Mobile Image Processing

Resultado a ser alcançado

26/11/2014

Page 143: Mobile Image Processing - JIM 2014

0- Chamada à biblioteca

Estes métodos

SEMPRE devem ser

chamados em sua

Activity principal.

104Mobile Image Processing26/11/2014

Page 144: Mobile Image Processing - JIM 2014

2- Imagem em tons de cinza (com OpenCV)

Mobile Image Processing 14426/11/2014

Page 145: Mobile Image Processing - JIM 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

Page 146: Mobile Image Processing - JIM 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

Page 147: Mobile Image Processing - JIM 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

Page 148: Mobile Image Processing - JIM 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

Page 149: Mobile Image Processing - JIM 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

Page 150: Mobile Image Processing - JIM 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

Page 151: Mobile Image Processing - JIM 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

Page 152: Mobile Image Processing - JIM 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

Page 153: Mobile Image Processing - JIM 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

Page 154: Mobile Image Processing - JIM 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

Page 155: Mobile Image Processing - JIM 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

Page 156: Mobile Image Processing - JIM 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

Page 157: Mobile Image Processing - JIM 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

Page 158: Mobile Image Processing - JIM 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

Page 159: Mobile Image Processing - JIM 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

Page 160: Mobile Image Processing - JIM 2014

3- Detecção de bordas com Canny - Teoria

Exemplos:

Mobile Image Processing 16026/11/2014

Page 161: Mobile Image Processing - JIM 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

Page 162: Mobile Image Processing - JIM 2014

3- Detecção de bordas com Canny

Mobile Image Processing 16226/11/2014

Page 163: Mobile Image Processing - JIM 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

Page 164: Mobile Image Processing - JIM 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

Page 165: Mobile Image Processing - JIM 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

Page 166: Mobile Image Processing - JIM 2014

4- Buscando os olhos do Android na Imagem - delimitar

Mobile Image Processing 16626/11/2014

Page 167: Mobile Image Processing - JIM 2014

4- Buscando os olhos do Android na Imagem - exibir

Mobile Image Processing 16726/11/2014

Page 168: Mobile Image Processing - JIM 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

Page 169: Mobile Image Processing - JIM 2014

Manipulando pixels com OpenCV

Page 170: Mobile Image Processing - JIM 2014

Manipulando pixels com OpenCV

Trocando o verde pelo azul

130Mobile Image Processing26/11/2014

Page 171: Mobile Image Processing - JIM 2014

Manipulando pixels com OpenCV

131Mobile Image Processing

Page 172: Mobile Image Processing - JIM 2014

Gerando o instalador (.apk)

Page 173: Mobile Image Processing - JIM 2014

Gerando o instalador

133Mobile Image Processing26/11/2014

Page 174: Mobile Image Processing - JIM 2014

Gerando o instalador

134Mobile Image Processing26/11/2014

Page 175: Mobile Image Processing - JIM 2014

Gerando o instalador

135Mobile Image Processing26/11/2014

Page 176: Mobile Image Processing - JIM 2014

Gerando o instalador

136Mobile Image Processing26/11/2014

Page 177: Mobile Image Processing - JIM 2014

Gerando o instalador

137Mobile Image Processing26/11/2014

Page 178: Mobile Image Processing - JIM 2014

Gerando o instalador

138Mobile Image Processing26/11/2014

Page 179: Mobile Image Processing - JIM 2014

Gerando o instalador

139Mobile Image Processing26/11/2014

Page 180: Mobile Image Processing - JIM 2014

Gerando o instalador

140Mobile Image Processing26/11/2014

Page 181: Mobile Image Processing - JIM 2014

Gerando o instalador

141Mobile Image Processing26/11/2014

Page 182: Mobile Image Processing - JIM 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

Page 183: Mobile Image Processing - JIM 2014

183Mobile Image Processing

Dúvidas ?

26/11/2014

Page 184: Mobile Image Processing - JIM 2014

184Mobile Image Processing

Até a próxima

26/11/2014