The vtkDICOMImageReader flips the ordering of the rows for historical reasons: when in was written, the only way to display 2D images in VTK was via the vtkImageMapper, which assumes bottom-to-top ordering. And the vtkDICOMImageReader really hasn’t changed much since its original implementation 22 years ago, it really hasn’t kept up with the rest of VTK. The vtkDICOMImageReader ignores the image orientation matrix completely, which is why it’s always identity.
But if you create the vtkImageData yourself and set the orientation matrix correctly, then the volume rendering orientation should also be correct. Unlike the vtkDICOMImageReader, the vtkVolume/vtkVolumeMapper classes understand and apply the orientation.
One thing you have to watch for is how the slices in the DICOM are stacked. Let’s take a stack of axial slices as an example, where the first slice is at the superior end. If these are directly stored in the vtkImageData, then z-index = 0 is at the top, z-index = 1 is one z-spacing below that, etc. so the z-vector provided by the orientation matrix needs to be negative. So in this situation, the image orientation matrix would be:
/ 1 0 0 \
| 0 1 0 |
\ 0 0 -1 /
If the slices are stacked inferior-to-superior, however, the matrix for axial images is simply identity.
So when building the orientation matrix, the slice ordering needs to be taken into account. The first two columns of the matrix are always from the ImageOrientationPatient, and then the third column is either the cross product or the negative cross product of the first two columns.
In such situations it’s also possible to avoid using a negative cross product by reversing the ordering of the slices when building the image data, this requires using the ImagePositionPatient of the last slice rather than of the first slice.
Edit: At about the same time that I wrote vtk-dicom, I wrote a document called ImageOrientation.pdf about orienting DICOM in VTK. It’s outdated (from before vtkImageData had a Direction matrix) and it’s rough around the edges, but some of it is still relevant.