Skip to content

calculaMediaVarianciaHSV

Mateus de Assis Silva edited this page Apr 13, 2020 · 25 revisions

Funções encontradas nesse arquivo:

  1. calculaMediaVarianciaHSV
  2. extraiIntervaloFrames
  3. geraVetor_frames_video
  4. transformada_HSV
  5. transformadaInv_HSV

Introdução

Até antes da existência do reconhecimento via proximidade de cor, o Zebtrack reconhecia os peixes ao localizar os blobs e associá-los com os indivíduos mais próximos. De forma a refinar essa associação, utilizava-se uma "previsão" da posição dos peixes no próximo momento. Isso é passível de falha, pois os animais podem se movimentar de forma a confundir o software.

Um desses movimentos é quando os peixes se deslocam em retas concorrentes. No ponto de encontro das retas eles não prosseguem, mas se desviam. Isso faz com que o software troque as labels relativas a cada animal.

Assim se torna necessário uma forma de diferenciar os indivíduos. Dentre algumas possibilidades, utilizaremos um critério de cor.

Critério de cor: médias e variâncias

Ora, apesar de ser interessante utilizarmos cor pra diferenciar indivíduos (principalmente quando os animais têm cores muito distintas, como azul e vermelho), muitos fatores podem influenciar a leitura da imagem efeituada pela câmera. Isso faz com que os valores de cores lidos pelo software variem.

 % as cores dos peixes não se repetem como abaixo
 % para todos os quadros nem em todos os vídeos.

> peixe1.cor[quadro1]
        r,g,b = [255, 0, 0]
> peixe1.cor[quadro2]
        r,g,b = [255, 0, 0]
> peixe1.cor[quadro3]
        r,g,b = [255, 0, 0]

> peixe2.cor[quadro1]
        r,g,b = [0, 0, 255]
> peixe2.cor[quadro2]
        r,g,b = [0, 0, 255]
> peixe2.cor[quadro3]
        r,g,b = [0, 0, 255]

A solução para lidar com valores que variam aleatoriamente é utilizar um método estatístico. Ao computarmos as médias e variâncias das cores, para cada peixe, capturamos o comportamento aleatório das leituras. Com as médias, temos como identificar quantitativamente cada um (estimando a cor dele: por exemplo, azul). A variância expressa como tal cor varia (o expectro de azul, por exemplo).

Como usar

O usuário define um intervalo de tempo (através das variáveis tempo_final e tempo_inicial), no qual, de preferência, os peixes estejam separados espacialmente. o código contido em calculaMediaVarianciaHSV.m processa os quadros e retorna os vetores de média e variância de cor (relativas a cada animal).

Note que a função realiza a calibração dos detectores dos peixes através das cores. Ela cria identificadores para cada peixe, os quais, depois, serão utilizados para os rastrear (a partir de suas cores). Esse identificadores são as médias e as variâncias para cada peixe com cor notável.

Como funciona

inicialização de algumas variáveis

No início do código temos a inicialização das variáveis que auxiliam o software a encontrar a posição do peixe (dicax e dicay) como -1. Também se inicializa vetores para guardarem a posição imediatamente anterior de cada peixe (ou seja, as posições dos peixes no frame anterior), os quais são os pxant e pyant (posição x/y anterior).

recuperação de frames

Logo após tal inicialização, utiliza-se os tempos inicial e final do intervalo, informados pelo usuário, para recuperar todos os frames do vídeo (os quais estão no intervalo definido). Além disso, registra-se quantas imagens existem (length_frames_video).

É importante notar que frame_inicial e frame_final se refere a um número de frame numa sequência. Por exemplo:

> frame_inicial
     654
> frame_final
     988

, enquanto que os tempos inseridos pelo usuário são instantes em unidades de minutos:segundos .

O último detalhe antes de entrarmos na que diabos de processamento realiza-se em seguida? é o alocamento de variáveis para não sei pra quê.

Loop Principal

O primeiro passo do loop principal é transformar os frames dos vídeos em matrizes double, cujo espaço de cor é baseado em tons de cinza.

HSV

O espaço de cores HSV é utilizado. Uma dica de como funciona pode ser visto abaixo:

HSV_cone