1 Introduction

In tomography, absorption of beams with finite width are measured passing through a continuum of absorbing atoms. Absorption profiles are recorded in separate bins to be reconstructed on discrete lattices, and therefore the reconstructions must be approximated. For projections on a discrete array, each projected ray can simply sum the intensity at each array site. On a discrete array, projection angles are not continuous. The rays follow paths that link regularly staggered lattice sites. For a square lattice we take p steps across and q steps down to define angle p:q, where p and q are relatively prime, giving angle \(\theta _{p\text {:}q} = \tan ^{-1}(q/p)\). Sums of pixels that lie on p:q lines are known as Dirac-Mojette projections (also called X-rays). If p takes signed integer values, \(0^\circ \le \theta _{p\text {:}q} < 180^\circ \), the set of discrete angles native to a \(P \times Q\) pixel array can be found using the Farey-Harros set of fractions, as \(F_{PQ}\) [10].

An N-ghost is a set of signed elements placed in a particular pattern on a digital array. For each of N chosen discrete angles, any parallel rays that pass across these patterns will always intersect pairs of ghost elements that sum to exactly zero. By design, ghosts remain invisible when viewed from any of these N angles. Ghosts are also known as switching elements or the null set. A ghost whose \((+/-)\) values are scaled by a constant, or a ghost with its signs reversed, remains a ghost. Exact reconstruction of any array of elements from N (noise-free) projected views is possible if and only if their N-ghost extends beyond the array boundary when the ghost is superimposed over the array. This is the Katz criterion [12]. An N-ghost with any of its elements positioned outside the image space cannot be superimposed on the image and also remain invisible in all N directions. For a set of projections \(\{p_i\):\(q_i\}\), \(1 \le i \le N\), on a \(P \times Q\) image, the Katz criterion permits exact reconstruction of that array if and only if

$$\begin{aligned} \sum |p_i| \ge P \text { or } \sum |q_i| \ge Q. \end{aligned}$$
(1)

This paper considers methods to make tomographic reconstruction as difficult as possible. This inverts the usual problem of choosing sets of projection angles to facilitate image recovery. A ghost projection contains no new information about internal parts of an object, because the N projections of those parts, by design, have zero sums. An N-ghost adds nothing to the content for any object viewed in those N directions.

The aim here is to minimise the information that can be recovered from a partial set of array projections. The motivation of this work is to improve the security and privacy of information that is stored as partial sets of projected data in a distributed manner across multiple servers. For example, the RozoFS system [18], or for digital data communications via packet networks [17].

This paper is structured as follows: Sect. 2 provides a short review of the theory and construction of ghost projections, including methods to make minimal ghosts and methods for the exact reconstruction of images from discrete noise-free projections. Section 3 presents techniques to construct maximal N-ghosts and discusses their properties. It shows how well these ghosts mask given locations to inhibit exact array recovery. Section 4 discusses how this work might be extended to cover a wider range of practical applications, whilst Sect. 5 provides a brief summary and conclusion.

2 Ghost Review

2.1 Ghosts and Tomography

The notion of ghosts arose with the development of practical schemes to implement the inverse Radon transform. The central slice theorem makes it possible to recover internal object details from the intensity profiles of beams transmitted through the object at several angles. Tomography has found rapid application in diverse areas such as astrophysics, archaeology, biology, medical imaging, geology, part inspection for manufacturing and security scanning.

Early work on ghosts for image reconstruction in the digital domain (using discrete data from finite detector arrays) was presented by [12, 13, 15]. The non-unique mapping between arrays and their projections, in the mathematical sense, was flagged by G.G. Lorenz as early as 1949 [14], as did related work on the recovery of matrices from their row and column sums. It was soon realised that the uniqueness of a reconstructed image depends on the absence of ghosts (or switching elements). The presence of a ghost means the constraints of any finite projection set may be equally well satisfied by arbitrary multiple (i.e. differently ghosted) objects.

Recent work on ghosts has aimed to minimise the redundant information in sets of projections. The objective was to achieve shorter acquisition times and require fewer probing rays [5, 11]. Along the way, many valuable theoretical links have been established, such as the use of polynomials, cyclotomic equations and the Vandermonde matrix to represent discrete projection data. A wide variety of methods to reconstruct images from projections have been developed [1, 4, 16]. Work has been done to recover images from sets with several missing projections that has resulted in several image de-ghosting algorithms [6], or to recover data from lossy transmission of packets across communication networks [16].

2.2 Constructing N-Ghosts

An elementary ghost for a discrete angle p:q, denoted \(g_{p\text {:}q}\), is a pair of signed points separated by p columns and q rows. This is defined as

$$\begin{aligned} g_{p\text {:}q}(i,j) = {\left\{ \begin{array}{ll} +1 &{} \text { if } (i,j) = (0,0) \\ -1 &{} \text { if } (i,j) = (q,p) \\ 0 &{} \text { elsewhere. } \\ \end{array}\right. } \end{aligned}$$
(2)

A ghost G, over N directions can then be constructed through \(N-1\) discrete convolutions of N elementary ghosts.

$$\begin{aligned} G = g_{p_1\text {:}q_1} *... *g_{p_N\text {:}q_N} \end{aligned}$$
(3)

Geometrically, this corresponds to starting with a pair of oppositely signed points that define a ghost in the first chosen direction and then dilating, (add a translated copy with reversed signs) that ghost in the second selected direction. The result for the composite 2-ghost is then dilated in the third direction, and so on, for N directions. Figure 1 shows this process to make the 4-ghost with directions \(\{1{:}0, 0{:}1, 1{:}1, -1{:}1\}\).

The bounding polygon of the N-ghost, given by the convex hull of ghost points, is then comprised of 2N vectors from the angles p:q (including reflections). Therefore the convex hull of all N-ghosts built through convolutions of elementary ghosts are \(180^\circ \) symmetric. Ghosts defined through Eq. (3) are the minimal ghost configurations for given directions \(\{p_i\):\(q_i\}\) [11]. It is also possible to construct ghosts through other methods, such as using U-polygons [8]. However, in this work we consider only ghosts defined by (3) as these are the ghosts that arise as errors in Mojette reconstruction.

Fig. 1.
figure 1

Construction of an N-ghost by sequential dilation. Left to right: the 1D ghost with direction 1:0, dilated in direction 0:1, then 1:1 followed by \(-1\):1 to form the \(N = 4\) (minimal) ghost with 8 non-zero elements. Boxes show the location of the previous ghost before sign reversal and shift by p:q.

2.3 Reconstruction from Projections

The Dirac-Mojette projections of known, fixed elements of a discrete array create noise-free projections. Such arrays can be reconstructed exactly from a sufficient set of their Mojette projections using the Corner Based Inversion (CBI) method of [16]. This method begins by matching pixels to pairs of projection bins from the corners of the image. These rays contain one or two summed elements. We can iteratively subtract the un-summed pixel values from the summed bins to progressively unpack the content of projected values, working from the array edges into the array centre. CBI is not robust even for small, isolated levels of noise. Any error, even at one bin location, will propagate into all subsequent unpacked values, as studied in [2].

For a set of N sub-Katz projections, where \(\sum |p_i| < P\) and \(\sum |q_i| < Q\), the CBI method correctly unpacks as many image pixels as possible, leaving unknown values for the remaining pixels. The unrecovered data corresponds to the \((P-\sum |p_i|)(Q-\sum |q_i|)\) possible translations of N-ghost pixels inside the reconstructed image [3, 7]. Figure 2 demonstrates the simplest case where the N-ghost is the same size as the image, and therefore the errors are simply an embedded N-ghost with scaled values.

There are also additional “shadow” pixels located along the N directions that are blocked by a ghost element and cannot be further unpacked (see Fig. 4). All values that lie within the convex hull of translated ghost pixels are initially unsolved. Using ghost solving [6] or by assigning an arbitrary (hence usually incorrect) value to one of these ghost pixels, it is possible to re-apply CBI to remove many of the shadow pixels (Fig. 2d). The remaining unreconstructed pixels are, at least, all of the non-zero positions of the N-ghost. We wish to choose a set of N directions that maximises the number of these N-ghost pixels and thus maximise the number of unrecoverable array pixels.

Fig. 2.
figure 2

CBI for a \(5 \times 6\) array. (a) \(N = 5\) projections \(\{0{:}1, 1{:}0, 1{:}1, -1{:}1, 1{:}2\}\). (b) The original array values. (c) The raw CBI result using the array projections. Initially only the corner values of the array are solved. The ghost pixels for this \(N = 5\) set are underlined. (d) Setting (arbitrarily) the middle ghost pixel on the bottom row to 0 and re-applying CBI yields the remaining array values. Note the underlined values at the locations of the ghost elements are all wrong (here by either \(+9\) or \(-9\)). Here \(18/30 = 60\%\) of the array can be recovered, \(40\%\) cannot.

2.4 Minimal Ghosts

A projection ghost increases the pixel sum (by \(+v\)) of an object at one point along a ray, whilst equally decreasing the object sum (by \(-v\)) at some other point along the same ray, leaving the total number of pixels unchanged. Clearly the object has been changed, but the net projected view remains the same. To do this in N-directions requires at least N increments and N decrements, one pair for each of the N directions.

A 2D ghost has a finite area and enclosing perimeter. Each ghost element located on the perimeter of the ghost area must be linked to at least one other perimeter ghost element of the opposite sign, by a line \(p_i\):\(q_i\) in one of the N directions. The same must happen for the parallel ray passing through the opposite edge of the perimeter. The polygonal boundary formed by the vertices of the convex hull of any ghost is then symmetric and always contains at least 2N points. A minimal N-ghost thus traces the perimeter of a symmetric polygon, with 2N sides, made from just N (\(+1\)) and N (\(-1\)) entries. The area inside the perimeter of a minimal ghost polygon is free of ghost elements (Fig. 3a).

Minimal ghosts in 2D only exist for \(N = 1, 2, 3, 4, 6\) [9]. All other N-ghosts contain additional points on their polygon interiors. Near-minimal ghosts for \(N = 5\) and all \(N > 6\) contain as close as possible to 2N points. Near-minimal ghosts are comprised of a symmetric bounding perimeter points, but they always contain interior points, usually most of these have value \(\pm 1\). Fig. 3b shows the near-minimal case for \(N = 5\), this is the same ghost seen in Fig. 2.

Fig. 3.
figure 3

(a) A minimal ghost for \(N = 6\) has 6 (\(+1\)) and 6 (\(-1\)) points on its boundary and an empty interior. (b) A near-minimal ghost for \(N = 5\) contains 12 non-zero points, made up of 10 perimeter points and 2 points interior to the bounding polygon. (c) A 214 \(N = 16\) point near-minimal ghost for in a \(34 \times 30\) array, 108 (\(-1\)), 104 (\(+1\)) and 2 (\(+2\)) values, ghost volume 655.

Ghost elements that have the same sign when overlapped at any location by the dilation process can be summed to produce “grey” ghosts, with internal integer entries of \(\pm 2\), ..., \(\pm n\). The value of n for near-minimal ghosts grows rapidly with N [19]. Grey values where summed ghost points overlap are known as multiple points. For grey ghosts, we can find sets of angles that minimise the N-ghost “volume”. Here, the volume is computed as the area of the bounding 2N-sided polygon multiplied by its height. The height can be taken as the mean absolute grey scale of all the \({\pm }1\) to \({\pm }n\) entries (Fig. 4a). There is experimental evidence that ghost volumes have an asymptotic limiting density [19], i.e. that all 2D ghosts have a minimum 3D volume. The height of a grayscale ghost can be traded against the area of its footprint. Ghost elements that have opposite signs at any location when they are overlapped by the dilation process will cancel and thus can reduce the count of internal points (as shown in Fig. 3b and c).

The theoretical design and practical construction of projection sets that produce minimal ghosts is important. It helps to minimise the size and number of projections required to meet the Katz criterion and thus permit exact image reconstruction. Any set of N projections will fail to exactly reconstruct any image that is larger than the size of the corresponding N-ghost. As a minimal (or near-minimal) N-ghost contains at least 2N elements, at least 2N pixels of any image larger than this ghost cannot be (exactly) reconstructed. As the aim here is to maximise the number of un-reconstructed pixels, we need to build N-ghosts that contain not as few but as many ghost elements as possible.

3 Maximal Ghosts

Minimal (and near-minimal) ghosts are important for designing tomographic systems in which we would like to make reconstruction as easy as possible. However, for applications such as data fragmentation for distributed cloud storage, we wish to do the opposite. If any server is compromised, and insufficient projection data is obtained for an object, the amount of data that can be reconstructed should be minimised. Maximal ghosts contain exactly \(2^N\) ghost points, including multiple points. Therefore, they create a maximum amount of error in reconstructed data. These \(2^N\) points should also cover the maximum area of their bounding array, to minimise the regions of uniqueness that can be exactly reconstructed. Although the same amount of information is missing for any set of projections where \(\sum |p_i|\) and \(\sum |q_i|\) are equal, the data that can be exactly reconstructed without said information depends on the ghost constructed by the set of directions.

3.1 Maximal Ghost Examples

The maximal and minimal ghosts are identical for \(N = 1\) (for example \(\{0{:}1\}\)) and \(N = 2\) (for example \(\{0{:}1, 1{:}0\}\)). Any affine rotation of these ghosts is also a ghost. For \(N = 3\), a minimal ghost set is \(\{0{:}1, 1{:}0, 1{:}1\}\) or \(\{0{:}1, 1{:}0, -1{:}1\}\), with each 3-ghost having \(2 \cdot 3 = 6\) boundary points and no interior points. In contrast, the set \(\{0{:}1, 1{:}1, -1{:}1\}\) forms a compact 3-maximal ghost comprised of \(2^3 = 8\) points, with no holes in its interior.

We assume here that the original data is an array that fits inside an approximately square \(m \times m\) or \(m \times (m+1)\) region, where the more valuable content (when the data is image-like) can be reasonably expected to lie mostly across the centre region of the array. The maximal N-ghosts are made here to have matching size \(m \times m\), to overlap the given data as much as possible.

When the data is of text or other formats, long, thin, rectangular boxes, of size \(n \times m\), with \(n \ll m\) may be more appropriate. The shape of the maximal ghosts then needs to be adapted to accommodate the appropriate image shape. Any discrete angle has four-fold symmetric angles, p:q, \(-p\):q, q:p and \(-q\):p, except for the pairs \(\{0{:}1, 1{:}0, 1{:}1, -1{:}1\}\). Changing the symmetry of the p:q angles that are selected within the set N can be used to deliberately increase or shorten the growth of a ghost preferentially along the x- or y-axis, thus changing the aspect ratio of the part of the image they reconstruct.

The number of ghost elements double after each dilation into a new p:q direction. We can easily achieve the maximal count of ghost elements (\(2^N\)) by choosing p and q to be large enough that the ghosts never overlap under successive dilations. However, this approach also introduces large gaps between the dilated patterns. These gaps will reduce the masking efficiency as many un-ghosted internal pixels will be recoverable using simple CBI reconstruction. Our refined aim is then to have the maximal number of ghost elements ghost elements closely packed, with few or no holes inside the ghost perimeter.

3.2 Constructing Maximal N-Ghosts

The projection sets \(\{0{:}1, 1{:}0\}\) and \(\{1{:}0, 1{:}1, -1{:}1\}\) construct maximal N-ghosts for \(N = 2\) and \(N = 3\) respectively, as shown in Fig. 4. Therefore, we will use these ghost as starting points from which we can build larger N-ghosts such that overlapping points never cancel over successive dilation directions.

Fig. 4.
figure 4

(a) Maximal ghost for \(N = 2\) given by \(\{0{:}1, 1{:}0\}\). (b) Maximal ghost for \(N = 3\) given by \(\{1{:}0, 1{:}1, -1{:}1\}\).

Notice that the pattern of positive and negative values for the \(N = 2\) ghost form a checkerboard. We now look for another angle, such that convolving its elementary ghost does not result in the cancelling of any ghost points. This corresponds to finding the translation for which placing the \(N = 2\) ghost with reversed signs never aligns positive with negative points. If we choose p to be even, this occurs when q is odd. Likewise, if q is even, then p must be odd. Due to the alignment of positive and negative ghost points over the new dilation, the resulting \(N = 3\) ghost is also a checkerboard pattern (excluding zero points). Hence this can be repeated to obtain any maximal N-ghost with \(2^N\) points.

Similar reasoning can be used to construct N-ghosts starting from the set \(\{1{:}0, 1{:}1, -1{:}1\}\). For this set, the columns alternate between negative and positive. Therefore, to construct any maximal N-ghost starting from this set, we must ensure the reversed, translated columns align with similar signs. As long as p is chosen to be odd, then ghost points will never cancel. Equivalently, this can also be performed using \(\{0{:}1, 1{:}1, -1{:}1\}\), by choosing odd q.

For maximally inefficient reconstruction, we wish to cover as many possible pixel sites with non-zero ghost values. We have seen that the ghost from the projection set \(\{0{:}1, 1{:}0\}\) covers its entire bounding array with non-zero values due to the directions aligning with the lattice. Since for \(N > 2\) we can no longer choose directions that align with the grid, we must choose angles that approximate it. Therefore we choose \({\pm }p\):1 \({\pm }1\):q for the largest valid p and q possible without disconnecting ghost points. Then maximal ghosts for even N can be constructed using symmetric discrete projection sets

$$\begin{aligned} S_E = \{0\text {:}1, 1\text {:}0, 1\text {:}2n, -1\text {:}2n, 2n\text {:}1, -2n\text {:}1\} \end{aligned}$$
(4)

or subsets thereof for \(n \in \mathbb {N}\). Similarly, odd N maximal ghosts can be built using the projection set

$$\begin{aligned} S_O = \{0\text {:}1, 1\text {:}1, -1\text {:}1, 1\text {:}(2n+1), -1\text {:}(2n+1), (2n+1)\text {:}1, -(2n+1)\text {:}1\} \end{aligned}$$
(5)

or any subsets with \(n \in \mathbb {N}\). \(S_E\) and \(S_O\) in their entirety produce ghosts that are extremely compact and dense. They also result in some ambiguity in choice of angles when \(N \ne 4n+2\) for even N, and \(N \ne 4n+3\) for odd N. Therefore we offer some subsets \(G_N\) as examples, to produce approximately square ghosts. For even N, we can choose

$$\begin{aligned} G_N&= \{0\text {:}1, 1\text {:}0, 1\text {:}2, 2\text {:}1, 1\text {:}4, 4\text {:}1, ..., 1\text {:}(N-2), (N-2)\text {:}1\} \end{aligned}$$
(6)
$$\begin{aligned} \text {or } G_N&= \{0\text {:}1, 1\text {:}0, 1\text {:}2, -2\text {:}1, 1\text {:}4, -4\text {:}1, ..., 1\text {:}(N-2), -(N-2)\text {:}1\}. \end{aligned}$$
(7)

Note (6) and (7) result in square \(m \times m\) ghosts. For odd N maximal ghosts, we choose a similar symmetric pattern that give \(m \times (m+1)\) ghosts.

$$\begin{aligned} G_N&= \{0\text {:}1, 1\text {:}1, -1\text {:}1, 1\text {:}3, 3\text {:}1, 1\text {:}5, 5\text {:}1, ..., 1\text {:}(N-2), (N-2)\text {:}1\} \end{aligned}$$
(8)
$$\begin{aligned} \text {or } G_N&= \{0\text {:}1, 1\text {:}1, -1\text {:}1, 1\text {:}3, -3\text {:}1, 1\text {:}5, -5\text {:}1, ..., 1\text {:}(N-2), -(N-2)\text {:}1\} \end{aligned}$$
(9)

The choice (6) constructs ghosts that have no holes inside the 2N point symmetric polygon that forms the boundary of any N-ghost. All interior points are filled by non-zero ghost elements. Using choice (7) inserts just four interior holes, these holes always lie near the corners of the polygon. Examples of these maximal ghosts, for \(N = 8\) and \(N = 9\), are shown in Fig. 5. For odd N, the situation is similar, although the boundaries are less sharply defined, with the arrays from option (9) having 8 interior holes. As N grows, the largest angle in the 2N-polygon perimeter closer approximates 1:0 (or 0:1). Hence the ghost boundary will approach the array boundary, and the fill will approach \(100\%\).

Fig. 5.
figure 5

Maximal 8-ghosts as \(17 \times 17\) arrays, and maximal 9-ghosts as \(21 \times 22\) arrays with. (a) \(G_8\) using Eq. (6), has 191 non-zero elements. (b) \(G_8\) using Eq. (7), has 205 non-zero elements, with 4 holes. (c) \(G_9\) using Eq. (8), contains 312 non-zero elements. (d) \(G_9\) using Eq. (9), contains 322 non-zero elements, with 8 interior holes near the corners of the array.

Tables 1 and 2 give the image sizes and percentage of the array that the N-ghost fills for even and odd N, respectively. The size of the array can be computed from the sum of the absolute values of p and q values in the angle set. For N even (6), (7), this sum gives array size \(m = N(N - 2)/4 + (N - 2)/2 + 2 = (N^2 + 4)\). Similarly \(m = (N^2 + 5)/4\) for N odd (8), (9). The entry “count” in Tables 1 and 2 is the number of non-zero elements in the ghost, the fill factor is the percentage of non-zero pixels in the full array. The pair of rows in the table at each N show results using choice (6) then (7) for even N, and (8) then (9) for odd N.

Table 1. N-ghost array sizes, redundancy and fill factors for even \(N = 4\) to \(N = 14\).
Table 2. N-ghost array sizes, redundancy and fill factors for odd \(N = 5\) to \(N = 15\).

To maintain closely spaced elements with few holes, the overlap of ghost elements will also increase the grey level of the ghost. The range of greys in a ghost must be less than the grey values in the image. The sum of the ghost values is always zero. The sum of the absolute values on the ghost array is \(2^N\) as elements at each location accumulate from the overlap of N successive dilations.

3.3 Binary Maximal Ghosts

Maximal N-ghosts with an alphabet of just \(\pm 1\) elements can also be constructed. Here the 7 angles were chosen, by eye, to place successive dilations so they do not cause any overlap between ghosts points while not creating holes. This dense set for \(N = 7\), p:q = \(\{0{:}1, 1{:}0, 1{:}2, -1{:}2, -3{:}2, 5{:}2, -1{:}6\}\), has array size \(16 \times 13\), where values are all \(-1/{+}1\). This array has \(2^7 = 128\) non-zero elements, achieving a \(61.54\%\) fill of the array area. The angle \(-11\):2 can be appended to this set to construct a maximal binary 8-ghost. It can be seen in Fig. 6 that this translates the binary 7-ghost to fit with itself in a jigsaw-like fashion to produce a fill of \(59.26\%\). It is not yet known if maximal binary ghosts exist for all N.

Fig. 6.
figure 6

A maximal 7-ghost, p:q = \(\{0{:}1, 1{:}0, 2{:}1, -2{:}1, 2{:}3, 6{:}1, -10{:}1\}\) (left), comprised of \(128 \pm 1\) points. The direction \(-11\):2 is added to give a maximal binary 8-ghost (right).

4 Further Work

We have, so far, only tested how these N-ghosts affect array recovery using the CBI reconstruction method. We next want to apply several statistical/iterative inversion methods to evaluate the potential for “exact” or nearly-exact recoverability of arrays from “ghosted” partial sets of projection data. In many cases, the stored data will have already been encrypted, so any inversion process is unlikely to be aided by using structural or statistical clues from any sections of partially recovered data. However the part played by the range of data values needs further scrutiny, as the constraints on valid reconstructions are tighter (even for random arrays) when the data values are drawn from a restricted alphabet, for example for binary or ternary arrays.

The maximal N-ghost examples given in Fig. 6 was built by hand. It would be useful to devise an algorithm to produce ghosts for any N that are comprised of only \(-1/{+}1\) values and at the same time ensure the lowest possible number of zero elements (holes) occur inside the bounding polygon. It may be possible to also control the location of holes, as they too can be seen as parts of a complementary ghost structure that is enclosed by the same N angles.

When two or more partial sets of projections that are kept on separate servers are pooled, exact and efficient recovery of the exact data must still be possible. Individual sets of N-ghosts must then be distinct, but compatible in the joint reconstruction sense. Maximal ghosts for even N made from Eqs. (6) or (7) would pair well with the odd ghosts for N \(\pm 1\) (via Eqs. (8) or (9)), as they have just the 0:1 projection in common and these partial sets are all similarly robust.

5 Summary

This paper considers methods to assemble sets of N discrete projections \(\{p_i\):\(q_i\}\) that are insufficient for an exact reconstruction, and structured to yield the least possible information about the original array. The unrecoverable pixels of an array are shown to be the elements of the locally-held ghost for those N directions. The geometry of elementary ghost convolutions is used to construct maximal N-ghosts that are comprised of symmetric sets of discrete angles built from 1:n for \(n < N\), where n and N are either odd or even. These ghosts maximise the fraction (f) of an array that is not able to be reconstructed from those N projected views. In practice, we can assemble sets where \(f \ge 60\%\) for \(N \ge 4\).