Descritores fractais FD-MIG para estimativa de peso vivo em gado a partir de imagens

João LeonardiJoão LeonardiORCID6 min
View on GitHub

O Antares estima peso vivo bovino a partir de fotografias: eleva pixels RGB a nuvem de pontos 3D, aplica dilatação de Voronoi multirótulo e extrai vetores log-volume FD-MIG (Fractal Dimension from Multilabel Image Geometry) com textura LBP como features para regressão. A hipótese é que a geometria fractal do tecido — cor, textura, silhueta — carrega massa corporal aprendível com poucos exemplos rotulados.

O pipeline atual cobre extração FD-MIG e visualização da nuvem; segmentação (DeepLabV3+) e a regressão de peso ainda não estão implementadas. O foco é o animal antes do abate — distinto da tipificação de carcaça na série A.


1. Motivação: peso sem balança

A pesagem individual em campo é cara, lenta e estressante para o animal. Em contrapartida, câmeras em currais, corredores de manejo ou drones já capturam imagens em escala. O desafio é converter pixels em uma estimativa de massa com robustez a pose, iluminação e fundo.

Abordagens puramente geométricas — área da silhueta, perímetro, razão de aspecto — colapsam quando o animal muda de ângulo ou distância. Abordagens puramente espectrais dependem de calibração radiométrica. O Antares ocupa um meio-termo: descritores fractais multicanal que combinam posição espacial, intensidade de cor e textura local, sem rede neural treinada na etapa de feature extraction.

Este trabalho se conecta a outros registros do blog sobre conformação e acabamento de carcaças — invariantes integrais, homologia persistente e sensoriamento multiespectral — mas foca no problema antes do abate: estimar peso vivo a partir da aparência superficial do animal.


2. Ideia central: elevar pixels para R3\mathbb{R}^3

A FD-MIG trata cada pixel de uma imagem RGB como um ponto em um espaço tridimensional. Para um pixel na posição (i,j)(i, j) com intensidade II em um canal, define-se:

z=(Z+1)I256+rmaxz = \left\lfloor \frac{(Z+1)\, I}{256} \right\rfloor + r_{\max}

onde ZZ é o nível de quantização (padrão: 96) e rmaxr_{\max} é o raio máximo de dilatação (padrão: 4). As coordenadas espaciais recebem um deslocamento de rmaxr_{\max} para acomodar a dilatação nas bordas.

O procedimento é repetido para os canais R, G, B e para uma versão em escala de cinza. Cada canal gera sua própria nuvem de pontos; pontos que coincidem no espaço (x,y,z)(x, y, z) recebem rótulos múltiplos — daí o multilabel no nome do método.

Elevação de pixels RGB para nuvens de pontos 3D por canal. Cada eixo espacial codifica posição na imagem; o eixo vertical codifica intensidade quantizada.
Elevação de pixels RGB para nuvens de pontos 3D por canal. Cada eixo espacial codifica posição na imagem; o eixo vertical codifica intensidade quantizada.

Para imagens com canal alfa (recorte de fundo), apenas pixels opacos entram na nuvem. A silhueta do animal emerge naturalmente na projeção superior:

Projeção XY da nuvem de pontos de um recorte RGBA de gado. Cada canal contribui com pontos coloridos sobrepostos.
Projeção XY da nuvem de pontos de um recorte RGBA de gado. Cada canal contribui com pontos coloridos sobrepostos.


3. Dilatação de Voronoi multirótulo

Com as nuvens construídas, aplica-se uma dilatação de Voronoi multirótulo (VD). Para cada coordenada (x,y,z)(x, y, z) ocupada, conta-se quantos voxels são alcançados em cada raio r{0,1,,rmax}r \in \{0, 1, \ldots, r_{\max}\}, ponderando igualmente entre os rótulos presentes naquele voxel.

O resultado é um volume cumulativo Vc(r)V_c(r) por canal c{R,G,B,GRAY}c \in \{\mathrm{R}, \mathrm{G}, \mathrm{B}, \mathrm{GRAY}\}. O vetor de características é o logaritmo desses volumes, excluindo r=0r = 0:

f=[logVR(1:rmax),  logVG(1:rmax),  logVB(1:rmax),  logVGRAY(1:rmax)]\mathbf{f} = \bigl[\log V_{\mathrm{R}}(1{:}r_{\max}),\; \log V_{\mathrm{G}}(1{:}r_{\max}),\; \log V_{\mathrm{B}}(1{:}r_{\max}),\; \log V_{\mathrm{GRAY}}(1{:}r_{\max})\bigr]

Com rmax=4r_{\max} = 4, o vetor tem 16 dimensões. A interpretação fractal vem da relação entre volume ocupado e escala de dilatação: tecidos com textura mais complexa ou distribuição de intensidade mais heterogênea produzem curvas de dilatação distintas.

Curvas de dilatação log-volume por canal. A inclinação e a separação entre canais refletem a complexidade geométrica da imagem.
Curvas de dilatação log-volume por canal. A inclinação e a separação entre canais refletem a complexidade geométrica da imagem.

Vetor de características FD-MIG completo (16 dimensões). Cada segmento corresponde a um canal; dentro de cada segmento, os índices seguem o raio de dilatação.
Vetor de características FD-MIG completo (16 dimensões). Cada segmento corresponde a um canal; dentro de cada segmento, os índices seguem o raio de dilatação.


4. Textura LBP por canal

A variante FD-MIG + LBP enriquece cada voxel com um rótulo de textura. Para cada canal isolado, calcula-se o Local Binary Pattern (8 vizinhos, raio 1, padrão uniforme rotation-invariant) e agrupa-se o volume cumulativo por rótulo LBP em vez de por canal de cor.

Isso produz uma matriz de volumes de forma (L×rmax)(L \times r_{\max}), onde LL é o número de padrões LBP distintos. Visualizada como heatmap, a estrutura revela quais texturas dominam em cada escala de dilatação:

Heatmaps FD-MIG + LBP para os canais vermelho, verde e azul. Eixo horizontal: raio de dilatação; eixo vertical: rótulo LBP; cor: log-volume cumulativo.
Heatmaps FD-MIG + LBP para os canais vermelho, verde e azul. Eixo horizontal: raio de dilatação; eixo vertical: rótulo LBP; cor: log-volume cumulativo.

O canal vermelho tende a capturar variações de pigmentação e vascularização superficial; o verde e o azul respondem a diferenças de espalhamento e umidade percebida. A combinação multicanal evita depender de um único espaço de cor.


5. Arquitetura do repositório

O código foi reorganizado em um pacote Python antares com notebooks limpos e módulos reutilizáveis:

MóduloResponsabilidade
antares/fd_mig.pyPipeline FD-MIG: nuvem de pontos, VD multirótulo, vetor log-volume, LBP
antares/point_cloud.pyConstrução de nuvens a partir de imagens RGB/RGBA
antares/plotting.pyFiguras 3D, heatmaps, curvas de dilatação, exportação PNG/PDF
antares/style.pyTema matplotlib (tipografia Arial, paleta neutra, 300 dpi)

Dois notebooks documentam o fluxo:

  • pixels.ipynb — pipeline FD-MIG completo sobre imagem RGB
  • tecido_fractal.ipynb — nuvem de pontos 3D a partir de recorte RGBA com fundo removido

As figuras deste post foram geradas a partir de assets/cattle/cattle.png, um recorte de gado com canal alfa.

Nuvem de pontos 3D do tecido com canais R, G e B sobrepostos. A forma do animal emerge da distribuição conjunta de posição e intensidade.
Nuvem de pontos 3D do tecido com canais R, G e B sobrepostos. A forma do animal emerge da distribuição conjunta de posição e intensidade.

Painéis 3D separados por canal (R, G, B) para o recorte de gado.
Painéis 3D separados por canal (R, G, B) para o recorte de gado.


6. Pipeline planejado

O Antares foi concebido como um pipeline de quatro estágios:

EstágioStatus
Extração FD-MIGImplementado
Visualização e figurasImplementado
Segmentação automáticaStub (article_implementation.ipynb)
Regressão de pesoNão iniciado

A segmentação isolará o animal do fundo antes da extração de descritores, reduzindo contaminação por pixels de solo, cerca ou outros animais. A regressão pode ser linear (Ridge/Lasso) ou não-linear (Random Forest, pequena MLP), avaliada com validação cruzada leave-one-out dado o tamanho esperado da amostra.


7. Limitações e próximos passos

Limitações atuais:

  • Não há conjunto rotulado de peso no repositório; as figuras usam uma única imagem de demonstração.
  • A extração FD-MIG é O(MN)O(MN) por pixel por canal — aceitável para ROIs de centenas de pixels, mas exige downsampling ou ROI para imagens de alta resolução.
  • Descritores fractais capturam geometria e textura, mas não capturam diretamente profundidade ou escala métrica; a regressão precisará de normalização por distância de câmera ou referência de tamanho.

Próximos passos:

  1. Curar um conjunto de imagens com peso medido em balança (campo ou curral).
  2. Implementar segmentação DeepLabV3+ fine-tuned para bovinos.
  3. Avaliar FD-MIG, FD-MIG+LBP e FDMIC (transformada euclidiana de distância) como features para regressão.
  4. Comparar com baseline geométrica (área da silhueta) e com descritores topológicos já testados em carcaças.

Referências

  • Trabuco, A. C. et al. — FD-MIG: fractal descriptors from multilabel image geometry (família de métodos para textura e classificação de imagens).
  • Ojala, T., Pietikäinen, M. & Mäenpää, T. (2002). Multiresolution gray-scale and rotation invariant texture classification with Local Binary Patterns. IEEE TPAMI.
  • Manay, S. et al. (2006). Integral invariants for shape matching. IEEE TPAMI — contexto de invariantes para conformação no blog.

Na série Gado vivo: detecção e peso