Estou ajudando uma clínica veterinária a medir a pressão sob uma pata de cachorro. Uso Python para minha análise de dados e agora estou tentando dividir as patas em sub-regiões (anatômicas).
Fiz uma matriz 2D de cada pata, que consiste nos valores máximos para cada sensor que foi carregado pela pata ao longo do tempo. Aqui está um exemplo de uma pata, em que usei o Excel para desenhar as áreas que quero 'detectar'. São 2 por 2 caixas ao redor do sensor com máximos locais, que juntos têm a maior soma.
Então, tentei fazer algumas experiências e decido simplesmente procurar o máximo de cada coluna e linha (não consigo olhar em uma direção devido ao formato da pata). Isso parece 'detectar' a localização dos dedos separados razoavelmente bem, mas também marca os sensores vizinhos.
Então, qual seria a melhor maneira de dizer ao Python quais desses máximos são os que eu quero?
Nota: Os quadrados 2x2 não podem se sobrepor, pois precisam ser dedos separados!
Também tomei 2x2 como uma conveniência, qualquer solução mais avançada é bem-vinda, mas sou simplesmente um cientista do movimento humano, por isso não sou um programador de verdade ou um matemático, por isso, mantenha-o 'simples'.
Aqui está uma versão que pode ser carregada comnp.loadtxt
Resultados
Então, tentei a solução do @ jextee (veja os resultados abaixo). Como você pode ver, funciona muito nas patas dianteiras, mas funciona menos bem nas patas traseiras.
Mais especificamente, ele não consegue reconhecer o pequeno pico que é o quarto dedo do pé. Obviamente, isso é inerente ao fato de o loop parecer de cima para baixo em direção ao valor mais baixo, sem levar em consideração onde está.
Alguém saberia como ajustar o algoritmo do @ jextee, para que ele também possa encontrar o quarto dedo do pé?
Como ainda não processei nenhum outro teste, não posso fornecer outras amostras. Mas os dados que forneci antes eram as médias de cada pata. Este arquivo é uma matriz com os dados máximos de 9 patas na ordem em que eles entraram em contato com a placa.
Esta imagem mostra como eles foram espalhados espacialmente sobre o prato.
Atualizar:
Criei um blog para qualquer pessoa interessada e configurei um SkyDrive com todas as medições brutas. Portanto, para quem solicita mais dados: mais poder para você!
Nova atualização:
Então, depois da ajuda que recebi com minhas perguntas sobre detecção e classificação de patas , finalmente pude verificar a detecção de dedos de todas as patas! Acontece que ele não funciona tão bem em nada, mas patas do tamanho de uma no meu próprio exemplo. É claro que, em retrospectiva, a culpa é minha por escolher o 2x2 tão arbitrariamente.
Aqui está um bom exemplo de onde dá errado: uma unha está sendo reconhecida como dedo do pé e o 'calcanhar' é tão largo que é reconhecido duas vezes!
Como a pata é muito grande, o tamanho de 2x2 sem sobreposição faz com que alguns dedos sejam detectados duas vezes. Por outro lado, em cães pequenos, muitas vezes não consegue encontrar o quinto dedo do pé, o que suspeito ser causado pela área 2x2 ser muito grande.
Depois de tentar a solução atual em todas as minhas medidas , cheguei à conclusão impressionante de que, para quase todos os meus cães pequenos, não encontrava o quinto dedo do pé e que em mais de 50% dos impactos para os cães grandes encontrava mais!
Tão claramente que preciso mudar isso. Meu palpite era mudar o tamanho do neighborhood
para algo menor para cães pequenos e maior para cães grandes. Mas generate_binary_structure
não me deixou mudar o tamanho da matriz.
Portanto, espero que alguém tenha uma sugestão melhor para localizar os dedos, talvez com a escala da área dos dedos com o tamanho da pata?