The typedef typedef itk::Matrix < double, 3, 3 > DirectionType; is defined twice: here and here, hence a compilation error.
Possible fix:
In file direction_cosines.h delete DirectionType definition and add itk_image.h header
....
#include "itk_image.h"
#include "plm_math.h"
#define DIRECTION_COSINES_IDENTITY_THRESH 1e-9
#define DIRECTION_COSINES_EQUALITY_THRESH 1e-9
namespace itk { template<class T, unsigned int NRows, unsigned int NColumns> class Matrix; }
//typedef itk::Matrix < double, 3, 3 > DirectionType;
....