#include <gdcmHeaderHelper.h>
Public Member Functions | |
gdcmSerieHeaderHelper () | |
~gdcmSerieHeaderHelper () | |
void | AddFileName (std::string filename) |
add a gdcmFile to the list based on file name | |
void | AddGdcmFile (gdcmHeaderHelper *file) |
add a gdcmFile to the list | |
void | SetDirectory (std::string dir) |
Sets the Directory. | |
void | OrderGdcmFileList () |
Sorts the File List. | |
gdcmHeaderHelper * | GetGdcmHeader () |
std::list< gdcmHeaderHelper * > & | GetGdcmFileList () |
Gets the *coherent* File List. | |
Private Member Functions | |
bool | ImagePositionPatientOrdering () |
sorts the images, according to their Patient Position We may order, considering : -Image Number -Image Position Patient -More to come :) | |
bool | ImageNumberOrdering () |
sorts the images, according to their Image Number | |
bool | FileNameOrdering () |
sorts the images, according to their File Name | |
Private Attributes | |
std::list< gdcmHeaderHelper * > | CoherentGdcmFileList |
|
Definition at line 121 of file gdcmHeaderHelper.h.
00121 {}; |
|
Definition at line 584 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList.
00584 { 00586 for (std::list<gdcmHeaderHelper*>::iterator it = CoherentGdcmFileList.begin(); 00587 it != CoherentGdcmFileList.end(); it++) 00588 { 00589 delete *it; 00590 } 00591 CoherentGdcmFileList.clear(); 00592 } |
|
add a gdcmFile to the list based on file name
Definition at line 604 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList.
00604 { 00605 gdcmHeaderHelper *GdcmFile = new gdcmHeaderHelper( filename.c_str() ); 00606 this->CoherentGdcmFileList.push_back( GdcmFile ); 00607 } |
|
add a gdcmFile to the list
Definition at line 614 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList.
00614 { 00615 this->CoherentGdcmFileList.push_back( file ); 00616 } |
|
sorts the images, according to their File Name
Definition at line 845 of file gdcmHeaderHelper.cxx. Referenced by OrderGdcmFileList().
00845 { 00846 //using the sort 00847 //sort(CoherentGdcmFileList.begin(), CoherentGdcmFileList.end()); 00848 return true; 00849 } |
|
Gets the *coherent* File List.
Definition at line 657 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList.
00657 { 00658 return CoherentGdcmFileList; 00659 } |
|
Definition at line 129 of file gdcmHeaderHelper.h.
00130 { 00131 //Assume all element in the list have the same global infos 00132 return CoherentGdcmFileList.front(); 00133 } |
|
sorts the images, according to their Image Number
Definition at line 789 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList. Referenced by OrderGdcmFileList().
00789 { 00790 int min, max, pos; 00791 int n = 0;//CoherentGdcmFileList.size(); //O(N) operation !! 00792 unsigned char *partition; 00793 00794 std::list<gdcmHeaderHelper*>::iterator it = CoherentGdcmFileList.begin(); 00795 min = max = (*it)->GetImageNumber(); 00796 00797 for (; it != CoherentGdcmFileList.end(); it++, n++) 00798 { 00799 pos = (*it)->GetImageNumber(); 00800 00801 //else 00802 min = (min < pos) ? min : pos; 00803 } 00804 00805 //bzeros(partition, n); //Cette fonction est déconseillée, utilisez plutôt memset. 00806 partition = new unsigned char[n]; 00807 memset(partition, 0, n); 00808 00809 std::vector<gdcmHeaderHelper*> CoherentGdcmFileVector(n); 00810 00811 //VC++ don't understand what scope is !! it -> it2 00812 for (std::list<gdcmHeaderHelper*>::iterator it2 = CoherentGdcmFileList.begin(); 00813 it2 != CoherentGdcmFileList.end(); it2++) 00814 { 00815 pos = (*it2)->GetImageNumber(); 00816 CoherentGdcmFileVector[pos - min] = *it2; 00817 partition[pos - min]++; 00818 } 00819 00820 unsigned char mult = 1; 00821 for(int i=0; i<n ; i++) 00822 { 00823 mult *= partition[i]; 00824 } 00825 00826 //VC++ don't understand what scope is !! it -> it3 00827 CoherentGdcmFileList.clear(); //this doesn't delete list's element, node only 00828 for (std::vector<gdcmHeaderHelper*>::iterator it3 = CoherentGdcmFileVector.begin(); 00829 it3 != CoherentGdcmFileVector.end(); it3++) 00830 { 00831 CoherentGdcmFileList.push_back( *it3 ); 00832 } 00833 CoherentGdcmFileVector.clear(); 00834 00835 delete[] partition; 00836 return (mult!=0); 00837 } |
|
sorts the images, according to their Patient Position We may order, considering : -Image Number -Image Position Patient -More to come :)
Definition at line 675 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList. Referenced by OrderGdcmFileList().
00677 { 00678 //iop is calculated based on the file file 00679 float *cosines = new float[6]; 00680 float normal[3]; 00681 float ipp[3]; 00682 float dist; 00683 float min, max; 00684 bool first = true; 00685 int n=0; 00686 std::vector<float> distlist; 00687 00689 for (std::list<gdcmHeaderHelper*>::iterator it = CoherentGdcmFileList.begin(); 00690 it != CoherentGdcmFileList.end(); it++) 00691 { 00692 if(first) { 00693 (*it)->GetImageOrientationPatient(cosines); 00694 00695 //You only have to do this once for all slices in the volume. Next, for 00696 //each slice, calculate the distance along the slice normal using the IPP 00697 //tag ("dist" is initialized to zero before reading the first slice) : 00698 normal[0] = cosines[1]*cosines[5] - cosines[2]*cosines[4]; 00699 normal[1] = cosines[2]*cosines[3] - cosines[0]*cosines[5]; 00700 normal[2] = cosines[0]*cosines[4] - cosines[1]*cosines[3]; 00701 00702 ipp[0] = (*it)->GetXOrigin(); 00703 ipp[1] = (*it)->GetYOrigin(); 00704 ipp[2] = (*it)->GetZOrigin(); 00705 00706 dist = 0; 00707 for (int i = 0; i < 3; ++i) 00708 dist += normal[i]*ipp[i]; 00709 00710 if( dist == 0 ) 00711 { 00712 delete[] cosines; 00713 return false; 00714 } 00715 00716 distlist.push_back( dist ); 00717 00718 max = min = dist; 00719 first = false; 00720 } 00721 else { 00722 ipp[0] = (*it)->GetXOrigin(); 00723 ipp[1] = (*it)->GetYOrigin(); 00724 ipp[2] = (*it)->GetZOrigin(); 00725 00726 dist = 0; 00727 for (int i = 0; i < 3; ++i) 00728 dist += normal[i]*ipp[i]; 00729 00730 if( dist == 0 ) 00731 { 00732 delete[] cosines; 00733 return false; 00734 } 00735 00736 distlist.push_back( dist ); 00737 00738 min = (min < dist) ? min : dist; 00739 max = (max > dist) ? max : dist; 00740 } 00741 n++; 00742 } 00743 00744 //Then I order the slices according to the value "dist". Finally, once 00745 //I've read in all the slices, I calculate the z-spacing as the difference 00746 //between the "dist" values for the first two slices. 00747 std::vector<gdcmHeaderHelper*> CoherentGdcmFileVector(n); 00748 //CoherentGdcmFileVector.reserve( n ); 00749 CoherentGdcmFileVector.resize( n ); 00750 //assert( CoherentGdcmFileVector.capacity() >= n ); 00751 00752 float step = (max - min)/(n - 1); 00753 int pos; 00754 n = 0; 00755 00756 //VC++ don't understand what scope is !! it -> it2 00757 for (std::list<gdcmHeaderHelper*>::iterator it2 = CoherentGdcmFileList.begin(); 00758 it2 != CoherentGdcmFileList.end(); it2++, n++) 00759 { 00760 //2*n sort algo !! 00761 //Assumption: all files are present (no one missing) 00762 pos = (int)( fabs( (distlist[n]-min)/step) + .5 ); 00763 00764 CoherentGdcmFileVector[pos] = *it2; 00765 } 00766 00767 CoherentGdcmFileList.clear(); //this doesn't delete list's element, node only 00768 00769 //VC++ don't understand what scope is !! it -> it3 00770 for (std::vector<gdcmHeaderHelper*>::iterator it3 = CoherentGdcmFileVector.begin(); 00771 it3 != CoherentGdcmFileVector.end(); it3++) 00772 { 00773 CoherentGdcmFileList.push_back( *it3 ); 00774 } 00775 00776 distlist.clear(); 00777 CoherentGdcmFileVector.clear(); 00778 delete[] cosines; 00779 00780 return true; 00781 } |
|
Sorts the File List.
Definition at line 641 of file gdcmHeaderHelper.cxx. References FileNameOrdering(), ImageNumberOrdering(), and ImagePositionPatientOrdering().
00641 { 00642 if( ImagePositionPatientOrdering() ) { 00643 return ; 00644 } 00645 else if( ImageNumberOrdering() ) { 00646 return ; 00647 } else { 00648 FileNameOrdering(); 00649 } 00650 } |
|
Sets the Directory.
Definition at line 623 of file gdcmHeaderHelper.cxx. References CoherentGdcmFileList.
00623 { 00624 gdcmDirList filenames_list(dir); //OS specific 00625 00626 for(gdcmDirList::iterator it = filenames_list.begin(); 00627 it !=filenames_list.end(); it++) 00628 { 00629 gdcmHeaderHelper *file = new gdcmHeaderHelper( it->c_str() ); 00630 this->CoherentGdcmFileList.push_back( file ); 00631 } 00632 } |
|
Definition at line 142 of file gdcmHeaderHelper.h. Referenced by AddFileName(), AddGdcmFile(), GetGdcmFileList(), ImageNumberOrdering(), ImagePositionPatientOrdering(), SetDirectory(), and ~gdcmSerieHeaderHelper(). |