X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2FContour%2FContourExtractData.cxx;h=5c5f0d3c1bfdea5d35f0002e4d3fc7cee62a709f;hb=d2fc2645728a4aea4f0aa0febfa1d7a894ab3ff1;hp=4604878d8e968e079dbbe8e30d4677c5d2321ddd;hpb=61dfb8201f2762bceabe938f978e6ada6f9d0873;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourExtractData.cxx b/lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourExtractData.cxx index 4604878..5c5f0d3 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourExtractData.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourExtractData.cxx @@ -4,57 +4,62 @@ //---------------------------------------------------------------------- ContourExtractData::ContourExtractData( bool okImagesResults) - { - this->imagedata = NULL; +{ + this->imagedata = NULL; imagedataValueResult = NULL; imagedataMaskResult = NULL; this->okImagesResults = okImagesResults; _typeOperation = 0; - } +} - // ------------------------------------------------------------------------ +// ------------------------------------------------------------------------ - ContourExtractData::~ContourExtractData() - { - } +ContourExtractData::~ContourExtractData() +{ +} //---------------------------------------------------------------------- void ContourExtractData::SetImage( vtkImageData* imagedata) - { +{ this->imagedata = imagedata; - + + // RaC 20-11-09 Changes in InitLstContoursLinesYPoints + int ext[6]; + this->imagedata->GetWholeExtent(ext); + _sizeImageY = ext[3]-ext[2]+1; + // init vtk image result : valuesImage maskImage if (this->okImagesResults==true){ InitVtkImagesResult(); } - } +} //---------------------------------------------------------------------- void ContourExtractData::SetZtoBeAnalys( int z ) - { +{ this->zImage = z; - } +} //------------------------------------------------------------------------ - void ContourExtractData::SetLstManualContourModel( std::vector lstManConMod) - { - this->lstManConMod = lstManConMod; - } +void ContourExtractData::SetLstManualContourModel( std::vector lstManConMod) +{ + this->lstManConMod = lstManConMod; +} //------------------------------------------------------------------------ void ContourExtractData::GetMinMaxPoint(int *minPoint, - int *maxPoint, - manualContourModel *manualcontourmodel - ) + int *maxPoint, + manualBaseModel *manualcontourmodel + ) { int i; //int np = manualcontourmodel->GetSizeLstPoints( ); // number of control points // JPRx -// JSTG 26-02-08 --------------------------------------------------------------------------------------- + // JSTG 26-02-08 --------------------------------------------------------------------------------------- //int nps = manualviewbaseecontour->GetNumberOfPointsSpline(); // number of points in the spline int nps = manualcontourmodel->GetNumberOfPointsSpline(); // number of points in the spline -//------------------------------------------------------------------------------------------------------ - -// JSTG 26-02-08 --------------------------------------------------------------------------------------- + //------------------------------------------------------------------------------------------------------ + + // JSTG 26-02-08 --------------------------------------------------------------------------------------- //double x,y,z,t; double x,y,z; //double delta=( double ) ( np ) / ( double ) ( nps ); @@ -73,101 +78,23 @@ void ContourExtractData::GetMinMaxPoint(int *minPoint, minPoint[1]--; maxPoint[0]++; maxPoint[1]++; -//------------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------------ } //------------------------------------------------------------------------ void ContourExtractData::GetMinMaxPoint_Of_LstManConMod( int *minPoint, - int *maxPoint - ) + int *maxPoint + ) { int i,size = lstManConMod.size(); + for(i=0 ; iGetSizeLstPoints( ); // number of control points // JPRx - -// JSTG 26-02-08 --------------------------------------------------------------------------------------- - //int nps = manualviewbaseecontour->GetNumberOfPointsSpline(); // number of points in the spline - int nps = manualcontourmodel->GetNumberOfPointsSpline(); // number of points in the spline - double x1,y1,z1,x2,y2,z2; - double borderX, borderY; - double xx1, yy1,xx2, yy2; - //double delta=( double ) ( np ) / ( double ) ( nps ); - manualcontourmodel->UpdateSpline(); -//------------------------------------------------------------------------------------------------------ - double d; - bool ok; -// if (np>=2) -// { -// JSTG 26-02-08 --------------------------------------------------------------------------------------- -// nps--; - //manualcontourmodel->GetSplinePoint(0,x1,y1,z1); - manualcontourmodel->GetSpline_i_Point(0,&x1,&y1,&z1); - x1=x1+0.5; y1=y1+0.5; - for (i=1; i<=nps; i++) - { - borderX=x1; - borderY=y1; - - ok=false; - //t= delta * (double)(i%nps); - //manualcontourmodel->GetSplinePoint(t,x2,y2,z2); - manualcontourmodel->GetSpline_i_Point(i,&x2,&y2,&z2); - x2=x2+0.5; y2=y2+0.5; -//------------------------------------------------------------------------------------------------------ - - //by triangle similarity - if ( ((y1=y1)&&(yy2)&&(y>=y2)&&(yxx2)&&(x<(xx1-d)) ) { - result++; - borderX=xx1-d; - borderY=y; - } - } // if point inside contour - - //Border verification - if ( (x==(int)borderX) && (y==(int)borderY) ) { inBorder=true; }// if point in border - - // Verification : border in horizontal line - if ( ((int)y1==(int)y2) && ((int)y1==y) && (x1=x1) && (x<=x2)) { inBorder=true; } - if ( ((int)y1==(int)y2) && ((int)y1==y) && (x2=x2) && (x<=x1)) { inBorder=true; } - - if (inBorder==true){ i=nps; } - - x1=x2; y1=y2; z1=z2; - - } // for i -// } //if - - if (inBorder==true) { result=1; } - - return result; -} - //------------------------------------------------------------------------ int ContourExtractData::AnalisisContourInsideV2(int x, int y, int iContour ) @@ -176,8 +103,10 @@ int ContourExtractData::AnalisisContourInsideV2(int x, int y, int iContour ) int result = 0; int i; + //cout<<"RaC ContourExtractData::AnalisisContourInsideV2-iContour:"<=yy1)&&(yy<=yy2) ) { - //by triangle similarity d = ( fabs(xx2-xx1)*(yy-yy1) ) / (yy2-yy1) ; - if ( (xx1xx2)&&(x<(xx1-d)) ) { result++; } - + if ( (xx1<=xx2)&&(x<(xx1+d)) ) { result++; } + if ( (xx1>xx2)&&(x<(xx1-d)) ) { result++; } + if ( (yy2-yy1)/difxx2xx1 >= 1.0) { if (xx1<=xx2) @@ -225,8 +153,8 @@ int ContourExtractData::AnalisisContourInsideV2(int x, int y, int iContour ) } } } // if point inside y - - + + // Finding border looking in vertical direction if ( ((xx1<=xx2)&&(xx>=xx1)&&(xxxx2)&&(xx>=xx2)&&(xx=x1) && (x<=x2)) { inBorder=true; } if ( ((int)y1==(int)y2) && ((int)y1==y) && (x2=x2) && (x<=x1)) { inBorder=true; } - + if (inBorder==true){ i=nps; } } // for i - if (inBorder==true) { result=1; } - + return result; } //------------------------------------------------------------------------ +// typeOperation=0 AND +// typeOperation=1 OR +// typeOperation=2 XOR bool ContourExtractData::isInside(int x, int y, int typeOperation) { bool result = false; @@ -268,47 +198,90 @@ bool ContourExtractData::isInside(int x, int y, int typeOperation) int i,size = this->lstManConMod.size(); int numberInside = 0; + /* RaC 20-11-09 (C1) Changes to use the method without the image. int ext[6]; imagedata->GetExtent(ext); if ((x>=0) && (x<=ext[1]) && (y>=0) && (y<=ext[3])) { + */ - if (typeOperation==0) // AND Intersection + if (typeOperation==0) // AND Intersection + { + for (i=0;iGetTypeModel()==7) + { + if(mbm->IsPoint(x,y)==true) + { + numberLeft=1; + } + }//if + else { -// numberLeft = AnalisisContourInside(x,y, lstManConMod[i] ); numberLeft = AnalisisContourInsideV2(x,y, i ); - if ( (numberLeft % 2) ==1){ numberInside++; } - } - if ( numberInside == (size) ){ result=true; } - } // AND Intersection + }//else + if ( (numberLeft % 2) ==1){ numberInside++; } + } + if ( numberInside == (size) ){ result=true; } + } // AND Intersection - if (typeOperation==1) // OR All + numberLeft=0; + + if (typeOperation==1) // OR All + { + for (i=0;iGetTypeModel()==7) + { + if(mbm->IsPoint(x,y)==true) + { + numberLeft=1; + } + }//if + else { -// numberLeft = AnalisisContourInside(x,y, lstManConMod[i] ); numberLeft = AnalisisContourInsideV2(x,y, i ); - if ( (numberLeft % 2) ==1){ result=true; } - } - } // OR All + }//else + if ( (numberLeft % 2) ==1){ result=true; } + } + } // OR All + + numberLeft=0; - if (typeOperation==2) // XOR crown + if (typeOperation==2) // XOR crown + { + for (i=0;iGetTypeModel()==7) { -// numberLeft = numberLeft + AnalisisContourInside(x,y, lstManConMod[i] ); - numberLeft = numberLeft + AnalisisContourInsideV2(x,y, i ); - } - if ( numberLeft % 2 ==1){ result = true; } - }// XOR crown + if(mbm->IsPoint(x,y)==true) + { + numberLeft=1; + } + }//if + else + { + numberLeft = numberLeft + AnalisisContourInsideV2(x,y, i ); + }//else + } + if ( numberLeft % 2 ==1){ result = true; } + }// XOR crown - } + + //RaC } return result; } @@ -317,10 +290,10 @@ bool ContourExtractData::isInside(int x, int y, int typeOperation) double ContourExtractData::GetDataValue(int x, int y, int z) { -// wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)wxvtkbaseview; -// int z = (int)wxvtk2dbaseview->GetVtkBaseData()->GetZ(); + // wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)wxvtkbaseview; + // int z = (int)wxvtk2dbaseview->GetVtkBaseData()->GetZ(); //JSTG 13-03-08----- -//EED OJO avec JS _zz = z; + //EED OJO avec JS _zz = z; //------------------ double result; void *p; @@ -406,7 +379,7 @@ void ContourExtractData::ResetImageResult(int z) unsigned short *pMask; pValue = (unsigned short *)imagedataValueResult->GetScalarPointer(0,0,z); pMask = (unsigned short *)imagedataMaskResult->GetScalarPointer(0,0,z); - + int ext[6]; imagedataValueResult->GetExtent(ext); @@ -436,16 +409,26 @@ void ContourExtractData::CalculateImageResult() GetMinMaxPoint_Of_LstManConMod(minPoint,maxPoint); InitLstContoursLinesYPoints(); - + for (j=minPoint[1]; j<=maxPoint[1]; j++) { for (i=minPoint[0]; i<=maxPoint[0]; i++) { - if (isInside(i,j,_typeOperation)==true) + + //RaC 20-11-09 Changes specified in isInside (C1) + int ext[6]; + imagedata->GetExtent(ext); + + if ((i>=0) && (i<=ext[1]) && (j>=0) && (j<=ext[3])) { - value = GetDataValue(i,j,zImage); - PutVtkImageDataResultValue(i,j,zImage, value ); - } // if + if (isInside(i,j,_typeOperation)==true) + { + value = GetDataValue(i,j,zImage); + PutVtkImageDataResultValue(i,j,zImage, value ); + } // if + + }//if + } // for i } // for j @@ -460,19 +443,19 @@ void ContourExtractData::CalculateImageResult() //------------------------------------------------------------------------ void ContourExtractData::GetValuesInsideCrown(std::vector *pLstValue, - std::vector *pLstValuePosX, - std::vector *pLstValuePosY, - std::vector *pLstValuePosZ) + std::vector *pLstValuePosX, + std::vector *pLstValuePosY, + std::vector *pLstValuePosZ) { pLstValue->clear(); pLstValuePosX->clear(); pLstValuePosY->clear(); pLstValuePosZ->clear(); -// if (okImagesResults==true) -// { -// ResetImageResult(zImage); -// } + // if (okImagesResults==true) + // { + // ResetImageResult(zImage); + // } int minPoint[2]; int maxPoint[2]; @@ -486,35 +469,44 @@ void ContourExtractData::GetValuesInsideCrown(std::vector *pLstValue, maxPoint[1] = -999999; GetMinMaxPoint_Of_LstManConMod(minPoint,maxPoint); - InitLstContoursLinesYPoints(); + InitLstContoursLinesYPoints(); for (j=minPoint[1]; j<=maxPoint[1]; j++) { for (i=minPoint[0]; i<=maxPoint[0]; i++) { - if (isInside(i,j,_typeOperation)==true) + //RaC 20-11-09 Changes specified in isInside (C1) + int ext[6]; + imagedata->GetExtent(ext); + + if ((i>=0) && (i<=ext[1]) && (j>=0) && (j<=ext[3])) { - value = GetDataValue(i,j,zImage); - -// Borrame -// if (okImagesResults==true){ -// PutVtkImageDataResultValue(i,j,zImage, value ); -// } - - pLstValue -> push_back( value ); - pLstValuePosX -> push_back( i ); - pLstValuePosY -> push_back( j ); - pLstValuePosZ -> push_back( -1 ); - } // if + + if (isInside(i,j,_typeOperation)==true) + { + value = GetDataValue(i,j,zImage); + + // Borrame + // if (okImagesResults==true){ + // PutVtkImageDataResultValue(i,j,zImage, value ); + // } + + pLstValue -> push_back( value ); + pLstValuePosX -> push_back( i ); + pLstValuePosY -> push_back( j ); + pLstValuePosZ -> push_back( -1 ); + } // if + + } //if + } // for } // for - -// Borrame -// if (this->okImagesResults==true){ -// imagedataValueResult->Modified(); -// imagedataMaskResult->Modified(); -// } + // Borrame + // if (this->okImagesResults==true){ + // imagedataValueResult->Modified(); + // imagedataMaskResult->Modified(); + // } } @@ -533,39 +525,39 @@ vtkImageData *ContourExtractData::GetVtkImageMaskResult() // ------------------------------------------------------------------------ void ContourExtractData::InitVtkImagesResult() { - int ext[6]; - int newDim[3]; - double spc[3]; - int scalartype; - - imagedata->GetSpacing(spc); - imagedata->GetExtent(ext); - newDim[0]=ext[1]-ext[0]+1; - newDim[1]=ext[3]-ext[2]+1; - newDim[2]=ext[5]-ext[4]+1; - scalartype = imagedata->GetScalarType(); - - if (imagedataValueResult!=NULL) - { - imagedataValueResult->Delete(); - } - imagedataValueResult = vtkImageData::New(); -// imagedataValueResult->SetScalarType(scalartype); - imagedataValueResult->SetScalarTypeToUnsignedShort(); - imagedataValueResult->SetSpacing(spc); - imagedataValueResult->SetDimensions( newDim ); - imagedataValueResult->AllocateScalars(); - - if (imagedataMaskResult!=NULL) - { - imagedataMaskResult->Delete(); - } - imagedataMaskResult = vtkImageData::New(); -// imagedataMaskResult->SetScalarType(scalartype); - imagedataMaskResult->SetScalarTypeToUnsignedShort(); - imagedataMaskResult->SetSpacing(spc); - imagedataMaskResult->SetDimensions( newDim ); - imagedataMaskResult->AllocateScalars(); + int ext[6]; + int newDim[3]; + double spc[3]; + int scalartype; + + imagedata->GetSpacing(spc); + imagedata->GetExtent(ext); + newDim[0]=ext[1]-ext[0]+1; + newDim[1]=ext[3]-ext[2]+1; + newDim[2]=ext[5]-ext[4]+1; + scalartype = imagedata->GetScalarType(); + + if (imagedataValueResult!=NULL) + { + imagedataValueResult->Delete(); + } + imagedataValueResult = vtkImageData::New(); + // imagedataValueResult->SetScalarType(scalartype); + imagedataValueResult->SetScalarTypeToUnsignedShort(); + imagedataValueResult->SetSpacing(spc); + imagedataValueResult->SetDimensions( newDim ); + imagedataValueResult->AllocateScalars(); + + if (imagedataMaskResult!=NULL) + { + imagedataMaskResult->Delete(); + } + imagedataMaskResult = vtkImageData::New(); + // imagedataMaskResult->SetScalarType(scalartype); + imagedataMaskResult->SetScalarTypeToUnsignedShort(); + imagedataMaskResult->SetSpacing(spc); + imagedataMaskResult->SetDimensions( newDim ); + imagedataMaskResult->AllocateScalars(); } @@ -582,18 +574,18 @@ void ContourExtractData::InitVolumeStatistics() //------------------------------------------------------------------------ void ContourExtractData::SetVolumeStatistics(int rCountRange, - int rsize, - double minValue, - double maxValue, - double acum_average, - double acum_standardeviation) + int rsize, + double minValue, + double maxValue, + double acum_average, + double acum_standardeviation) { vol_rCountRange = vol_rCountRange + rCountRange; vol_rsize = vol_rsize + rsize; - + if (minValuevol_maxValue){ vol_maxValue = maxValue; } - + vol_acum_average = vol_acum_average + acum_average; vol_acum_standardeviation = vol_acum_standardeviation + acum_standardeviation; } @@ -625,25 +617,25 @@ void ContourExtractData::Statistics( std::vector *inputLstValue, double *rmax, double *raverage, double *rstandardeviation - ) + ) { - double min = 0; - double max = 0; - double average = 0; - double standardeviation = 0; - double acum_average = 0; - double acum_standardeviation = 0; - int size = 0; - int countRange = 0; - double ng; - - if (inputLstValue!=NULL) - { + double min = 0; + double max = 0; + double average = 0; + double standardeviation = 0; + double acum_average = 0; + double acum_standardeviation = 0; + int size = 0; + int countRange = 0; + double ng; + + if (inputLstValue!=NULL) + { size=inputLstValue->size(); if (size>0){ - max=(*inputLstValue)[0]; - min=(*inputLstValue)[0]; - // Average , countRange + max=(*inputLstValue)[0]; + min=(*inputLstValue)[0]; + // Average , countRange int i; for ( i=0; i *inputLstValue, } // for average average = acum_average / size; - // Standar Deviation + // Standar Deviation acum_standardeviation=0; double tmp; - for ( i=0; iGetNumberOfPointsSpline(); // number of points in the spline manualcontourmodel->UpdateSpline(); //------------------------------------------------------------------------------------------------------ - + for (y=0;yGetSpline_i_Point(0,&x1,&y1,&z1); x1=x1+0.5; y1=y1+0.5; - for (i=1; i<=nps; i++) + for (i=1; iGetSpline_i_Point(i,&x2,&y2,&z2); x2=x2+0.5; y2=y2+0.5; @@ -720,22 +712,24 @@ void ContourExtractData::InitLstContoursLinesYPoints() { // init InInside Optimisation int i; - + _lstlstlstVecX1.clear(); _lstlstlstVecY1.clear(); _lstlstlstVecX2.clear(); _lstlstlstVecY2.clear(); - + + /* RaC 20-11-09 int ext[6]; this->imagedata->GetWholeExtent(ext); int sizeY = ext[3]-ext[2]+1; + */ std::vector vecDouble; std::vector< std::vector > vecVecDouble; - for ( i=0 ; i