Extract subset of volume data set

`[Nx,Ny,Nz,Nv] = subvolume(X,Y,Z,V,limits) `

[Nx,Ny,Nz,Nv] = subvolume(V,limits)

Nv = subvolume(...)

`[Nx,Ny,Nz,Nv] = subvolume(X,Y,Z,V,limits) `

extracts a subset of the volume data set `V`

using
the specified axis-aligned `limits`

. ```
limits
= [xmin,xmax,ymin, ymax,zmin,zmax]
```

(Any `NaN`

s
in the limits indicate that the volume should not be cropped along
that axis.)

The arrays `X`

, `Y`

, and `Z`

define
the coordinates for the volume `V`

. The subvolume
is returned in `NV`

and the coordinates of the subvolume
are given in `NX`

, `NY`

, and `NZ`

.

`[Nx,Ny,Nz,Nv] = subvolume(V,limits) `

assumes the arrays `X`

, `Y`

, and `Z`

are
defined as

[X,Y,Z] = meshgrid(1:N,1:M,1:P)

where `[M,N,P] = size(V)`

.

`Nv = subvolume(...) `

returns
only the subvolume.

This example uses a data set that is a collection of MRI slices of a human skull. The data is processed in a variety of ways:

The 4-D array is squeezed (

`squeeze`

) into three dimensions and then a subset of the data is extracted (`subvolume`

).The outline of the skull is an isosurface generated as a patch (

`p1`

) whose vertex normals are recalculated to improve the appearance when lighting is applied (`patch`

,`isosurface`

,`isonormals`

).A second patch (

`p2`

) with interpolated face color draws the end caps (`FaceColor`

,`isocaps`

).A 100-element grayscale colormap provides coloring for the end caps (

`colormap`

).Adding lights to the right and left of the camera illuminates the object (

`camlight`

,`lighting`

).load mri D = squeeze(D); [x,y,z,D] = subvolume(D,[60,80,nan,80,nan,nan]); p1 = patch(isosurface(x,y,z,D, 5),... 'FaceColor','red','EdgeColor','none'); isonormals(x,y,z,D,p1); p2 = patch(isocaps(x,y,z,D, 5),... 'FaceColor','interp','EdgeColor','none'); view(3); axis tight; daspect([1,1,.4]) colormap(gray(100)) camlight right; camlight left; lighting gouraud

`isocaps`

| `isonormals`

| `isosurface`

| `reducepatch`

| `reducevolume`

| `smooth3`

Was this topic helpful?