Пример #1
0
    def __onCrop(self, ev):
        """Crops the selected image. This is done via a call to
        :func:`.copyoverlay.copyImage`. Also calls :meth:`__onCancel`,
        to finish cropping.
        """

        overlayList = self.overlayList
        displayCtx  = self.displayCtx
        overlay     = displayCtx.getSelectedOverlay()
        display     = displayCtx.getDisplay(overlay)
        name        = '{}_roi'.format(display.name)
        cropBox     = self.__profile.cropBox
        roi         = [cropBox.x,
                       cropBox.y,
                       cropBox.z]

        if overlay.ndim >= 4:
            roi.append(self.__volumeWidget.GetRange())

        copyoverlay.copyImage(
            overlayList,
            displayCtx,
            overlay,
            createMask=False,
            copy4D=True,
            copyDisplay=True,
            name=name,
            roi=roi)

        self.__onCancel()
Пример #2
0
def _test_copyImage_3d(panel, overlayList, displayCtx):
    img3d = fslimage.Image(np.random.randint(1, 255, (20, 20, 20)),
                           name='img3d')

    overlayList.append(img3d)

    # standard copy. Make sure
    # display settings are copied
    displayCtx.getDisplay(img3d).alpha = 75
    displayCtx.getOpts(img3d).gamma = 0.5
    copyoverlay.copyImage(overlayList, displayCtx, img3d, name='my cool copy')
    assert len(overlayList) == 2
    # the copy should be inserted directly
    # after the original in the list
    copy = overlayList[1]
    assert np.all(img3d[:] == copy[:])
    assert displayCtx.getDisplay(copy).alpha == 75
    assert displayCtx.getDisplay(copy).name == 'my cool copy'
    assert displayCtx.getOpts(copy).gamma == 0.5
    overlayList.remove(copy)

    # without copying display settings
    copyoverlay.copyImage(overlayList, displayCtx, img3d, copyDisplay=False)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(img3d[:] == copy[:])
    assert displayCtx.getDisplay(copy).alpha == 100
    assert displayCtx.getOpts(copy).gamma == 0
    overlayList.remove(copy)

    # empty mask
    copyoverlay.copyImage(overlayList, displayCtx, img3d, createMask=True)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(copy.shape == img3d.shape)
    assert np.all(copy[:] == 0)
    overlayList.remove(copy)

    # new data (createMask should be ignored)
    data = np.random.randint(1, 100, img3d.shape)
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img3d,
                          createMask=True,
                          data=data)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(copy.shape == img3d.shape)
    assert np.all(copy[:] == data)
    overlayList.remove(copy)

    # roi
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img3d,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (5, 5, 5)
    assert np.all(copy[:] == img3d[5:10, 5:10, 5:10])
    overlayList.remove(copy)

    # roi, expanding FOV
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img3d,
                          roi=((-5, 25), (-5, 25), (-5, 25)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (30, 30, 30)
    assert np.all(copy[5:25, 5:25, 5:25] == img3d[:, :, :])
    overlayList.remove(copy)
Пример #3
0
def _test_copyImage_4d(panel, overlayList, displayCtx):

    img4d = fslimage.Image(np.random.randint(1, 255, (20, 20, 20, 20)),
                           name='img4d')

    overlayList.append(img4d)

    # 4D
    copyoverlay.copyImage(overlayList, displayCtx, img4d)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(copy[:] == img4d[:])
    overlayList.remove(copy)

    # 4D mask
    copyoverlay.copyImage(overlayList, displayCtx, img4d, createMask=True)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(copy.shape == img4d.shape)
    assert np.all(copy[:] == 0)
    overlayList.remove(copy)

    # 4D current volume
    displayCtx.getOpts(img4d).volume = 6
    copyoverlay.copyImage(overlayList, displayCtx, img4d, copy4D=False)
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert np.all(copy[:] == img4d[..., 6])
    overlayList.remove(copy)

    # roi 4D, unspecified 4th dim bounds
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (5, 5, 5, 20)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, :])
    overlayList.remove(copy)

    # roi 4D, specified 4th dim bounds
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          roi=((5, 10), (5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (5, 5, 5, 5)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, 5:10])
    overlayList.remove(copy)

    # roi 4D, current volume
    displayCtx.getOpts(img4d).volume = 10
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          copy4D=False,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (5, 5, 5)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, 10])
    overlayList.remove(copy)

    # roi, 4D, expanding FOV
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          roi=((-5, 25), (-5, 25), (-5, 25)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (30, 30, 30, 20)
    assert np.all(copy[5:25, 5:25, 5:25, :] == img4d[:, :, :, :])
    overlayList.remove(copy)

    # roi, 4D, current vol
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          copy4D=False,
                          roi=((-5, 25), (-5, 25), (-5, 25)))
    assert len(overlayList) == 2
    copy = overlayList[1]
    assert tuple(copy.shape) == (30, 30, 30)
    assert np.all(copy[5:25, 5:25, 5:25] == img4d[:, :, :, 10])
    overlayList.remove(copy)
Пример #4
0
def _test_copyImage_multiValued(panel, overlayList, displayCtx):

    complex = make_complex()
    rgb = make_rgb()

    overlayList.extend((complex, rgb))

    # normal copy - complex
    copyoverlay.copyImage(overlayList, displayCtx, complex)
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert complex.dtype == copy.dtype
    assert np.all(copy[:] == complex[:])
    overlayList.remove(copy)

    # normal copy - rgb
    copyoverlay.copyImage(overlayList, displayCtx, rgb)
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert rgb.dtype == copy.dtype
    assert np.all(rgb[:] == copy[:])
    overlayList.remove(copy)

    # copy real component
    copyoverlay.copyImage(overlayList, displayCtx, complex, channel='real')
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert np.all(copy[:] == complex[:].real)
    overlayList.remove(copy)

    # copy imag component
    copyoverlay.copyImage(overlayList, displayCtx, complex, channel='imag')
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert np.all(copy[:] == complex[:].imag)
    overlayList.remove(copy)

    # copy r component
    copyoverlay.copyImage(overlayList, displayCtx, rgb, channel='R')
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy[:] == rgb[:]['R'])
    overlayList.remove(copy)

    # copy g component
    copyoverlay.copyImage(overlayList, displayCtx, rgb, channel='G')
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy[:] == rgb[:]['G'])
    overlayList.remove(copy)

    # copy b component
    copyoverlay.copyImage(overlayList, displayCtx, rgb, channel='B')
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy[:] == rgb[:]['B'])
    overlayList.remove(copy)
Пример #5
0
def _test_copyImage(panel, overlayList, displayCtx):
    img3d = fslimage.Image(np.random.randint(1, 255, (20, 20, 20)))
    img4d = fslimage.Image(np.random.randint(1, 255, (20, 20, 20, 20)))

    overlayList.extend((img3d, img4d))

    # standard copy. Make sure
    # display settings are copied
    displayCtx.getDisplay(img3d).alpha = 75
    displayCtx.getOpts(img3d).gamma = 0.5
    copyoverlay.copyImage(overlayList, displayCtx, img3d, name='my cool copy')
    assert len(overlayList) == 3
    # the copy should be inserted directly
    # after the original in the list
    copy = overlayList[1]
    assert np.all(img3d[:] == copy[:])
    assert displayCtx.getDisplay(copy).alpha == 75
    assert displayCtx.getDisplay(copy).name == 'my cool copy'
    assert displayCtx.getOpts(copy).gamma == 0.5
    overlayList.remove(copy)

    # without copying display settings
    copyoverlay.copyImage(overlayList, displayCtx, img3d, copyDisplay=False)
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert np.all(img3d[:] == copy[:])
    assert displayCtx.getDisplay(copy).alpha == 100
    assert displayCtx.getOpts(copy).gamma == 0
    overlayList.remove(copy)

    # empty mask
    copyoverlay.copyImage(overlayList, displayCtx, img3d, createMask=True)
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert np.all(copy.shape == img3d.shape)
    assert np.all(copy[:] == 0)
    overlayList.remove(copy)

    # 4D
    copyoverlay.copyImage(overlayList, displayCtx, img4d)
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy[:] == img4d[:])
    overlayList.remove(copy)

    # 4D mask
    copyoverlay.copyImage(overlayList, displayCtx, img4d, createMask=True)
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy.shape == img4d.shape)
    assert np.all(copy[:] == 0)
    overlayList.remove(copy)

    # 4D current volume
    displayCtx.getOpts(img4d).volume = 6
    copyoverlay.copyImage(overlayList, displayCtx, img4d, copy4D=False)
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert np.all(copy[:] == img4d[..., 6])
    overlayList.remove(copy)

    # roi
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img3d,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 3
    copy = overlayList[1]
    assert tuple(copy.shape) == (5, 5, 5)
    assert np.all(copy[:] == img3d[5:10, 5:10, 5:10])
    overlayList.remove(copy)

    # roi 4D, unspecified 4th dim bounds
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert tuple(copy.shape) == (5, 5, 5, 20)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, :])
    overlayList.remove(copy)

    # roi 4D, specified 4th dim bounds
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          roi=((5, 10), (5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert tuple(copy.shape) == (5, 5, 5, 5)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, 5:10])
    overlayList.remove(copy)

    # roi 4D, current volume
    displayCtx.getOpts(img4d).volume = 10
    copyoverlay.copyImage(overlayList,
                          displayCtx,
                          img4d,
                          copy4D=False,
                          roi=((5, 10), (5, 10), (5, 10)))
    assert len(overlayList) == 3
    copy = overlayList[2]
    assert tuple(copy.shape) == (5, 5, 5)
    assert np.all(copy[:] == img4d[5:10, 5:10, 5:10, 10])
    overlayList.remove(copy)