I tried that first, and it didn't solve the problem.  Just rolled back the `.copy()` statements and tried it again, and the shape of a 3d input image still has a singleton extra dimension added after execution.  This is what I'm attempting, and it isn't working:
```python
# Parse input data
if not multichannel:
    # We work with 4-D arrays of floats
    assert data.ndim > 1 and data.ndim < 4, 'For non-multichannel input, \
                                             data must be of dimension 2 \
                                             or 3.'
    dims = data.shape
    data = np.atleast_3d(img_as_float(data))[..., np.newaxis]
else:
    dims = data[..., 0].shape
    assert multichannel and data.ndim > 2, 'For multichannel input, data \
                                            must have >= 3 dimensions.'
    data = img_as_float(data)
    if data.ndim == 3:
        data = data[..., np.newaxis].transpose((0, 1, 3, 2))
```
Oddly this wasn't happening for 2D inputs; I think `np.atleast_3d` makes a safe copy if `data` isn't 3D, which is why this doesn't happen for 2D images.