def _pick_slices(self):
        """
        Picks the slices to display in each dimension/view,
            skipping any empty slices (without any data at all).
        """

        self._slices = list()
        self._slices_by_dim = list()
        for view, ns_in_view in zip(self.view_set, self.num_slices):
            # discarding completely empty or almost empty slices.
            dim_size = self._image_shape[view]
            non_empty_slices = np.array([sl for sl in range(dim_size) if self._not_empty(view, sl)])

            # sampling according to the chosen strategy
            slices_dim = self._sample_slices_in_dim(view, ns_in_view, non_empty_slices)
            #  the following loop is needed to preserve order, while eliminating duplicates
            # list comprehension over a set(slices_dim) wouldn't preserve order
            uniq_slices = list()
            for sn in slices_dim:
                if (0 <= sn < dim_size) and sn not in uniq_slices:
                    uniq_slices.append(sn)

            self._slices_by_dim.append(slices_dim)
            # adding view and slice # at the same time..
            self._slices.extend([(view, sn) for sn in slices_dim])