#include <axisExtractor.h>
Public Member Functions | |
void | PrintSelf (ostream &os, vtkIndent indent) |
virtual void | SetInput (vtkImageData *input) |
vtkImageData * | GetInput () |
void | SetMaxPropRadio (double value) |
double | GetMaxPropRadio () |
void | SetHumbral (double value) |
double | GetHumbral () |
void | SetMaxPropMasa (double value) |
double | GetMaxPropMasa () |
void | SetMinPropMasa (double value) |
double | GetMinPropMasa () |
void | SetPoint (double puntoactualprov[3]) |
vtkImageData * | GetVolumen () |
Static Public Member Functions | |
static axisExtractor * | New () |
Protected Member Functions | |
axisExtractor () | |
~axisExtractor () | |
void | Execute () |
Private Member Functions | |
axisExtractor (const axisExtractor &) | |
void | operator= (const axisExtractor &) |
void | searc (int i, int j, int k) |
void | find_components () |
unsigned short | maximo () |
void | blanquear () |
void | blanquear2 () |
void | corte (double punto1[3], double punto2[3], double punto3[3], double centro[3], double radio) |
void | avanzar () |
void | redondear (vtkImageData *data) |
void | copiar (vtkImageData *data, vtkImageData *data2) |
double | distancia (double a[3], double b[3]) |
int | envolumen (int a[3], vtkImageData *datae) |
void | realtoreal (double a[3], double b[3]) |
void | realtoreal2 (double a[3], double b[3]) |
void | realtoindex (double a[3], int b[3]) |
void | indextoreal (int a[3], double b[3]) |
void | indextoreal (double a[3], double b[3]) |
Private Attributes | |
vtkImageData * | dataprov |
vtkImageData * | datatotal |
unsigned char | label |
unsigned char | label2 |
unsigned long | vector [50][4] |
unsigned long | vectorb [50][4] |
vtkExtractVOI * | extrac |
vtkImageThreshold * | thresh |
vtkImageCast * | cast |
vtkImageSeedConnectivity * | connect |
vtkImageResample * | resample |
int | iter |
vtkPoints * | points |
vtkCellArray * | lineas |
double | humbral |
double | maxpropradio |
double | maxpropmasa |
double | minpropmasa |
int | buenos |
std::stack< double > | m_Stack0 |
std::stack< double > | m_Stack1 |
std::stack< double > | m_Stack2 |
std::stack< double > | m_Stack3 |
std::stack< double > | m_Stack4 |
std::stack< double > | m_Stack5 |
std::stack< int > | m_Stack |
int | flagg |
Definition at line 37 of file axisExtractor.h.
axisExtractor::axisExtractor | ( | ) | [protected] |
Definition at line 30 of file axisExtractor.cxx.
References cast, connect, dataprov, datatotal, extrac, humbral, maxpropmasa, maxpropradio, minpropmasa, New(), resample, and thresh.
00030 { 00031 00032 this->NumberOfRequiredInputs = 1; 00033 00034 this->humbral=0.45 ; 00035 this->maxpropradio=100; 00036 this->maxpropmasa=10; 00037 this->minpropmasa=0; 00038 00039 this->resample= vtkImageResample::New(); 00040 this->resample->SetDimensionality (3); 00041 00042 this->extrac = vtkExtractVOI::New(); 00043 this->extrac->SetInput(this->resample->GetOutput()); 00044 this->extrac->SetSampleRate(1, 1, 1); 00045 00046 this->thresh = vtkImageThreshold::New(); 00047 this->thresh->SetInput(this->extrac->GetOutput()); 00048 this->thresh->SetInValue(255); 00049 this->thresh->SetOutValue(0); 00050 this->thresh->ReleaseDataFlagOff(); 00051 00052 this->cast = vtkImageCast::New(); 00053 this->cast->SetInput(this->thresh->GetOutput()); 00054 this->cast->SetOutputScalarTypeToUnsignedChar(); 00055 00056 this->connect = vtkImageSeedConnectivity::New(); 00057 this->connect->SetInput(this->cast->GetOutput()); 00058 this->connect->SetInputConnectValue(255); 00059 this->connect->SetOutputConnectedValue(255); 00060 this->connect->SetOutputUnconnectedValue(0); 00061 00062 this->dataprov=vtkImageData::New(); 00063 this->dataprov->SetScalarTypeToChar(); 00064 00065 this->datatotal=vtkImageData::New(); 00066 this->datatotal->SetScalarTypeToChar(); 00067 00068 00069 00070 00071 }
axisExtractor::~axisExtractor | ( | ) | [inline, protected] |
Definition at line 67 of file axisExtractor.h.
axisExtractor::axisExtractor | ( | const axisExtractor & | ) | [private] |
void axisExtractor::avanzar | ( | ) | [private] |
Definition at line 782 of file axisExtractor.cxx.
References blanquear(), buenos, cast, connect, copiar(), dataprov, datatotal, distancia(), envolumen(), extrac, find_components(), flagg, humbral, indextoreal(), label, label2, lineas, m_Stack, m_Stack0, m_Stack1, m_Stack2, m_Stack3, m_Stack4, m_Stack5, maximo(), min, minpropmasa, New(), points, realtoindex(), realtoreal2(), redondear(), thresh, vector, and vectorb.
Referenced by Execute().
00783 { 00784 00785 00786 00787 00788 double puntoactual[3]; 00789 double puntoanterior[3]; 00790 double puntoactualdis[3]; 00791 double puntoactualcorre[3]; 00792 int puntoactualarr[3]; 00793 double radioactual; 00794 double dirant[3]; 00795 double vector2[50][3]; 00796 double vector2b[3]; 00797 unsigned long vectortemp[4]; 00798 double vector2temp[3]; 00799 double maxmasa; 00800 int extint[6]; 00801 int extintreal[6]; 00802 int indesxdis[3]; 00803 int indexp; 00804 double norvec; 00805 double provvc[3]; 00806 double proprov; 00807 double puntoactualcorre2[3]; 00808 int radiotrabajo=1; 00809 int radiocorte=0; 00810 int radiocorte2=0; 00811 int radiocorte3=0; 00812 int radiocorte4=0; 00813 int radiocorte5=0; 00814 int radiocorte6=0; 00815 int radiocorte7=0; 00816 int radiocorte8=0; 00817 int radiocorte9=0; 00818 int radiocorte10=0; 00819 int radiocorte11=0; 00820 int cantidadanterior=0; 00821 int cantidadanteriorb=0; 00822 int flag =0; 00823 int flag2 =0; 00824 int flag3 =0; 00825 int flag4 =0; 00826 int flag5 =0; 00827 int flag6 =0; 00828 int flag7 =0; 00829 int i, j; 00830 00831 00832 00833 if(!m_Stack0.empty()){ 00834 00835 indexp=m_Stack.top(); 00836 00837 puntoactual[0]=m_Stack0.top(); 00838 puntoactual[1]=m_Stack1.top(); 00839 puntoactual[2]=m_Stack2.top(); 00840 00841 puntoanterior[0]=m_Stack3.top(); 00842 puntoanterior[1]=m_Stack4.top(); 00843 puntoanterior[2]=m_Stack5.top(); 00844 00845 m_Stack0.pop(); 00846 m_Stack1.pop(); 00847 m_Stack2.pop(); 00848 m_Stack3.pop(); 00849 m_Stack4.pop(); 00850 m_Stack5.pop(); 00851 m_Stack.pop(); 00852 00853 dirant[0]=puntoanterior[0]-puntoactual[0]; 00854 dirant[1]=puntoanterior[1]-puntoactual[1]; 00855 dirant[2]=puntoanterior[2]-puntoactual[2]; 00856 00857 radioactual=distancia(puntoactual, puntoanterior); 00858 00859 realtoindex(puntoactual, puntoactualarr); 00860 00861 for(this->label=1, this->label2=0;flag4==0 &&(this->label>0) && (this->label==1 && ( radiocorte==0 || radiotrabajo<=radiocorte4 ) ) || (this->label>1 && radiotrabajo<=radiocorte4) ;radiotrabajo++){ 00862 00863 extint[0]=puntoactualarr[0]-radiotrabajo; 00864 extint[1]=puntoactualarr[0]+radiotrabajo; 00865 extint[2]=puntoactualarr[1]-radiotrabajo; 00866 extint[3]=puntoactualarr[1]+radiotrabajo; 00867 extint[4]=puntoactualarr[2]-radiotrabajo; 00868 extint[5]=puntoactualarr[2]+radiotrabajo; 00869 00870 extrac->SetVOI(extint); 00871 extrac->UpdateWholeExtent(); 00872 extrac->Update(); 00873 extrac->GetOutput()->GetExtent(extintreal); 00874 00875 if(extint[0]!=extintreal[0] || extint[1]!=extintreal[1] || extint[2]!=extintreal[2] || extint[3]!=extintreal[3] || extint[4]!=extintreal[4] || extint[5]!=extintreal[5]){ 00876 flag4 =1; 00877 radiotrabajo++; 00878 break; 00879 } 00880 00881 if(puntoactualarr[0]>=extintreal[0] && puntoactualarr[0]<=extintreal[1] && puntoactualarr[1]>=extintreal[2] && puntoactualarr[1]<=extintreal[3] && puntoactualarr[2]>=extintreal[4] && puntoactualarr[2]<=extintreal[5] ){ 00882 00883 thresh->ThresholdByUpper(this->maximo()*this->humbral); 00884 thresh->UpdateWholeExtent(); 00885 thresh->Update(); 00886 00887 redondear(thresh->GetOutput()); 00888 00889 cast->UpdateWholeExtent(); 00890 cast->Update(); 00891 00892 connect->RemoveAllSeeds(); 00893 connect->AddSeed(puntoactualarr[0],puntoactualarr[1],puntoactualarr[2]); 00894 connect->UpdateWholeExtent(); 00895 connect->Update(); 00896 00897 this->dataprov->Delete(); 00898 00899 this->dataprov=vtkImageData::New(); 00900 this->dataprov->SetScalarTypeToChar(); 00901 00902 this->dataprov->SetExtent(this->connect->GetOutput()->GetExtent()); 00903 this->dataprov->SetSpacing(this->connect->GetOutput()->GetSpacing()); 00904 00905 this->blanquear(); 00906 00907 this->find_components(); 00908 00909 if(this->label2>0 && flag==0){ 00910 radiocorte=radiotrabajo; 00911 vector2b[0]=((double)vectorb[0][1]/(double)vectorb[0][0])-(double)puntoactualarr[0]; 00912 vector2b[1]=((double)vectorb[0][2]/(double)vectorb[0][0])-(double)puntoactualarr[1]; 00913 vector2b[2]=((double)vectorb[0][3]/(double)vectorb[0][0])-(double)puntoactualarr[2]; 00914 flag =1; 00915 } 00916 if(this->label2>1 && flag5==0){ 00917 radiocorte5=radiotrabajo; 00918 flag5 =1; 00919 } 00920 00921 if( this->label>1 && flag2==0){ 00922 radiocorte2=radiotrabajo; 00923 flag2 =1; 00924 } 00925 00926 if(radiocorte5==0){ 00927 radiocorte6=radiocorte2; 00928 } 00929 else{ 00930 radiocorte6=min(radiocorte2, radiocorte5); 00931 } 00932 00933 if((radiocorte6-radiocorte)>1 && flagg<=4){ 00934 flag4 =1; 00935 radiotrabajo++; 00936 flag7 =0; 00937 break; 00938 } 00939 else{ 00940 flag7 =1; 00941 } 00942 00943 if(this->label>2 && flag3==0){ 00944 radiocorte3=radiotrabajo; 00945 flag3 =1; 00946 } 00947 if( this->label==2 && cantidadanterior!=this->label){ 00948 radiocorte7=radiotrabajo; 00949 00950 } 00951 if( this->label==3 && cantidadanterior!=this->label){ 00952 radiocorte8=radiotrabajo; 00953 } 00954 if( cantidadanterior!=this->label || cantidadanteriorb!=this->label2){ 00955 if(radiocorte2==0){ 00956 radiocorte4=radiotrabajo+10*(radiotrabajo-radiocorte9); 00957 } 00958 else{ 00959 radiocorte4=radiotrabajo+(radiotrabajo-radiocorte9); 00960 } 00961 radiocorte9=radiotrabajo; 00962 } 00963 00964 cantidadanterior=this->label; 00965 cantidadanteriorb=this->label2; 00966 00967 } 00968 00969 } 00970 radiotrabajo--; 00971 radiocorte10=radiotrabajo; 00972 00973 if(flag7==1){ 00974 if(this->label>=2 && radiocorte10!=radiocorte9+1){ 00975 radiotrabajo=radiocorte9+1; 00976 00977 extint[0]=puntoactualarr[0]-radiotrabajo; 00978 extint[1]=puntoactualarr[0]+radiotrabajo; 00979 extint[2]=puntoactualarr[1]-radiotrabajo; 00980 extint[3]=puntoactualarr[1]+radiotrabajo; 00981 extint[4]=puntoactualarr[2]-radiotrabajo; 00982 extint[5]=puntoactualarr[2]+radiotrabajo; 00983 00984 extrac->SetVOI(extint); 00985 extrac->UpdateWholeExtent(); 00986 extrac->Update(); 00987 extrac->GetOutput()->GetExtent(extintreal); 00988 00989 thresh->ThresholdByUpper(this->maximo()*this->humbral); 00990 thresh->UpdateWholeExtent(); 00991 thresh->Update(); 00992 00993 redondear(thresh->GetOutput()); 00994 00995 cast->UpdateWholeExtent(); 00996 cast->Update(); 00997 00998 connect->RemoveAllSeeds(); 00999 connect->AddSeed(puntoactualarr[0],puntoactualarr[1],puntoactualarr[2]); 01000 connect->UpdateWholeExtent(); 01001 connect->Update(); 01002 01003 this->dataprov->Delete(); 01004 01005 this->dataprov=vtkImageData::New(); 01006 this->dataprov->SetScalarTypeToChar(); 01007 01008 this->dataprov->SetExtent(this->connect->GetOutput()->GetExtent()); 01009 this->dataprov->SetSpacing(this->connect->GetOutput()->GetSpacing()); 01010 01011 01012 this->blanquear(); 01013 01014 this->find_components(); 01015 } 01016 } 01017 01018 if(flag7==1){ 01019 flagg=0; 01020 if(this->label>1){ 01021 //printf("no corrigio\n"); 01022 01023 realtoreal2(puntoactual, provvc); 01024 points->InsertPoint(buenos,provvc); 01025 01026 if(buenos>0){ 01027 lineas->InsertNextCell(2); 01028 lineas->InsertCellPoint(indexp); 01029 lineas->InsertCellPoint(buenos); 01030 } 01031 01032 buenos++; 01033 } 01034 } 01035 else{ 01036 flagg++; 01037 //printf("corrigio\n"); 01038 01039 provvc[0]=0; 01040 provvc[1]=0; 01041 provvc[2]=0; 01042 01043 norvec=distancia(provvc, vector2b); 01044 01045 proprov=(radiocorte6-radiocorte)/(2*norvec); 01046 01047 puntoactualcorre[0]=(puntoactualarr[0]-(vector2b[0]*proprov)); 01048 puntoactualcorre[1]=(puntoactualarr[1]-(vector2b[1]*proprov)); 01049 puntoactualcorre[2]=(puntoactualarr[2]-(vector2b[2]*proprov)); 01050 01051 indextoreal(puntoactualcorre, puntoactualcorre2); 01052 01053 m_Stack0.push(puntoactualcorre2[0]); 01054 m_Stack1.push(puntoactualcorre2[1]); 01055 m_Stack2.push(puntoactualcorre2[2]); 01056 m_Stack3.push(puntoanterior[0]); 01057 m_Stack4.push(puntoanterior[1]); 01058 m_Stack5.push(puntoanterior[2]); 01059 m_Stack.push(indexp); 01060 01061 01062 } 01063 01064 if(flag7==1){ 01065 01066 if(this->label>1){ 01067 01068 maxmasa=0; 01069 for(i=0;i<this->label;i++){ 01070 vector2[i][0]=((double)vector[i][1]/(double)vector[i][0])-(double)puntoactualarr[0]; 01071 vector2[i][1]=((double)vector[i][2]/(double)vector[i][0])-(double)puntoactualarr[1]; 01072 vector2[i][2]=((double)vector[i][3]/(double)vector[i][0])-(double)puntoactualarr[2]; 01073 if(maxmasa<vector[i][0]){ 01074 maxmasa=vector[i][0]; 01075 } 01076 } 01077 01078 for(i=0;i<this->label;i++){ 01079 for(j=i;j<this->label;j++){ 01080 if(vector[j][0]<vector[i][0]){ 01081 vectortemp[0]=vector[i][0]; 01082 vectortemp[1]=vector[i][1]; 01083 vectortemp[2]=vector[i][2]; 01084 vectortemp[3]=vector[i][3]; 01085 vector2temp[0]=vector2[i][0]; 01086 vector2temp[1]=vector2[i][1]; 01087 vector2temp[2]=vector2[i][2]; 01088 01089 vector[i][0]=vector[j][0]; 01090 vector[i][1]=vector[j][1]; 01091 vector[i][2]=vector[j][2]; 01092 vector[i][3]=vector[j][3]; 01093 vector2[i][0]=vector2[j][0]; 01094 vector2[i][1]=vector2[j][1]; 01095 vector2[i][2]=vector2[j][2]; 01096 01097 vector[j][0]=vectortemp[0]; 01098 vector[j][1]=vectortemp[1]; 01099 vector[j][2]=vectortemp[2]; 01100 vector[j][3]=vectortemp[3]; 01101 vector2[j][0]=vector2temp[0]; 01102 vector2[j][1]=vector2temp[1]; 01103 vector2[j][2]=vector2temp[2]; 01104 } 01105 } 01106 01107 } 01108 01109 01110 for(i=0;i<this->label;i++){ 01111 if(maxmasa*this->minpropmasa<vector[i][0]){ 01112 01113 indesxdis[0]=(int) (puntoactualarr[0]+vector2[i][0]); 01114 indesxdis[1]=(int) (puntoactualarr[1]+vector2[i][1]); 01115 indesxdis[2]=(int) (puntoactualarr[2]+vector2[i][2]); 01116 01117 indextoreal(indesxdis, puntoactualdis); 01118 01119 if(envolumen(indesxdis, datatotal)==0){ 01120 m_Stack0.push(puntoactualdis[0]); 01121 m_Stack1.push(puntoactualdis[1]); 01122 m_Stack2.push(puntoactualdis[2]); 01123 m_Stack3.push(puntoactual[0]); 01124 m_Stack4.push(puntoactual[1]); 01125 m_Stack5.push(puntoactual[2]); 01126 m_Stack.push(buenos-1); 01127 } 01128 01129 } 01130 01131 } 01132 01133 if(this->label>1 ){ 01134 copiar(this->connect->GetOutput(), datatotal ); 01135 } 01136 01137 } 01138 } 01139 01140 } 01141 01142 01143 }
void axisExtractor::blanquear | ( | ) | [private] |
Definition at line 568 of file axisExtractor.cxx.
References dataprov.
Referenced by avanzar().
00569 { 00570 int ext[6]; 00571 int i, j, k; 00572 00573 this->dataprov->GetExtent(ext); 00574 00575 char *ptr; 00576 00577 00578 00579 for(i=ext[0];i<=ext[1];i++){ 00580 for(j=ext[2];j<=ext[3];j++){ 00581 for(k=ext[4];k<=ext[5];k++){ 00582 ptr=(char *) this->dataprov->GetScalarPointer(i,j,k); 00583 *ptr=0; 00584 } 00585 } 00586 } 00587 }
void axisExtractor::blanquear2 | ( | ) | [private] |
Definition at line 595 of file axisExtractor.cxx.
References datatotal.
Referenced by Execute().
00596 { 00597 int ext[6]; 00598 int i, j, k; 00599 00600 this->datatotal->GetExtent(ext); 00601 00602 unsigned char *ptr; 00603 00604 00605 00606 for(i=ext[0];i<=ext[1];i++){ 00607 for(j=ext[2];j<=ext[3];j++){ 00608 for(k=ext[4];k<=ext[5];k++){ 00609 ptr=(unsigned char *) this->datatotal->GetScalarPointer(i,j,k); 00610 *ptr=0; 00611 } 00612 } 00613 } 00614 }
void axisExtractor::copiar | ( | vtkImageData * | data, | |
vtkImageData * | data2 | |||
) | [private] |
Definition at line 620 of file axisExtractor.cxx.
Referenced by avanzar().
00621 { 00622 int ext[6]; 00623 int i, j, k; 00624 00625 data->GetExtent(ext); 00626 00627 unsigned char *ptr, *ptr2; 00628 00629 for(i=ext[0];i<=ext[1];i++){ 00630 for(j=ext[2];j<=ext[3];j++){ 00631 for(k=ext[4];k<=ext[5];k++){ 00632 ptr=(unsigned char *) data->GetScalarPointer(i,j,k); 00633 ptr2=(unsigned char *) data2->GetScalarPointer(i,j,k); 00634 if(*ptr!=0 && *ptr2==0){ 00635 *ptr2=*ptr; 00636 } 00637 } 00638 } 00639 } 00640 00641 data2->Modified(); 00642 }
void axisExtractor::corte | ( | double | punto1[3], | |
double | punto2[3], | |||
double | punto3[3], | |||
double | centro[3], | |||
double | radio | |||
) | [private] |
Definition at line 693 of file axisExtractor.cxx.
00694 { 00695 00696 double m1, m2, m3; 00697 double b1, b2, b3; 00698 double c0, c1, c2; 00699 double* roots; 00700 double root; 00701 00702 00703 m1=punto2[0]-punto1[0]; 00704 m2=punto2[1]-punto1[1]; 00705 m3=punto2[2]-punto1[2]; 00706 00707 b1=punto1[0]-centro[0]; 00708 b2=punto1[1]-centro[1]; 00709 b3=punto1[2]-centro[2]; 00710 00711 c0=m1*m1+m2*m2+m3*m3; 00712 c1=2*m1*b1+2*m2*b2+2*m3*b3; 00713 c2=b1*b1+b2*b2+b3*b3-radio*radio; 00714 00715 roots=vtkMath::SolveQuadratic (c0, c1, c2); 00716 00717 if(roots[1]>=0 && roots[1]<=1){ 00718 root=roots[1]; 00719 } 00720 else{ 00721 root=roots[2]; 00722 } 00723 00724 punto3[0]=punto1[0]+root*(punto2[0]-punto1[0]); 00725 punto3[1]=punto1[1]+root*(punto2[1]-punto1[1]); 00726 punto3[2]=punto1[2]+root*(punto2[2]-punto1[2]); 00727 00728 }
double axisExtractor::distancia | ( | double | a[3], | |
double | b[3] | |||
) | [private] |
Definition at line 649 of file axisExtractor.cxx.
Referenced by avanzar().
00650 { 00651 00652 00653 return sqrt(((a[0]-b[0])*(a[0]-b[0]))+((a[1]-b[1])*(a[1]-b[1]))+((a[2]-b[2])*(a[2]-b[2]))); 00654 }
int axisExtractor::envolumen | ( | int | a[3], | |
vtkImageData * | datae | |||
) | [private] |
Definition at line 664 of file axisExtractor.cxx.
Referenced by avanzar().
00665 { 00666 00667 int res; 00668 00669 00670 unsigned char *ptr; 00671 00672 00673 ptr=(unsigned char *) datae->GetScalarPointer(a); 00674 00675 if(*ptr==0){ 00676 res=0; 00677 } 00678 else{ 00679 res=1; 00680 } 00681 00682 00683 return res; 00684 }
void axisExtractor::Execute | ( | ) | [protected] |
Definition at line 101 of file axisExtractor.cxx.
References avanzar(), blanquear2(), buenos, datatotal, flagg, iter, lineas, m_Stack0, New(), points, and resample.
00102 { 00103 this->points = vtkPoints::New(); 00104 this->lineas = vtkCellArray::New(); 00105 this->buenos=0; 00106 this->iter=0; 00107 this->flagg=0; 00108 00109 this->datatotal->Delete(); 00110 this->datatotal=vtkImageData::New(); 00111 this->datatotal->SetScalarTypeToUnsignedChar(); 00112 00113 this->datatotal->SetExtent(this->resample->GetOutput()->GetExtent()); 00114 this->datatotal->SetSpacing(this->resample->GetOutput()->GetSpacing()); 00115 00116 this->blanquear2(); 00117 00118 00119 while( !m_Stack0.empty()){ 00120 this->avanzar(); 00121 this->iter++; 00122 } 00123 00124 00125 this->GetOutput()->SetPoints (this->points); 00126 this->GetOutput()->SetLines(this->lineas); 00127 this->GetOutput()->Modified(); 00128 00129 // this->GetOutput()->GetPointData()->SetVectors(this->salidas); 00130 }
void axisExtractor::find_components | ( | ) | [private] |
Definition at line 476 of file axisExtractor.cxx.
References connect, dataprov, label, label2, searc(), vector, and vectorb.
Referenced by avanzar().
00477 { 00478 int ext[6]; 00479 int i, j, k, radio; 00480 int i2, j2, k2; 00481 00482 00483 unsigned char *ptr; 00484 char *ptr2; 00485 00486 this->connect->GetOutput()->GetExtent(ext); 00487 00488 00489 radio=(ext[1]-ext[0])/2; 00490 00491 this->label=0; 00492 this->label2=0; 00493 00494 00495 00496 for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){ 00497 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){ 00498 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){ 00499 ptr=(unsigned char *) this->connect->GetOutput()->GetScalarPointer(i,j,k); 00500 ptr2=(char *) this->dataprov->GetScalarPointer(i,j,k); 00501 00502 if(*ptr==255 && *ptr2==0 && (radio*radio)>=(i2*i2)+(j2*j2)+(k2*k2) && ((radio-1)*(radio-1))<=(i2*i2)+(j2*j2)+(k2*k2) ){ 00503 this->label=this->label+1; 00504 this->vector[this->label-1][0]=0; 00505 this->vector[this->label-1][1]=0; 00506 this->vector[this->label-1][2]=0; 00507 this->vector[this->label-1][3]=0; 00508 this->searc(i, j, k); 00509 00510 } 00511 else if(*ptr==0 && *ptr2==0 && (radio*radio)>=(i2*i2)+(j2*j2)+(k2*k2) && ((radio-1)*(radio-1))<=(i2*i2)+(j2*j2)+(k2*k2) ){ 00512 this->label2=this->label2+1; 00513 this->vectorb[this->label2-1][0]=0; 00514 this->vectorb[this->label2-1][1]=0; 00515 this->vectorb[this->label2-1][2]=0; 00516 this->vectorb[this->label2-1][3]=0; 00517 this->searc(i, j, k); 00518 00519 } 00520 } 00521 } 00522 } 00523 00524 00525 00526 00527 00528 00529 00530 }
double axisExtractor::GetHumbral | ( | ) |
Definition at line 209 of file axisExtractor.cxx.
References humbral.
00210 { 00211 return this->humbral; 00212 }
vtkImageData * axisExtractor::GetInput | ( | ) |
Definition at line 141 of file axisExtractor.cxx.
double axisExtractor::GetMaxPropMasa | ( | ) |
Definition at line 226 of file axisExtractor.cxx.
References maxpropmasa.
00227 { 00228 return this->maxpropmasa; 00229 }
double axisExtractor::GetMaxPropRadio | ( | ) |
Definition at line 191 of file axisExtractor.cxx.
References maxpropradio.
00192 { 00193 return this->maxpropradio; 00194 }
double axisExtractor::GetMinPropMasa | ( | ) |
Definition at line 243 of file axisExtractor.cxx.
References minpropmasa.
00244 { 00245 return this->minpropmasa; 00246 }
vtkImageData * axisExtractor::GetVolumen | ( | ) |
Definition at line 158 of file axisExtractor.cxx.
References datatotal.
Referenced by wxEmptyPanelWidget_2::ExtractTree1_JF().
00159 { 00160 00161 return this->datatotal; 00162 }
void axisExtractor::indextoreal | ( | double | a[3], | |
double | b[3] | |||
) | [private] |
Definition at line 386 of file axisExtractor.cxx.
00387 { 00388 double minspac; 00389 00390 double espprin[3]; 00391 int extprin[6]; 00392 00393 this->resample->GetOutput()->GetSpacing(espprin); 00394 this->resample->GetOutput()->GetExtent(extprin); 00395 00396 minspac=min(espprin[0],min(espprin[1],espprin[2])); 00397 00398 b[0]=(a[0])*minspac; 00399 b[1]=(a[1])*minspac; 00400 b[2]=a[2]*minspac; 00401 }
void axisExtractor::indextoreal | ( | int | a[3], | |
double | b[3] | |||
) | [private] |
Definition at line 364 of file axisExtractor.cxx.
Referenced by avanzar().
00365 { 00366 double minspac; 00367 00368 double espprin[3]; 00369 int extprin[6]; 00370 00371 this->resample->GetOutput()->GetSpacing(espprin); 00372 this->resample->GetOutput()->GetExtent(extprin); 00373 00374 minspac=min(espprin[0],min(espprin[1],espprin[2])); 00375 00376 b[0]=(a[0])*minspac; 00377 b[1]=(a[1])*minspac; 00378 b[2]=a[2]*minspac; 00379 }
unsigned short axisExtractor::maximo | ( | ) | [private] |
Definition at line 536 of file axisExtractor.cxx.
References extrac.
Referenced by avanzar().
00537 { 00538 int ext[6]; 00539 int i, j, k; 00540 unsigned short max=0; 00541 00542 this->extrac->GetOutput()->GetExtent(ext); 00543 00544 unsigned short *ptr; 00545 00546 00547 for(i=ext[0];i<=ext[1];i++){ 00548 for(j=ext[2];j<=ext[3];j++){ 00549 for(k=ext[4];k<=ext[5];k++){ 00550 ptr=(unsigned short *)this->extrac->GetOutput()->GetScalarPointer(i,j,k); 00551 if(*ptr>max){ 00552 max=*ptr; 00553 00554 } 00555 } 00556 } 00557 } 00558 00559 return max; 00560 00561 00562 }
static axisExtractor* axisExtractor::New | ( | ) | [static] |
Referenced by avanzar(), axisExtractor(), Execute(), and wxEmptyPanelWidget_2::ExtractTree1_JF().
void axisExtractor::operator= | ( | const axisExtractor & | ) | [private] |
void axisExtractor::PrintSelf | ( | ostream & | os, | |
vtkIndent | indent | |||
) |
Definition at line 170 of file axisExtractor.cxx.
00171 { 00172 this->Superclass::PrintSelf(os,indent); 00173 }
void axisExtractor::realtoindex | ( | double | a[3], | |
int | b[3] | |||
) | [private] |
Definition at line 323 of file axisExtractor.cxx.
Referenced by avanzar().
00324 { 00325 double c[3]; 00326 00327 double minspac; 00328 00329 double espprin[3]; 00330 int extprin[6]; 00331 00332 this->resample->GetOutput()->GetSpacing(espprin); 00333 this->resample->GetOutput()->GetExtent(extprin); 00334 00335 minspac=min(espprin[0],min(espprin[1],espprin[2])); 00336 00337 c[0]=(a[0]/minspac); 00338 c[1]=(a[1]/minspac); 00339 c[2]=(a[2]/minspac); 00340 00341 b[0]=(int)(a[0]/minspac); 00342 b[1]=(int)(a[1]/minspac); 00343 b[2]=(int)(a[2]/minspac); 00344 00345 if(c[0]-b[0]>0.5){ 00346 b[0]+=1; 00347 } 00348 if(c[1]-b[1]>0.5){ 00349 b[1]+=1; 00350 } 00351 if(c[2]-b[2]>0.5){ 00352 b[2]+=1; 00353 } 00354 00355 00356 }
void axisExtractor::realtoreal | ( | double | a[3], | |
double | b[3] | |||
) | [private] |
Definition at line 280 of file axisExtractor.cxx.
References resample.
Referenced by SetPoint().
00281 { 00282 00283 double espprin[3]; 00284 int extprin[6]; 00285 00286 this->resample->GetOutput()->GetSpacing(espprin); 00287 this->resample->GetOutput()->GetExtent(extprin); 00288 00289 b[0]=a[0]+(espprin[0]*extprin[0]); 00290 b[1]=a[1]+(espprin[1]*extprin[2]); 00291 b[2]=a[2]; 00292 00293 00294 00295 }
void axisExtractor::realtoreal2 | ( | double | a[3], | |
double | b[3] | |||
) | [private] |
Definition at line 301 of file axisExtractor.cxx.
References resample.
Referenced by avanzar().
00302 { 00303 00304 double espprin[3]; 00305 int extprin[6]; 00306 00307 this->resample->GetOutput()->GetSpacing(espprin); 00308 this->resample->GetOutput()->GetExtent(extprin); 00309 00310 b[0]=a[0]-(espprin[0]*extprin[0]); 00311 b[1]=a[1]-(espprin[1]*extprin[2]); 00312 b[2]=a[2]; 00313 00314 00315 00316 }
void axisExtractor::redondear | ( | vtkImageData * | data | ) | [private] |
Definition at line 742 of file axisExtractor.cxx.
Referenced by avanzar().
00743 { 00744 int ext[6]; 00745 int i, j, k, radio; 00746 int i2, j2, k2; 00747 00748 data->GetExtent(ext); 00749 00750 unsigned char *ptr; 00751 00752 radio=(ext[1]-ext[0])/2; 00753 00754 double tmpsqrt; 00755 for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){ 00756 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){ 00757 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){ 00758 ptr=(unsigned char *) data->GetScalarPointer(i,j,k); 00759 tmpsqrt = (i2*i2)+(j2*j2)+(k2*k2); 00760 if( radio<sqrt(tmpsqrt) ){ 00761 *ptr=0; 00762 00763 } 00764 } 00765 } 00766 } 00767 }
void axisExtractor::searc | ( | int | i, | |
int | j, | |||
int | k | |||
) | [private] |
Definition at line 407 of file axisExtractor.cxx.
References connect, dataprov, label, label2, vector, and vectorb.
Referenced by find_components().
00408 { 00409 00410 unsigned char *ptr; 00411 unsigned char ptri; 00412 char *ptr2; 00413 00414 int radio; 00415 00416 int i2, j2, k2; 00417 int i3, j3, k3; 00418 00419 ptr=(unsigned char *) this->connect->GetOutput()->GetScalarPointer(i,j,k); 00420 ptr2=(char *) this->dataprov->GetScalarPointer(i,j,k); 00421 00422 ptri=*ptr; 00423 00424 int ext[6]; 00425 00426 this->connect->GetOutput()->GetExtent(ext); 00427 00428 radio=(ext[1]-ext[0])/2; 00429 00430 i2=i-ext[0]-radio; 00431 j2=j-ext[2]-radio; 00432 k2=k-ext[4]-radio; 00433 00434 00435 if(ptri==255){ 00436 *ptr2=this->label; 00437 this->vector[this->label-1][0]+=1; 00438 this->vector[this->label-1][1]+=i; 00439 this->vector[this->label-1][2]+=j; 00440 this->vector[this->label-1][3]+=k; 00441 } 00442 else if(ptri==0){ 00443 *ptr2=-this->label2; 00444 this->vectorb[this->label2-1][0]+=1; 00445 this->vectorb[this->label2-1][1]+=i; 00446 this->vectorb[this->label2-1][2]+=j; 00447 this->vectorb[this->label2-1][3]+=k; 00448 } 00449 00450 00451 for(i3=-1;i3<=1;i3++){ 00452 for(j3=-1;j3<=1;j3++){ 00453 for(k3=-1;k3<=1;k3++){ 00454 if(i+i3>=ext[0] && i+i3<=ext[1] && j+j3>=ext[2] && j+j3<=ext[3] && k+k3>=ext[4] && k+k3<=ext[5] ){ 00455 ptr=(unsigned char *) this->connect->GetOutput()->GetScalarPointer(i+i3,j+j3,k+k3); 00456 ptr2=(char *) this->dataprov->GetScalarPointer(i+i3,j+j3,k+k3); 00457 if(ptri==255 && *ptr==255 && *ptr2==0 && (radio*radio)>=((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3)) && ((radio-1)*(radio-1))<=((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3))){ 00458 this->searc(i+i3, j+j3, k+k3); 00459 } 00460 else if(ptri==0 && *ptr==0 && *ptr2==0 && (radio*radio)>=((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3)) && ((radio-1)*(radio-1))<=((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3))){ 00461 this->searc(i+i3, j+j3, k+k3); 00462 } 00463 } 00464 } 00465 } 00466 } 00467 00468 00469 00470 00471 00472 }
void axisExtractor::SetHumbral | ( | double | value | ) |
Definition at line 200 of file axisExtractor.cxx.
References humbral.
Referenced by wxEmptyPanelWidget_2::ExtractTree1_JF().
00201 { 00202 this->humbral=value; 00203 }
void axisExtractor::SetInput | ( | vtkImageData * | input | ) | [virtual] |
Definition at line 75 of file axisExtractor.cxx.
Referenced by wxEmptyPanelWidget_2::ExtractTree1_JF().
00076 { 00077 double minspac; 00078 double espprin[3]; 00079 00080 00081 this->vtkProcessObject::SetNthInput(0, input); 00082 this->resample->SetInput(input); 00083 input->GetSpacing(espprin); 00084 00085 00086 minspac=min(espprin[0],min(espprin[1],espprin[2])); 00087 00088 00089 this->resample->SetAxisOutputSpacing( 0, minspac); 00090 this->resample->SetAxisOutputSpacing( 1, minspac); 00091 this->resample->SetAxisOutputSpacing( 2, minspac); 00092 this->resample->Update(); 00093 00094 00095 }
void axisExtractor::SetMaxPropMasa | ( | double | value | ) |
Definition at line 217 of file axisExtractor.cxx.
References maxpropmasa.
00218 { 00219 this->maxpropmasa=value; 00220 }
void axisExtractor::SetMaxPropRadio | ( | double | value | ) |
Definition at line 183 of file axisExtractor.cxx.
References maxpropradio.
00184 { 00185 this->maxpropradio=value; 00186 }
void axisExtractor::SetMinPropMasa | ( | double | value | ) |
Definition at line 234 of file axisExtractor.cxx.
References minpropmasa.
00235 { 00236 this->minpropmasa=value; 00237 }
void axisExtractor::SetPoint | ( | double | puntoactualprov[3] | ) |
Definition at line 255 of file axisExtractor.cxx.
References m_Stack, m_Stack0, m_Stack1, m_Stack2, m_Stack3, m_Stack4, m_Stack5, and realtoreal().
Referenced by wxEmptyPanelWidget_2::ExtractTree1_JF().
00256 { 00257 00258 realtoreal(puntoactualprov,puntoactualprov); 00259 00260 00261 m_Stack0.push(puntoactualprov[0]); 00262 m_Stack1.push(puntoactualprov[1]); 00263 m_Stack2.push(puntoactualprov[2]); 00264 m_Stack3.push(puntoactualprov[0]); 00265 m_Stack4.push(puntoactualprov[1]); 00266 m_Stack5.push(puntoactualprov[2]); 00267 m_Stack.push(0); 00268 00269 }
int axisExtractor::buenos [private] |
Definition at line 150 of file axisExtractor.h.
vtkImageCast* axisExtractor::cast [private] |
Definition at line 134 of file axisExtractor.h.
Referenced by avanzar(), and axisExtractor().
vtkImageSeedConnectivity* axisExtractor::connect [private] |
Definition at line 135 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), find_components(), and searc().
vtkImageData* axisExtractor::dataprov [private] |
Definition at line 123 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), blanquear(), find_components(), and searc().
vtkImageData* axisExtractor::datatotal [private] |
Definition at line 124 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), blanquear2(), Execute(), and GetVolumen().
vtkExtractVOI* axisExtractor::extrac [private] |
Definition at line 132 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), and maximo().
int axisExtractor::flagg [private] |
Definition at line 160 of file axisExtractor.h.
double axisExtractor::humbral [private] |
Definition at line 145 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), GetHumbral(), and SetHumbral().
int axisExtractor::iter [private] |
Definition at line 139 of file axisExtractor.h.
Referenced by Execute().
unsigned char axisExtractor::label [private] |
Definition at line 126 of file axisExtractor.h.
Referenced by avanzar(), find_components(), and searc().
unsigned char axisExtractor::label2 [private] |
Definition at line 127 of file axisExtractor.h.
Referenced by avanzar(), find_components(), and searc().
vtkCellArray* axisExtractor::lineas [private] |
Definition at line 143 of file axisExtractor.h.
std::stack< int > axisExtractor::m_Stack [private] |
Definition at line 158 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
std::stack< double > axisExtractor::m_Stack0 [private] |
Definition at line 152 of file axisExtractor.h.
Referenced by avanzar(), Execute(), and SetPoint().
std::stack< double > axisExtractor::m_Stack1 [private] |
Definition at line 153 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
std::stack< double > axisExtractor::m_Stack2 [private] |
Definition at line 154 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
std::stack< double > axisExtractor::m_Stack3 [private] |
Definition at line 155 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
std::stack< double > axisExtractor::m_Stack4 [private] |
Definition at line 156 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
std::stack< double > axisExtractor::m_Stack5 [private] |
Definition at line 157 of file axisExtractor.h.
Referenced by avanzar(), and SetPoint().
double axisExtractor::maxpropmasa [private] |
Definition at line 147 of file axisExtractor.h.
Referenced by axisExtractor(), GetMaxPropMasa(), and SetMaxPropMasa().
double axisExtractor::maxpropradio [private] |
Definition at line 146 of file axisExtractor.h.
Referenced by axisExtractor(), GetMaxPropRadio(), and SetMaxPropRadio().
double axisExtractor::minpropmasa [private] |
Definition at line 148 of file axisExtractor.h.
Referenced by avanzar(), axisExtractor(), GetMinPropMasa(), and SetMinPropMasa().
vtkPoints* axisExtractor::points [private] |
Definition at line 141 of file axisExtractor.h.
vtkImageResample* axisExtractor::resample [private] |
Definition at line 137 of file axisExtractor.h.
Referenced by axisExtractor(), Execute(), indextoreal(), realtoindex(), realtoreal(), realtoreal2(), and SetInput().
vtkImageThreshold* axisExtractor::thresh [private] |
Definition at line 133 of file axisExtractor.h.
Referenced by avanzar(), and axisExtractor().
unsigned long axisExtractor::vector[50][4] [private] |
Definition at line 129 of file axisExtractor.h.
Referenced by avanzar(), find_components(), and searc().
unsigned long axisExtractor::vectorb[50][4] [private] |
Definition at line 130 of file axisExtractor.h.
Referenced by avanzar(), find_components(), and searc().