borgesnogueira / ZebTrack

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

Testando mudança no trecho de associate_soma_matrizes #13

Closed mtxslv closed 1 year ago

mtxslv commented 3 years ago

Eu quero trocar o trecho

 [~,I] = min(D,[],1);

    centroides_escolhidos = centroides_boundingbox(I,:);
    pxn = centroides_escolhidos(:,1);
    pyn = centroides_escolhidos(:,2);

    [detectado,~] = ismember(centroides_boundingbox,centroides_escolhidos,'rows');

no código do associate_soma_matrizes para o seguinte trecho do associateeuclid:

%enquanto tiver aniamis nao associados ou blobs nao associados
while ~isempty(find(detectado==0, 1)) && ~isempty(find(blobdetectado==0, 1))
    %acha o minimo atual
    %[blob,animal]=find(md==min(min(md)));
    [value,ind] = min(md(:));
    [blob,animal] = ind2sub(size(md),ind);

    if ~detectado(animal) && ~blobdetectado(blob) %associa o animal ao blob se eles estiverem livres
        md(blob,:) = ones(1,nanimais)*(l^2 + c^2); %bota um valor alto para nao ser mais o minimo na linha e coluna inteira, ja que esse blob e animal serão associados
        md(:,animal) = ones(ndetect,1)*(l^2 + c^2);
        detectado(animal) = 1;
        blobdetectado(blob) = 1;
        pxn(animal) = cx(blob);           %Associando o centro de massa do blob com a posição do animal
        pyn(animal) = cy(blob);
    %    caixa(animal,1:4) = boundingbox(blob,:);
    end

end

Para tanto estou testando se o trecho original cria o mesmo resultado que o do associateeuclid. O resultado do trecho original pode ser encontrado na Wiki do projeto. Mais especificamente no exemplo de associate_soma_matrizes. Para tanto, estou utilizando o código:

D = [69.8753 62.7836; 66.0718 99.9859; 135.8154 137.7988]
pxa = [275.5008; 231.5912];
pya = [272.0408; 289.9099];
pxn = pxa;
pyn = pya;
cx = [287.3282 282.0642 295.0000];
cy = [270.3820 315.9358 322.0000];
nanimais = 2;
detectado = zeros(1,nanimais);
ndetect = 3;
blobdetectado = zeros(1,ndetect);
md = D;
l = 480; c = 640;

%enquanto tiver aniamis nao associados ou blobs nao associados
while ~isempty(find(detectado==0, 1)) && ~isempty(find(blobdetectado==0, 1))
    %acha o minimo atual
    %[blob,animal]=find(md==min(min(md)));
    [value,ind] = min(md(:));
    [blob,animal] = ind2sub(size(md),ind);

    if ~detectado(animal) && ~blobdetectado(blob) %associa o animal ao blob se eles estiverem livres
        md(blob,:) = ones(1,nanimais)*(l^2 + c^2); %bota um valor alto para nao ser mais o minimo na linha e coluna inteira, ja que esse blob e animal serão associados
        md(:,animal) = ones(ndetect,1)*(l^2 + c^2);
        detectado(animal) = 1;
        blobdetectado(blob) = 1;
        pxn(animal) = cx(blob);           %Associando o centro de massa do blob com a posição do animal
        pyn(animal) = cy(blob);
    %    caixa(animal,1:4) = boundingbox(blob,:);
    end

end
mtxslv commented 3 years ago

Troquei md por D

D = [69.8753 62.7836; 66.0718 99.9859; 135.8154 137.7988]
pxa = [275.5008; 231.5912];
pya = [272.0408; 289.9099];
pxn = pxa;
pyn = pya;
cx = [287.3282 282.0642 295.0000];
cy = [270.3820 315.9358 322.0000];
nanimais = 2;
detectado = zeros(1,nanimais);
ndetect = 3;
blobdetectado = zeros(1,ndetect);
l = 480; c = 640;

%enquanto tiver aniamis nao associados ou blobs nao associados
while ~isempty(find(detectado==0, 1)) && ~isempty(find(blobdetectado==0, 1))
    %acha o minimo atual
    [blob,animal]=find(D==min(min(D)));
    [value,ind] = min(D(:));
    [blob,animal] = ind2sub(size(D),ind);

    if ~detectado(animal) && ~blobdetectado(blob) %associa o animal ao blob se eles estiverem livres
        D(blob,:) = ones(1,nanimais)*(l^2 + c^2); %bota um valor alto para nao ser mais o minimo na linha e coluna inteira, ja que esse blob e animal serão associados
        D(:,animal) = ones(ndetect,1)*(l^2 + c^2);
        detectado(animal) = 1;
        blobdetectado(blob) = 1;
        pxn(animal) = cx(blob);           %Associando o centro de massa do blob com a posição do animal
        pyn(animal) = cy(blob);
    %    caixa(animal,1:4) = boundingbox(blob,:);
    end

end