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()
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)
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)
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)
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)