borgesnogueira / ZebTrack

Software de rastreio de animais em matlab
GNU General Public License v2.0
5 stars 2 forks source link

Integrating my functions in Zebtrack tracking #9

Open mtxslv opened 4 years ago

mtxslv commented 4 years ago

Enquanto eu substituía associatefudera por associate_soma_matrizes, notei que os retornos envolvem as variáveis detectado e caixa. Minha função não retorna isso. Depois preciso checar isso.

mtxslv commented 4 years ago

Eu notei que o cálculo dos centróides está atrelado aos sliders do tempo de processamento de vídeo. Isso altera os centróides esperados pelos testes separados, visto que lá o tempo usado (frame_inicial e frame_final) é diferente.

mtxslv commented 4 years ago

Um dos centróides está sempre vindo nulo ([0 0 0]). Não entendo o porquê.

mtxslv commented 4 years ago

Uma hora é interessante plotar as cores encontradas. Supondo uma cor qualquer:

>> imaje = [72.8047   22.3412   30.9006]

Dá pra usar:

>>image(reshape(uint8(imaje),[1,1,3]))
mtxslv commented 4 years ago

Estou testando o calcula_centroids_cov_rgb. Alterei a função e rodei o comando (após pôr no Workspace as variáveis do variaveis_calculaMediaCovarianciaHSV):

>> [media,variancia] = calcula_centroids_cov_rgb(video, 4220, 4225, wbackg,Vrm, nanimais, mascara, minpix, maxpix, threshold, aviobj2, criavideodiff, tipsubfundo, colorida, 0.15,0.5,5)

depois, para plotar as cores:

>> image(reshape(uint8(media(1,:)),[1,1,3]))
>> image(reshape(uint8(media(2,:)),[1,1,3]))

Alcancei os valores:

media =

   19.6208   21.1455   48.5104
   74.2650   22.1734   24.9002

variancia = 

    [3x3 double]    [3x3 double]

> > variancia{1} 
ans =
   79.4257   81.3291  183.4570
   81.3291   89.8574  198.5089
  183.4570  198.5089  466.9247
> > variancia{2}
ans =

   25.3628   10.2520   10.4282
   10.2520   23.5695   10.6866
   10.4282   10.6866    6.5847
mtxslv commented 4 years ago

Após pegar as variáveis de teste corretas, rodei o seguinte teste:

>> [media,variancia] = calcula_centroids_cov_rgb(video, 4220, 4350, wbackg,Vrm, nanimais, mascara, minpix, maxpix, threshold, aviobj2, criavideodiff, tipsubfundo, colorida, 0.15,0.5,5)

o que retornou o seguinte resultado:

media =

   43.8112   26.8470   41.7825
         0         0         0

variancia = 

    [3x3 double]    [3x3 double]
>> variancia{1}

ans =

  454.3204    0.1983 -295.1956
    0.1983   12.1296   17.0885
 -295.1956   17.0885  270.2891

>> variancia{2}

ans =

     0     0     0
     0     0     0
     0     0     0

O que é bizarro. Note que eu adicionei mais frames (o tempo final pulou de 4225 pra 4350). Ou seja, se os frames "adicionais" não contribuem com nada, por que eles levam o resultado pra um vetor (e uma matriz) nulos?

mtxslv commented 4 years ago

Eu tentei colocar o (cor==1), mas deu um erro na dimensão da matriz (o wframe estaria com dimensões erradas, pelo jeito). @mtxslv , cheque isso depois. Note que, em teoria, sempre que cor fosse igual a 3, colorida deveria ser igual a 1. Nas variáveis de teste que salvei, tenho uma cor igual 3, enquanto que colorida é igual a 0. Estranho... mas por que estou me preocupando com isso? Bem... na teoria, quando eu testasse o calcula_centroids_cov_rgb, os centroides deveriam ser iguais (as covariâncias também, mas nem chequei) com os centroides que eu calculei quando estava desenvolvendo a função. Por que estão diferentes? Bem, Marcelo também tirou o (cor==1). Será que não é isso?

mtxslv commented 4 years ago

Hoje eu testei a função pondo o cor de volta (usei a cor salva nas variáveis de teste). Rodei a função e consegui os mesmos centróides:

media =

   19.6208   21.1455   48.5104
   74.2650   22.1734   24.9002
mtxslv commented 4 years ago

Eu coloquei o calcula_centroids_cov_rgb.m no ponto em que estava quando deixei ele funcional. Ou seja, resgatei uma versão antiga. Testei a função sozinha (talvez seja psicológico), e ela tá ok: resgatei a versão correta. Vou tentar integrá-la ao código.

mtxslv commented 4 years ago

Agora eu testei a função calcula_centroids_cov_rgb.m sozinha e integrada ao Zebtrack. Eu adicionei um display pra ver os parâmetros de entrada, e notei o seguinte.

media =

16.8551 17.5273 46.9518 68.4715 21.8971 22.6197

variancia =

[3x3 double]    [3x3 double]
* Anteriormente eu havia executado a função dentro do Zebtrack e obtive o seguinte resultado:

tempo_inicial = 130; tempo_final= 131 no valid pixels found no valid pixels found no valid pixels found

centroids =

22.4838 20.1587 55.7201 0 0 0

mtxslv commented 4 years ago

Rodei a calcula_centroids_cov_rgb sozinha. Eis os resultados:

[media,variancia] = calcula_centroids_cov_rgb(video, tempo_inicial, tempo_final, wbackg,Vrm, nanimais, mascara, minpix, maxpix, threshold, aviobj2, criavideodiff, tipsubfundo, colorida, cor, 0.15,0.5,5)
tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found

media =

   23.3055   25.0995   57.2719
   72.8047   22.3412   30.9006

variancia = 

    [3x3 double]    [3x3 double]

>> variancia{1}

ans =

   25.5100   27.2358   56.3421
   27.2358   34.3325   63.7181
   56.3421   63.7181  143.4295

>> variancia{2}

ans =

   24.3727   -0.4904    3.7522
   -0.4904   22.9286   20.8271
    3.7522   20.8271   39.1767
mtxslv commented 4 years ago

rodando com o Zebtrack:

tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found

centroids =

   25.2385   26.7002   56.9348
         0         0         0

variancia{1} = 
variancia{2} = 
mtxslv commented 4 years ago

Como visto devidos aos imshow() e disp(), a diferença mais notável que houve foi na variável mascara. Acontece que a variável mascara define quais áreas da imagem são processáveis ou não, segundo o que o professor Marcelo indicou. Eu me lembro que , quando eu salvei as variáveis, eu realmente defini áreas não processáveis. Daí a diferença nas máscaras. Entretanto, como comentei com o professor, não acho que isso implique tamanha diferença nos resultados.

mtxslv commented 4 years ago

Rodei o Zebtrack pra salvar as variáveis V e mascara. Eis o resultado:

>> zebtrack
tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found

centroids =

         0         0         0
   25.2385   26.7002   56.9348

variancia{1} = 
variancia{2} = 
mtxslv commented 4 years ago

Rodei a função calcula_centroids_cov_rgb sozinha, com a máscara usada no trackGUI. Tudo o mais permanece o mesmo. Eis o resultado do processamento:

>> [media,variancia] = calcula_centroids_cov_rgb(video, tempo_inicial, tempo_final, wbackg,Vrm, nanimais, mascara, minpix, maxpix, threshold, aviobj2, criavideodiff, tipsubfundo, colorida, cor, 0.15,0.5,5)
tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found

media =

   23.3055   25.0995   57.2719
   72.8047   22.3412   30.9006

variancia = 

    [3x3 double]    [3x3 double]
mtxslv commented 4 years ago

Rodei a função calcula_centroids_cov_rgb sozinha, com o V usado no trackGUI. Tudo o mais permanece o mesmo. Eis o resultado do processamento:

[media, variancia] = calcula_centroids_cov_rgb(video, tempo_inicial, tempo_final, wbackg,Vzin, nanimais, mascara, minpix, maxpix, threshold, aviobj2, criavideodiff, tipsubfundo, colorida, cor, 0.15,0.5,5)
tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found

media =

         0         0         0
   25.2385   26.7002   56.9348

variancia = 

    [3x3 double]    [3x3 double]
mtxslv commented 4 years ago

Apagar, na pasta raiz, os resultados do processamento relativos ao vídeo teste. Isso porque, quando abrir o Zebtrack de novo, tudo será reprocessado. Um novo V poderá indicar se o V que usei pra fazer a função tá muito específico e só funciona para aquele caso, ou terá um bom resultado.

Caso recaia na mesma coisa, é possível que minha função tá muuuuuito específica pra os parâmetros vídeo teste. Assim sendo, os parâmetros (thresholds e tals) devem escolhidos pelo usuário no GUI.

Também preciso ajeitar pro zebtrack mostrar no GUI o rastreamento do peixe (onde está a cor que ele encontrou, no handles.axis)

mtxslv commented 4 years ago

Apaguei o material da pasta raiz. Não mudou muita coisa:

tempo_inicial = 168;  tempo_final= 169
FILE0001_x264.mp4 , nanimais= 2 , maxpix = 0, minpix= 2
tol=10, avi= 0criavideo=0tipsubfundo= 1
colorida= 0 cor= 3
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found
no valid pixels found

centroids =

   25.2385   26.7002   56.9348
         0         0         0

variancia{1} = 
variancia{2} = 
mtxslv commented 4 years ago

O V utilizado pelo Zebtrack é aquele oriundo das variáveis que utilizei para escrever a função calcula_centroids_cov_rgb. Após gerar o dataset, viu-se que os centróides coincidiram com aqueles gerados quando a função é testada sozinha.

mtxslv commented 4 years ago

Após gerado o dataset, clico no "Start" (tracking) e recebo o seguinte erro:

Undefined function or variable "centroids".

Error in trackGUI>run_Callback (line 822)
    [handles.e.t,handles.e.posicao,handles.e.velocidade,handles.e.parado,handles.e.dormindo,handles.e.tempoareas,handles.e.distperc,handles.e.comportamento]=...

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in trackGUI (line 50)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)trackGUI('run_Callback',hObject,eventdata,guidata(hObject))

Error using waitfor
Error while evaluating UIControl Callback
mtxslv commented 4 years ago

Após gerado o dataset, clico no "Start" (tracking) e recebo o seguinte erro:

Undefined function or variable "centroids".

Error in trackGUI>run_Callback (line 822)
    [handles.e.t,handles.e.posicao,handles.e.velocidade,handles.e.parado,handles.e.dormindo,handles.e.tempoareas,handles.e.distperc,handles.e.comportamento]=...

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in trackGUI (line 50)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)trackGUI('run_Callback',hObject,eventdata,guidata(hObject))

Error using waitfor
Error while evaluating UIControl Callback

Pra consertar esse erro (e um que surgirá logo depois), eu troquei a mencionada linha 822 por:

    track(visu,fini,ffim,handles.directoryname,handles.video,pxcm,np,procf,handles.areaproc,handles.areaint,handles.areaexc,criavideores,mostradiff,thresh,filt,handles,fundodina,tipfilt,tipsubfundo,velmin,tempmin,tempminparado,subcor,camlent,trackmouse,liveTracking,trackindividuals, handles.centroids, handles.cov_matrices, actions);

No caso, isso significa trocar "centroids" por handles.centroids e "cov_matrices" por handles.cov_matrices.