Estou seguindo um curso de visão computacional e tenho este exercício: escreva um programa que, dada uma imagem da mão, ele possa reconhecer se a mão está aberta, fechada, em um soco ou mantendo uma postura "ok", usando apenas o técnicas fornecidas até agora (pixel 4/8 conectado, região conectada, localização de contornos, localização de buracos, propriedade de blob como centróide, área, perímetro, excentricidade, momentos da imagem, transformação de imagem como invert / power / log / correção de gama / correção de gama / alongamento de contraste, histograma computação e equalização).
Eu fiz isso com algumas propriedades básicas de blob (a mão fechada tem uma excentricidade baixa, "ok" tem um buraco, a mão aberta tem uma grande diferença entre a área da elipse inscrita no blob e a própria área de blob com uma baixa excentricidade) .. Parece funcionar, mas a primeira imagem é um pouco problemática.
Eu acho que poderia haver algo mais para criar um algoritmo mais robusto. Talvez algum tipo de propriedade momentânea? Alguns eixos / orientação / pontos extremos de blob poderiam ajudar?
Imagens de teste do PS:
Respostas:
Você pode tentar olhar para momentos invariantes de Hu. Eles podem ser construídos a partir de momentos básicos e são invariantes em rotação, escala, reflexão e tradução.
Calcule-os para um conjunto de contornos de treinamento primeiro e depois aplique-os ao contorno de teste.
Existem implementações no Matlab e no OpenCV, pelo que me lembro.
fonte
De acordo com o livro Programming vision of computer with Python, uma abordagem interessante é usar recursos densos de SIFT (aka HoG) em suas imagens e alimentar esses recursos com um classificador.
Eu não tentei eu mesmo, mas parece bastante som como uma abordagem. Além disso, o inventor do recurso HoG propõe o aplicativo Flutter que funcionou muito bem nos meus testes, e seria muito estranho se o inventor não usasse seus próprios recursos ou um derivado próximo.
fonte
Um de meus amigos fez isso em sua tese de graduação. O que ele basicamente fez foi codificar as propriedades de cada gesto. Por exemplo, na primeira figura, use uma máscara retangular sobre as partes da mão. As partes em que a pele encontra a borda retangular da máscara devem ser anotadas e marcadas. Em seguida, as posições relativas da borda maior e da borda menor podem ser comparadas.
Portanto, para apontar para cima, você terá uma borda menor para cima e uma borda maior no pulso.
Para apontar de lado, você tem uma borda menor de um lado e uma borda maior de baixo.
As instruções, no mínimo, podem ser abordadas dessa maneira.
fonte