Hand function identification

Given the photograph of the hand, I am trying to determine the most suitable method for determining the position of the palm connecting the fingers. (i.e. place on the palm farther from the center of the palm, essentially between the fingers.)

I was thinking about some possible coding methods, in particular, active modeling of shapes. However, it seems that actively modeling the form will be redundant, since all I need to do is find these key points, rather than track their movement. I was wondering if anyone familiar with object identification could suggest a more suitable technique. Thanks.

+4
source share
1 answer

Here is sample code in python using pymorph and mahotas. It should be pretty trivial to recreate with opencv. If possible, I would choose a different background, something further from the skin tone would simplify the initial threshold value.

import pymorph as m import mahotas def hsv_from_rgb(image): image = image/255.0 r, g, b = image[:,:,0], image[:,:,1], image[:,:,2] m, M = numpy.min(image[:,:,:3], 2), numpy.max(image[:,:,:3], 2) d = M - m # Chroma and Value c = d v = M # Hue h = numpy.select([c ==0, r == M, g == M, b == M], [0, ((g - b) / c) % 6, (2 + ((b - r) / c)), (4 + ((r - g) / c))], default=0) * 60 # Saturation s = numpy.select([c == 0, c != 0], [0, c/v]) return h, s, v image = mahotas.imread('hand.jpg') #downsample for speed image = image[::10, ::10, :] h, s, v = hsv_from_rgb(image) # binary image from hue threshold b1 = h<35 # close small holes b2 = m.closerec(b1, m.sedisk(5)) # remove small speckle b3 = m.openrec(b2, m.sedisk(5)) # locate space between fingers b4 = m.closeth(b3, m.sedisk(10)) # remove speckle, artifacts from image frame b5 = m.edgeoff(m.open(b4)) # find intersection of hand outline with 'web' between fingers b6 = m.gradm(b3)*b5 # reduce intersection curves to single point (assuming roughly symmetric, this is near the center) b7 = m.thin(m.dilate(b6),m.endpoints('homotopic')) # overlay marker points on binary image out = m.overlay(b3, m.dilate(b7, m.sedisk(3))) mahotas.imsave('output.jpg', out) 

enter image description here

+5
source

All Articles