[MINC-users] miset_dimension_apparent_voxel_order - should it not affect miget_voxel_value_hyperslab?

Soren Christensen sorench at gmail.com
Sat Sep 15 09:23:43 EDT 2012


Hi,
 Sorry for the multiple questions - this is a separate issue so I am
posting separately.
I am trying to use miset_dimension_apparent_voxel_order hoping it
could give my data with a fixed relationship between array direction
and spatial direction.
When I use it though, there seems to be no difference to the voxel
output. I had expected a "flip".
Where am I going wrong here?

This is what I do:
give my all y of xrow 16 in native ordering:
-2048 -2048 -2048 -1918 -1789 -1659 -1528 -1405 -1251 -1191 -996 -1168
-1237 -1025 -954 -1156 -1498 -1631 -2048 -2048 -2048 -2048 -2048 -2048
-2048 -2048 -2048 -2048 -2048 -2048 -2048 -2048
dimname is yspace
step is -1.844

now attempt to reverse y by req y to come out positive by using
miset_dimension_apparent_voxel_order.  Output is now:
-2048 -2048 -2048 -1918 -1789 -1659 -1528 -1405 -1251 -1191 -996 -1168
-1237 -1025 -954 -1156 -1498 -1631 -2048 -2048 -2048 -2048 -2048 -2048
-2048 -2048 -2048 -2048 -2048 -2048 -2048 -2048   (identical)
step is -1.844  (also not changed)


(I had thought the second array would come out flipped)


mincinfo:
image dimensions: time zspace yspace xspace
    dimension name         length         step        start
    --------------         ------         ----        -----
    time                       12            1            0
    zspace                     80            2         -539
    yspace                     32       -1.844      18.6907
    xspace                     32       -1.844      28.6905



 Code:
 mihandle_t minc_volume;
 int result = miopen_volume(fname.toStdString().c_str(),
MI2_OPEN_READ, &minc_volume);


    mitype_t volume_data_type[1];
    miget_data_type(minc_volume,volume_data_type );


    size_t start[4]={0,0,0,16};
    size_t end[4]={1,1,32,1};

    //get y row
    signed short data[32]={0};

    result=miget_voxel_value_hyperslab(minc_volume,volume_data_type[0],start,end,static_cast<void*>(data));

     for (int k=0; k<32; k++)
     {
         std::cout << data[k] << " ";

     }
     std::cout <<  std::endl;

     //what is the y step?
     midimhandle_t dimensions[4];
     result=miget_volume_dimensions(minc_volume,
MI_DIMCLASS_SPATIAL,MI_DIMATTR_ALL,MI_DIMORDER_FILE, 4, dimensions);

     char *name_ptr[1];
     miget_dimension_name(dimensions[2], name_ptr );
     std::cout << "dimname is " << *name_ptr;
     std::cout  << std::endl;
     double step[1];
     miget_dimension_separation(dimensions[2],MI_ORDER_FILE,step);

     std::cout << "step is " << step[0] << std::endl;

     std::cout << "now attempt to reverse y by req y to come out positive ";
     result=miset_dimension_apparent_voxel_order(dimensions[2],MI_POSITIVE);

     result=miget_voxel_value_hyperslab(minc_volume,volume_data_type[0],start,end,static_cast<void*>(data));

      for (int k=0; k<32; k++)
      {
          std::cout << data[k] << " ";

      }
      std::cout <<  std::endl;

     miget_dimension_separation(dimensions[2],MI_ORDER_FILE,step);

     std::cout << "step is " << step[0] << std::endl;


More information about the MINC-users mailing list