I'm running into difficulties trying to run this image segmentation code.
The idea I have is to take an image such as:
https://i.stack.imgur.com/JFOrs.jpg
and extract all the black squigglies and save each individual squiggly as its own image.
It seems like the code is working, but it's not segmenting my images for some reason.
The error I am getting is: ('segments detected:', 0) 
This is the code Im using:
import os, sys  
import numpy as np  
from scipy import ndimage as ndi  
from scipy.misc import imsave  
import matplotlib.pyplot as plt  
from skimage.filters import sobel, threshold_local  
from skimage.morphology import watershed  
from skimage import io  
def open_image(name):  
    filename = os.path.join(os.getcwd(), name)  
    return io.imread(filename, as_grey=True)  
def adaptive_threshold(image):  
    print(type(image))  
    print(image)  
    block_size = 41  
    binary_adaptive = threshold_local(image, block_size, offset=10)  
    binary_adaptive = np.asarray(binary_adaptive, dtype=int)  
    return np.invert(binary_adaptive) * 1.  
def segmentize(image):  
    # make segmentation using edge-detection and watershed  
    edges = sobel(image)  
    markers = np.zeros_like(image)  
    foreground, background = 1, 2  
    markers[image == 0] = background  
    markers[image == 1] = foreground  
    ws = watershed(edges, markers)  
    return ndi.label(ws == foreground)  
def find_segment(segments, index):  
    segment = np.where(segments == index)  
    shape = segments.shape  
    minx, maxx = max(segment[0].min() - 1, 0), min(segment[0].max() + 1, shape[0])  
    miny, maxy = max(segment[1].min() - 1, 0), min(segment[1].max() + 1, shape[1])  
    im = segments[minx:maxx, miny:maxy] == index  
    return (np.sum(im), np.invert(im))  
def run(f):  
    print('Processing:', f)  
    image = open_image(f)  
    processed = adaptive_threshold(image)  
    segments = segmentize(processed)  
    print('Segments detected:', segments[1])  
    seg = []  
    for s in range(1, segments[1]):  
        seg.append(find_segment(segments[0], s))  
    seg.sort(key=lambda s: -s[0])    
    for i in range(len(seg)):  
        imsave('segments/' + f + '_' + str(i) + '.png', seg[i][1])  
folder = os.path.join(os.getcwd(), 'segments')  
os.path.isfile(folder) and os.remove(folder)  
os.path.isdir(folder) or os.mkdir(folder)  
for f in sys.argv[1:]:  
    run(f)  
I'll also mention I'm running this Python script from within Processing 3.3.5 using this as my sketch file:
import deadpixel.command.Command;  
static final String BASH =  
  platform == WINDOWS? "cmd /C " :  
  platform == MACOSX? "open" : "xdg-open";  
static final String CD = "cd ", PY_APP = "python ";  
static final String AMP = " && ", SPC = " ";  
static final String PY_DIR = "scripts/";  
//static final String PY_FILE = PY_DIR + "abc.py";  
static final String PY_FILE = PY_DIR + "segmenting.py";  
static final String PICS_DIR = "images/";  
static final String PICS_EXTS = "extensions=,png,jpg,jpeg,gif";  
void setup() {  
  final String dp = dataPath(""), py = dataPath(PY_FILE);  
  final String prompt = BASH + CD + dp + AMP + PY_APP + py;  
  final String pd = dataPath(PICS_DIR);  
  final String pics = join(listPaths(pd, PICS_EXTS), SPC);  
  final Command cmd = new Command(prompt + SPC + pics);  
  println(cmd.command, ENTER);  
  println("Successs:", cmd.run(), ENTER);  
  printArray(cmd.getOutput());  
  exit();  
}   
And this in a new tab in processing:
https://github.com/GoToLoop/command/blob/patch-1/src/deadpixel/command/Command.java 
 
    
