int main(int argc, char **argv) { if(argc != 3) { cerr << "Usage: " << argv[0] << " <input volume file> <output volume file>" << endl; return 1; } try { VolMagickOpStatus status; VolMagick::setDefaultMessenger(&status); VolMagick::VolumeFileInfo volinfo; volinfo.read(argv[1]); VolMagick::createVolumeFile(argv[2], volinfo.boundingBox(), volinfo.dimension(), volinfo.voxelTypes(), volinfo.numVariables(), volinfo.numTimesteps(), volinfo.TMin(),volinfo.TMax()); for(unsigned int var=0; var<volinfo.numVariables(); var++) for(unsigned int time=0; time<volinfo.numTimesteps(); time++) { VolMagick::Volume vol; readVolumeFile(vol,argv[1],var,time); for(VolMagick::uint64 i = 0; i < vol.dimension().size(); i++) vol(i, vol.min() + ((vol.max() - vol(i))/(vol.max() - vol.min()))*(vol.max() - vol.min())); vol.desc(volinfo.name(var)); writeVolumeFile(vol,argv[2],var,time); } } catch(VolMagick::Exception &e) { cerr << e.what() << endl; } catch(std::exception &e) { cerr << e.what() << endl; } return 0; }
int main(int argc, char **argv) { if(argc < 6) { std:: cerr << "Usage: " << argv[0] << " <first volume> <second volume> < threshold> <output volume left> <output volume masked> \n"; std::cerr<<"second volume (son) is subset of first volume (mother), threshold is in [0,255], output masked is the volume in first volume with > threshold in the second volume. output volume left is the first volume - output volume masked. " << std::endl; return 1; } try { VolMagick::Volume inputVol; VolMagick::Volume inputVol2; VolMagick::readVolumeFile(inputVol,argv[1]); ///first argument is input volume VolMagick::readVolumeFile(inputVol2, argv[2]); /// second argument is mask volume float threshold = atof(argv[3]); VolMagick::Volume outputLeft; VolMagick::Volume outputMasked; if(!inputVol2.boundingBox().isWithin(inputVol.boundingBox()) ) throw VolMagick::SubVolumeOutOfBounds("The mask volume bounding box must be within the mother volume's bounding box."); outputLeft.voxelType(inputVol.voxelType()); outputLeft.dimension(inputVol.dimension()); outputLeft.boundingBox(inputVol.boundingBox()); outputMasked.voxelType(inputVol.voxelType()); outputMasked.dimension(inputVol.dimension()); outputMasked.boundingBox(inputVol.boundingBox()); float x, y, z; float fvalue; float minvalue = (float)inputVol2.min(); float maxvalue = (float)inputVol2.max(); for( int kz = 0; kz<inputVol.ZDim(); kz++) { for( int jy = 0; jy<inputVol.YDim(); jy++) { for( int ix = 0; ix<inputVol.XDim(); ix++) { z = inputVol.ZMin() + kz*inputVol.ZSpan(); y = inputVol.YMin() + jy*inputVol.YSpan(); x = inputVol.XMin() + ix*inputVol.XSpan(); if((z >= (float)inputVol2.ZMin()) && (z <= (float)inputVol2.ZMax()) && ( y >=(float)inputVol2.YMin()) && (y <= (float)inputVol2.YMax()) &&(x >= (float)inputVol2.XMin()) && (x <= (float)inputVol2.XMax()) ) { fvalue = 255.0*(inputVol2.interpolate(x,y,z)-minvalue)/(maxvalue-minvalue); if(fvalue > threshold) { outputMasked(ix,jy,kz, inputVol(ix,jy,kz)); outputLeft(ix,jy,kz, inputVol.min()); } else { outputMasked(ix,jy,kz, inputVol.min()); outputLeft(ix,jy,kz, inputVol(ix,jy,kz)); } } else { outputMasked(ix,jy,kz, inputVol.min()); outputLeft(ix,jy,kz, inputVol(ix,jy,kz)); } } } } VolMagick::createVolumeFile(outputLeft, argv[4]); VolMagick::createVolumeFile(outputMasked, argv[5]); std::cout<<"done!"<<std::endl; } catch(VolMagick::Exception &e) { std:: cerr << e.what() << std::endl; } catch(std::exception &e) { std::cerr << e.what() << std::endl; } return 0; }
int main(int argc, char **argv) { if(argc < 4) { std:: cerr << "Usage: " << argv[0] << " first volume - second volume = output volume, step \n"; return 1; } try { VolMagick::Volume inputVol; VolMagick::Volume inputVol2; VolMagick::Volume outputVol; VolMagick::readVolumeFile(inputVol,argv[1]); ///first argument is input volume VolMagick::readVolumeFile(inputVol2, argv[2]); /// second argument is mask volume VolMagick::VolumeFileInfo volinfo1; volinfo1.read(argv[1]); std::cout << volinfo1.filename() << ":" <<std::endl; VolMagick::VolumeFileInfo volinfo2; volinfo2.read(argv[2]); std::cout << volinfo2.filename() << ":" <<std::endl; std::cout<<"minVol1 , maxVol1: "<<volinfo1.min()<<" "<<volinfo1.max()<<std::endl;; std::cout<<"minVol2 , maxVol2: "<<volinfo2.min()<<" "<<volinfo2.max()<<std::endl; outputVol.voxelType(inputVol.voxelType()); outputVol.dimension(inputVol.dimension()); outputVol.boundingBox(inputVol.boundingBox()); std::cout<<"voxeltype "<<inputVol.voxelType()<<std::endl; int step = 1; if(argc==5) step= atoi(argv[argc-1]); outputVol= inputVol; for( int kz = 0; kz<inputVol2.ZDim(); kz++) { for( int jy = 0; jy<inputVol2.YDim(); jy++) for( int ix = 0; ix<inputVol2.XDim(); ix++) { if(inputVol2(ix, jy, kz)> inputVol2.min()) { for(int k=kz-step; k<=kz+step; k++) for(int j=jy-step; j<= jy+step; j++) for(int i=ix-step; i<= ix+step; i++) { if(i*j*k >=0 && i< inputVol2.XDim()-1 && j <inputVol2.YDim()-1 && k < inputVol2.ZDim()-1) outputVol(i, j, k, inputVol.min()); } } } } VolMagick::createVolumeFile(outputVol, argv[3]); } catch(VolMagick::Exception &e) { std:: cerr << e.what() << std::endl; } catch(std::exception &e) { std::cerr << e.what() << std::endl; } return 0; }
int main(int argc, char **argv) { if(argc < 2) { cerr << "Usage: " << argv[0] << " <volume file>" << endl; return 1; } try { VolMagick::VolumeFileInfo volinfo; VolMagick::VolumeCache volcache; VolMagickOpStatus status; VolMagick::setDefaultMessenger(&status); #if 0 VolMagick::Volume sphereVol; sphereVol.dimension(VolMagick::Dimension(128,128,128));//256,256,256)); sphereVol.voxelType(VolMagick::UChar); double center_x = sphereVol.XDim()/2.0; double center_y = sphereVol.YDim()/2.0; double center_z = sphereVol.ZDim()/2.0; double distance; for(unsigned int k=0; k<sphereVol.ZDim(); k++) for(unsigned int j=0; j<sphereVol.YDim(); j++) for(unsigned int i=0; i<sphereVol.XDim(); i++) { distance = sqrt(double((i-center_x)*(i-center_x)+ (j-center_y)*(j-center_y)+ (k-center_z)*(k-center_z))); //sphereVol(i,j,k, distance); if((distance > 15.0) && (distance < 20.0)) sphereVol(i,j,k, 20);//20.0+10*(distance-15.0)/(20.0-15.0)); if((distance >= 20.0) && (distance < 25.0)) sphereVol(i,j,k, 30);//50.0+10*(distance-50.0)/(55.0-50.0)); } VolMagick::writeVolumeFile(sphereVol, argv[1]); #endif #if 0 volinfo.read(argv[1]); cout << volinfo.filename() << ":" <<endl; cout << "Num Variables: " << volinfo.numVariables() << endl; cout << "Num Timesteps: " << volinfo.numTimesteps() << endl; cout << "Dimension: " << volinfo.XDim() << "x" << volinfo.YDim() << "x" << volinfo.ZDim() << endl; cout << "Bounding box: "; cout << "(" << volinfo.boundingBox().minx << "," << volinfo.boundingBox().miny << "," << volinfo.boundingBox().minz << ") "; cout << "(" << volinfo.boundingBox().maxx << "," << volinfo.boundingBox().maxy << "," << volinfo.boundingBox().maxz << ") "; cout << endl; double volmin = volinfo.min(), volmax = volinfo.max(); cout << "Min voxel value: " << volmin << endl; cout << "Max voxel value: " << volmax << endl; cout << "Voxel type: " << volinfo.voxelTypeStr() << endl; cout << "Volume name: " << volinfo.name() << endl << endl; #endif /* vol.dimension(VolMagick::Dimension(128,128,128)); vol.voxelType(VolMagick::Float); for(unsigned int i=0; i<128; i++) for(unsigned int j=0; j<128; j++) for(unsigned int k=0; k<128; k++) vol(i,j,k,double(i)/128.0); */ #if 0 if(argc > 2) { VolMagick::Volume vol; readVolumeFile(vol,argv[1]); vol.min(volinfo.min()); vol.max(volinfo.max()); //vol.map(0.0,255.0); //vol.voxelType(VolMagick::UChar); vol.resize(VolMagick::Dimension(512,512,512)); writeVolumeFile(vol,argv[2]); } #endif #if 0 if(argc > 2) { double realmin, realmax; VolMagick::Volume vol; std::vector<VolMagick::VolumeFileInfo> volinfos(argc-2); volinfos[0].read(argv[1]); realmin = volinfos[0].min(); realmax = volinfos[0].max(); for(unsigned int i=0; i<argc-2; i++) { volinfos[i].read(argv[i+1]); if(realmin > volinfos[i].min()) realmin = volinfos[i].min(); if(realmax < volinfos[i].max()) realmax = volinfos[i].max(); } cout << "Realmin: " << realmin << endl; cout << "Realmax: " << realmax << endl; createVolumeFile(argv[argc-1], volinfo.boundingBox(), volinfo.dimension(), std::vector<VolMagick::VoxelType>(1, VolMagick::UChar), 1, argc-2, 0.0, double(argc-3)); for(unsigned int i=0; i<argc-2; i++) { readVolumeFile(vol,argv[i+1]); //so the mapping is correct across all timesteps, we must set the real min and max across time vol.min(realmin); vol.max(realmax); vol.map(0.0,255.0); vol.voxelType(VolMagick::UChar); writeVolumeFile(vol,argv[argc-1],0,i); } } #endif //vector test #if 0 std::vector<VolMagick::Volume> vols(4); { char filename[256]; cout << "Testing RawV!" << endl; vols[0].voxelType(VolMagick::UChar); vols[0].desc("red"); vols[0].fill(130.0); vols[1].voxelType(VolMagick::UChar); vols[1].desc("green"); vols[1].fill(20.0); vols[2].voxelType(VolMagick::UChar); vols[2].desc("blue"); vols[2].fill(200.0); vols[3].voxelType(VolMagick::Float); vols[3].desc("alpha"); for(unsigned int k=0; k<vols[3].ZDim(); k++) for(unsigned int j=0; j<vols[3].YDim(); j++) for(unsigned int i=0; i<vols[3].XDim(); i++) vols[3](i,j,k, sqrt(float((i - (vols[3].XDim()/2.0))*(i - (vols[3].XDim()/2.0)) + (j - (vols[3].YDim()/2.0))*(j - (vols[3].YDim()/2.0)) + (k - (vols[3].ZDim()/2.0))*(k - (vols[3].ZDim()/2.0))))); VolMagick::writeVolumeFile(vols,"test.rawv"); } #endif //cout << "std::streamoff size: " << sizeof(std::streamoff) << endl; //ifstream test("flkajlff"); } catch(VolMagick::Exception &e) { cerr << e.what() << endl; } catch(std::exception &e) { cerr << e.what() << endl; } return 0; }
int main(int argc, char **argv) { if(argc < 3) { cerr << "Usage: " << argv[0] << " <volume file> <volume file>" << endl; return 1; } try { VolMagickOpStatus status; VolMagick::setDefaultMessenger(&status); #if 0 double realmin, realmax; VolMagick::Volume vol; std::vector<VolMagick::VolumeFileInfo> volinfos(argc-2); volinfos[0].read(argv[1]); realmin = volinfos[0].min(); realmax = volinfos[0].max(); for(unsigned int i=0; i<argc-2; i++) { volinfos[i].read(argv[i+1]); if(realmin > volinfos[i].min()) realmin = volinfos[i].min(); if(realmax < volinfos[i].max()) realmax = volinfos[i].max(); } cout << "Realmin: " << realmin << endl; cout << "Realmax: " << realmax << endl; createVolumeFile(argv[argc-1], volinfos[0].boundingBox(), volinfos[0].dimension(), std::vector<VolMagick::VoxelType>(1, VolMagick::UChar), 1, argc-2, 0.0, double(argc-3)); for(unsigned int i=0; i<argc-2; i++) { readVolumeFile(vol,argv[i+1]); //so the mapping is correct across all timesteps, we must set the real min and max across time vol.min(realmin); vol.max(realmax); vol.map(0.0,255.0); vol.voxelType(VolMagick::UChar); writeVolumeFile(vol,argv[argc-1],0,i); } #endif const double errThresh = 0.01; VolMagick::Volume vols[2]; VolMagick::readVolumeFile(vols[0],argv[1]); VolMagick::readVolumeFile(vols[1],argv[2]); if(vols[0].dimension() != vols[1].dimension()) throw VolMagick::VolumePropertiesMismatch("Volumes differ in dimension"); if(vols[0].boundingBox() != vols[1].boundingBox()) throw VolMagick::VolumePropertiesMismatch("Volumes differ in bounding box"); if(fabs(vols[0].min() - vols[1].min()) > errThresh) throw VolMagick::VolumePropertiesMismatch("Minimum voxel values differ"); if(fabs(vols[0].max() - vols[1].max()) > errThresh) throw VolMagick::VolumePropertiesMismatch("Maximum voxel values differ"); for(VolMagick::uint64 i = 0; i<vols[0].dimension().size(); i++) if(fabs(vols[0](i) - vols[1](i)) > errThresh) throw VolMagick::VolumePropertiesMismatch("Voxel values differ"); } catch(VolMagick::Exception &e) { cerr << e.what() << endl; } catch(std::exception &e) { cerr << e.what() << endl; } return 0; }
int main(int argc, char **argv) { if(argc < 5) { std:: cerr << "Usage: " << argv[0] << " inputfile NewMin NewMax outputFile \n"; return 1; } try { VolMagick::Volume inputVol; VolMagick::Volume inputVol2; VolMagick::Volume outputVol; VolMagick::readVolumeFile(inputVol,argv[1]); ///first argument is input volume // VolMagick::VolumeFileInfo volinfo1; // volinfo1.read(argv[1]); // std::cout << volinfo1.filename() << ":" <<std::endl; outputVol.voxelType(inputVol.voxelType()); outputVol.dimension(inputVol.dimension()); outputVol.boundingBox(inputVol.boundingBox()); std::cout<<"voxeltype: "<<inputVol.voxelType()<<std::endl; std::cout<<"InputVol min, max: " << inputVol.min() << ", " << inputVol.max() << std::endl; float newMin = atof(argv[2]); float newMax = atof(argv[3]); for( int kz = 0; kz<inputVol.ZDim(); kz++) { std::cout<<kz<<".."; for( int jy = 0; jy<inputVol.YDim(); jy++) for( int ix = 0; ix<inputVol.XDim(); ix++) { outputVol(ix,jy,kz, newMin + (inputVol(ix,jy,kz)-inputVol.min())*newMax/(inputVol.max()-inputVol.min()) ); } } VolMagick::createVolumeFile(argv[argc-1], outputVol); // VolMagick::writeVolumeFile(outputVol, argv[argc-1]); std::cout<< std::endl; } catch(VolMagick::Exception &e) { std:: cerr << e.what() << std::endl; } catch(std::exception &e) { std::cerr << e.what() << std::endl; } return 0; }