Re `multichannel`, that defeats the purpose, which is getting it to not fall over when I forget to set `multichannel`. How about the following: set the default value of `multichannel` to `None`. If `None`, then deduce dimension automatically, and raise an error if ambiguous. Otherwise, trust that the user set it correctly.

Re memoryviews, how come when I do this:

```
 ~/projects/skimage (3d-slic)$ git diff
diff --git a/skimage/segmentation/_slic.pyx b/skimage/segmentation/_slic.pyx
index d668f08..725afcb 100644
--- a/skimage/segmentation/_slic.pyx
+++ b/skimage/segmentation/_slic.pyx
@@ -13,10 +13,10 @@ from ..util import img_as_float, regular_grid
 from ..color import rgb2lab, gray2rgb


-def _slic_cython(cnp.ndarray[dtype=cnp.float_t, ndim=4] image_zyx,
-                 cnp.ndarray[dtype=cnp.intp_t, ndim=3] nearest_mean,
-                 cnp.ndarray[dtype=cnp.float_t, ndim=3] distance,
-                 cnp.ndarray[dtype=cnp.float_t, ndim=2] means,
+def _slic_cython(double[:, :, :, ::1] image_zyx,
+                 int[:, :, ::1] nearest_mean,
+                 double[:, :, ::1] distance,
+                 double[:, ::1] means,
                  float ratio, int max_iter, int n_segments):
     """Helper function for SLIC segmentation."""
```

I get this:

```
cython -o /Volumes/Projects/skimage/skimage/segmentation/_slic.c /Volumes/Projects/skimage/skimage/segmentation/_slic.pyx

Error compiling Cython file:
------------------------------------------------------------
...
                 float ratio, int max_iter, int n_segments):
    """Helper function for SLIC segmentation."""

    # initialize on grid:
    cdef Py_ssize_t depth, height, width
    shape = image_zyx.shape
                    ^
------------------------------------------------------------

skimage/segmentation/_slic.pyx:25:21: Cannot convert 'Py_ssize_t [8]' to Python object

Error compiling Cython file:
------------------------------------------------------------
...
    n_means = means.shape[0]
    cdef Py_ssize_t i, k, x, y, z, x_min, x_max, y_min, y_max, z_min, z_max, \
            changes
    cdef double dist_mean

    cdef cnp.float_t* image_p = <cnp.float_t*> image_zyx.data
```

And more such errors?