Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Python efficiently filter blobs

I'm segmenting an image and have a good threshold performed, however I need to remove areas which are too large or too small. My current implementation works, but I feel there has to be a quicker way.

def consecutive(data, stepsize=1):
    return np.split(data, np.where(np.diff(data) != stepsize)[0]+1)

# Remove blobs which aren't right size
# Go through rows
for row in thresh:
    ret = consecutive(np.where(row))
    for line in ret:
        if line.size > 200 or line.size < 30:
            row[line] = 0
# Go through columns
for row in thresh.T:
    ret = consecutive(np.where(row))
    for line in ret:
        if line.size > 200 or line.size < 30:
            row[line] = 0

The general idea of this is shown below (trying to isolate the LED - the middle image is the end result). Are there any built in ways to achieve this more efficiently?

image description