Manual Processamento de Imagem João L. Vilaça Versão 1.0 31/1/2014
Índice 1. Sistema de eixo e movimentos possíveis do Drone... 3 2. Imagem... 3 3. Espaços de cor... 4 4.1 RGB... 5 4.2HSV... 5 4.3 GRAY... 6 4.3 Função EMGU que permite converter do espaço cor RGB para o HSV... 6 4. Câmaras Drone... 7 4.1 Câmara Frontal... 7 4.2 Câmara Inferior... 8 5. Programa para calibração de cor... 9 6. Biblioteca base... 11 7. Classe ProcessamentoImagem.cs... 12 João L. Vilaça 2
1. Sistema de eixos e movimentos possíveis do Drone 2. Imagem A imagem é uma matriz de duas dimensões. Cada elemento da matriz (pixel) pode ser representado por um número diferente de canais. RGB (imagem a cores) 3 canais (R, G e B) HSV (imagem a cores) 3 canais (H, S, V) Gray (imagem em tons de cinzento) 1 canal Cada canal pode ser representado por 1, 8, 16 ou 32 bits (profundidade), quanto maior a for o número de bits que representa cada canal, maior vai ser a resolução da imagem, pois existirão mais níveis para caracterizar o seu valor. João L. Vilaça 3
1 bits -> 2 1 =2 níveis [0 ou 1] 8 bits -> 2 8 =256 níveis [0 255] A dimensão da imagem é igual número_de_colunas_em_x x número_de_linhas_em_y. O início da imagem está localizado no pixel (0,0), que se encontra no topo esquerdo da imagem. 3. Espaços de cor Define a informação como a cor é representada em cada pixel da imagem. O formato da imagem adquirida do Drone é o RGB (Red, Green, Blue), mas para uma análise de cor o espaço de cor mais indicado é o HSV (Hue, Saturation, Value). João L. Vilaça 4
4.1 RGB RGB é a abreviatura do sistema de cores aditivas formado por Vermelho (Red), Verde (Green) e Azul (Blue). 4.2HSV HSV é um sistema de cores formadas pelas componentes hue (matiz), saturation (saturação) e value (valor). Matiz (tonalidade): Verifica o tipo de cor, abrangendo todas as cores do espectro, desde o vermelho até o violeta. Atinge valores de 0 a 360, mas para algumas aplicações, esse valor é normalizado de 0 a 100%, no caso das bibliotecas emgu, está normalizado de 0-255. Saturação: Também chamado de "pureza". Quanto menor esse valor, mais acinzentada aparecerá a imagem. Quanto maior o valor, mais "pura" será a imagem. Atinge valores de 0 a 100%, no caso das bibliotecas emgu, está normalizado de 0-255. João L. Vilaça 5
Valor (brilho): Define o brilho da cor. Atinge valores de 0 a 100%, no caso das bibliotecas emgu, está normalizado de 0-255. O HSV também é conhecido como HSB (hue, saturation e brightness matiz, saturação e brilho, respetivamente). 4.3 GRAY É um sistema onde cada pixel é representado por apenas um canal. A imagem é representada por tons de cinza, onde o valor 0 representa o preto e o valor 255 representa o branco (para imagens com profundidade de 8 bits). As restantes tonalidades de cinza encontram-se compreendidas entre estes dois valores. 0 255 4.3 Função EMGU que permite converter do espaço cor RGB para o HSV public Image< TOtherColor, TOtherDepth > Convert <TOtherColor, TOtherDepth>() João L. Vilaça 6
Converte a imagem actual para uma nova imagem com o espaço de cor (TOtherColor) e número de bits (TOtherDepth) especificados. Exemplo: ImagemHSV = ImagemRGB.Convert<Hsv, Byte>(); ImagemGray = ImagemRGB.Convert<Gray, Byte>(); 4. Câmaras Drone 4.1 Câmara Frontal Dimensão: 640 x 380 Número de canais: 3 Espaço de cor: RGB Profundidade: 8 bits [0-255] Sistema de eixos: (0,0) x y João L. Vilaça 7
4.2 Câmara Inferior Dimensão: 640 x 380 Número de canais: 3 Espaço de cor: RGB Profundidade: 8 bits [0-255] Sistema de eixos: y (0,0) x João L. Vilaça 8
5. Programa para calibração de cor Esta aplicação permite, no espaço de cor HSV, determinar os parâmetros das componentes H, S e V, que permitem selecionar uma determinada cor. Está implementada no projeto idronecalibracor. Instruções de utilização: 1. Antes de executar o programa: Ligar PC à rede wifi disponibilizada pelo drone ardrone2_xxxxx (em definições de wifi do PC) João L. Vilaça 9
2. Carregar no botão Drone CAM 3. Ativar a opção Iniciar captura Nas duas janelas de cima, deverá ter aparecido, no lado esquerdo a imagem original capturada da câmara do drone, e no lado direito, o resultado do processamento de imagem, onde irá depois aparecer apenas a cor selecionada (para já deverá está a preto) 4. Selecionar a câmara do drone que pretende utilizar, ao clicar no botão mudar CAM, a aplicação comuta entre a câmara INFERIOR e a camara FRONTAL do Drone. Note que a seleção de uma cor numa câmara, poderá não ter, os mesmos parâmetros que a mesma cor selecionada para a outra câmara. 5. Selecionar uma determinada cor. Pode selecionar uma cor a partir da seleção individual de qualquer uma das componentes do espaço de cores HSV, da combinação de duas dessas componentes, ou de todas. Para isso, deve ativar a componente H, S ou V, e selecionar nos comandos que se encontram ao lado, o intervalo de valores que pretende visualizar na imagem processada para aquela componente do espaço HSV. 6. Se clicar sobre o ciclo de cores que aparece na imagem Espaço de cores HSV é atualizado automaticamente o valor (inferior ou superior) na componente H da cor selecionada (ajuda para definir o intervalo inicial, que depois deve ser ajustado com mais precisão nos comandos da componente H. João L. Vilaça 10
7. Se selecionar a opção inverter, esta vai considerar um intervalo de valores inverso ao que foi selecionado. 8. Se selecionar a opção bloquear, esta vai bloquear a dimensão do intervalo. Assim, por exemplo, se aumentar o limite inferior, a aplicação, automaticamente aumenta o limite superior, mantendo o intervalo constante. 9. Se selecionar a opção Tracking o software vai desenhar uma caixa de limites (a vermelho) na imagem original, de todos objetos a branco na imagem processada (com a cor selecionada). Para limitar os objetos selecionados, pode definir qual a área mínima (em pixéis) do objeto, ai apenas serão desenhados os objetos com uma área superior à estabelecida. 6. Biblioteca base Emgu CV é uma biblioteca que encapsula as funções da biblioteca opencv, e permite a sua utilização em múltiplas plataformas. Na presente competição será utilizada a plataforma.net e será utilizada a linguagem C#. Links uteis com documentação sobre as funções da biblioteca: http://www.emgu.com/wiki/files/2.3.0/document/index.html Links uteis com alguns tutoriais: http://www.emgu.com/wiki/index.php/tutorial João L. Vilaça 11
7. Classe ProcessamentoImagem.cs Conjunto de funções de alto nível criada para a competição. //Esta função deteta uma bounding box (rectangulo) das regiões a branco na imagem com uma área superior areav e guarda o centroide do objeto na variável Obj_centroid //img - imagem binaria com objetos a branco e restante imagem a preto; //showreconimg - imagem a cores onde vai ser desenhado o resultado da função (retângulo) //areav - área mínima em pixéis dos objetos a identificar public void Deteccao_Rectangulo(Image<Gray, Byte> img, Image<Bgr, Byte> showreconimg, double areav) //Esta função deteta uma linha representada com uma cor escura numa imagem, guarda o centroide da linha na variável Obj_centroid e desenha o centroide e o contorno da linha selecionada sobre a imagem original //img - imagem a cores BGR onde será detetada a linha e desenhada a informação do centroide e contorno da linha public Image<Gray, Byte> Deteccao_Linha(Image<Bgr, Byte> img) //Esta função seleciona uma cor no espaço HSV de devolve uma imagem com a cor selecionada a branco e o resto da imagem a preto //imframe - imagem a cores onde se quer selecionar a gama de cores; //L1,H1 - limite inferior e superior do canal H; //L2,H2 - limite inferior e superior do canal S; //L3,H3 - limite inferior e superior do canal V; //H - 1 ativa gama no canal H, 0 não considera o canal; //S - 1 ativa gama no canal S, 0 não considera o canal; //V - 1 ativa gama no canal V,0 não considera o canal; //I 1 para inverter a imagem os pixéis branco passam a preto e os pixéis a preto passam a branco public Image<Gray, Byte> HsvROI(Image<Bgr, Byte> imgfame, int L1, int H1, int L2, int H2, int L3, int H3, bool H, bool S, bool V, bool I) //função que delimita a gama de um dos canais de uma imagem do tipo HSV e devolve uma imagem com esse resultado //hsvimage - imagem HSV //Lo - limite inferior do intervalo da gama //Hi - limite superior do intervalo da gama //con - canal 0->H, 1->S, 2->V private Image<Gray, Byte> inrangeimage(image<hsv, Byte> hsvimage, int Lo, int Hi, int con) João L. Vilaça 12