topbottom[(0), 0:im.shape[1]] = np.argmax(im, axis=0)
topbottom[(0), im.shape[1]:] = im.shape[0] - 1 - np.argmax(np.flipud(im),
    axis=0)
mask = np.tile(np.any(im, axis=0), (2,))
xvalues = np.tile(np.arange(im.shape[1]), (1, 2))
return np.vstack([topbottom, xvalues])[:, (mask)].T
контур python для двоичной 2D-матрицы