What do I do while I haven’t sorted my paws?

So I asked a question on Stack Overflow on "How to sort my paws?” to ask for help of users with knowledge about machine learning and image recognition.

Sadly, I stalled asking my question for too long and ended up asking the question just before Christmas… Which traditionally causes a major fall in SO-activity, so I guess I’ll need to add a bounty to get some fresh attention to my question.

As one of the answers asked, I do have annotations of every first contact that hits the plate:

firstpaw = {svl_1:left, svl_3:right, svl_2:right, svr_3:left,
  ser_3:right, svr_1:right, ser_1:right, dvl_2:left, der_3:right,
  dvl_1:left, dvl_3:left, sel_1:right, sel_2:left, sel_3:right,
  del_3:left, del_2:left, del_1:right, der_2:left, der_1:right,
  ser_2:left, svr_2:left, dvr_1:right, dvr_2:right, dvr_3:right}

However, these annotations matched with Joe’s ‘sorting’ don’t work. Why? Because the method assumes it will encounter all four paws consecutively.

What happens in some measurements is that one front paw (LF) strikes the plate, just barely, while the other (RF) lands just before the plate. Now the next two paws that land are, RH and LH, the fourth paw that lands is… Left front again! From there on, the sorting becomes completely useless, because it started off on the wrong track.

Visually, we easily spotted that this first paw doesn’t match the four paw pattern we see over and over again:

Pattern in paw positions != Different patterns in paw positions

So clearly, there should be a way to recognize that the first LF isn’t part of the pattern.

Since I’m not an image recognition guru, all I can resort to is trying to use some of the rules I mentioned in my previous post. However, the first step to getting some statistics from the results is off course by manually sorting all the paws.

For anyone following what I’m doing and mildly curious into looking at the data for himself: here are the lists with the annotations for the 6 measurements I processed (sorted for their order of occurrence, the third dimension of each slice).

sel_1 = ['lf','rf','lh','lf','rh','rf','lh','lf','rh','rf','lh']
sel_2 = ['lf','rh','rf','lh','lf','rh','rf','lf','lh','rh','lh']
sel_3 = ['lf','rf','lh','lf','rh','rf','lh','lf','rh','rf','lh']
ser_1 = ['rf','lh','lf','rh','rf','lh','lf','rh','rf','lh','lf','rh']
ser_2 = ['lf','rh','rf','lh','lg','rh','rf','lh','lf','rh']
ser_3 = ['rf','lh','lf','rh','rf','lh','lf','rh','rf','lh','lf']

Before I can do any number crunching, I have to delete all the incomplete impacts. I consider an impact incomplete if the sum of the pressure of the entire array isn’t zero by the time the measurement has ended (measurements have a fixed 2 second duration, so sometimes impacts get cut off) or when it landed near on the edge of the plate, in which case I can’t say for certain if the contact is complete (any impact with slice coordinates matching the edge will be deleted).

Here’s an example which has both!

Incomplete paw

After I’ve thrown out all the crap, I can sort them into the four paw groups and start doing some calculations.

I’ll post more once I’ve sorted everything out and I’ll put the data online too.