#include "pHistogram.h"
//#include "vtkJPEGReader.h"
#include "vtkImageData.h"
-#include "vtkImageCast.h"
-//-----------------
-// C++
-//-----------------
+#include "vtkImageCast.h"
+#include "vtkComputeHistogram2DOutliers.h"
+#include "vtkTable.h"
+
+
#include <iostream>
#include <fstream>
#include <string>
//----------------------------------------------------------------------------
pHistogram::pHistogram(std::string filePath)
{
- path=filePath;
- points= vtkImageData::New();
- size=100;
- sizeImage=0;
+ path = filePath;
+ points = vtkImageData::New();
+ size = 100;
+ sizeImage = 0;
buildHistogram();
}
pHistogram::pHistogram(vtkImageData* imageData)
{
- points= vtkImageData::New();
- size=100;
- sizeImage=0;
- //cast
- /*
- vtkImageCast* cast= vtkImageCast::New();
- cast->SetInput(imageData);
- cast->SetOutputScalarTypeToInt();
- cast->Update();
- */
- //build the histogram
+ points = vtkImageData::New();
+ size = 100;
+ sizeImage = 0;
buildHistogram(imageData);
}
+//----------------------------------------------------------------------------
pHistogram::~pHistogram()
{
if(points!=NULL)points->Delete();
}
-//----------------------------------------------------------------------------
-// Methods
-//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
void pHistogram::setImagePath(std::string filePath)
{
path=filePath;
}
+//----------------------------------------------------------------------------
void pHistogram::buildHistogram()
{
/*
imageData->GetScalarRange(range);
initializePoints(size);
setPoints(imageData);
-
}
/*
{
//setting image data of the points
points->SetDimensions(xDimension,1,1);
- points->SetScalarTypeToUnsignedShort();
+//EED points->SetScalarTypeToUnsignedShort();
+ points->SetScalarTypeToDouble();
points->AllocateScalars();
points->Update();
}
*/
void pHistogram::setPoints(vtkImageData* imageData)
{
+
+printf("EED pHistogram::setPoints Trinng new histogram ..\n");
+/*
+printf("EED pHistogram::setPoints Test: vtkPComputeHistogram2DOutliers\n");
+vtkComputeHistogram2DOutliers *vtkhist = vtkComputeHistogram2DOutliers::New();
+vtkhist->SetPreferredNumberOfOutliers(10);
+vtkhist->SetInput(imageData);
+vtkTable *resulttable = vtkhist->GetOutputTable();
+
+printf("EED pHistogram::setPoints rows:%d\n", (int)(resulttable->GetNumberOfRows()) );
+printf("EED pHistogram::setPoints colums:%d\n", (int)(resulttable->GetNumberOfColumns()) );
+*/
+
/*
Pointers
*/
- unsigned short* dataImagePointer=NULL;
- unsigned short* dataHistogramPointer=NULL;
- dataImagePointer=(unsigned short*)imageData->GetScalarPointer(0,0,0);
- dataHistogramPointer=(unsigned short*)points->GetScalarPointer(0,0,0);
+ char* dataImagePointerC = (char*)imageData->GetScalarPointer(0,0,0);
+ unsigned char* dataImagePointerUC = (unsigned char*)imageData->GetScalarPointer(0,0,0);
+ short* dataImagePointerS = (short*)imageData->GetScalarPointer(0,0,0);
+ unsigned short* dataImagePointerUS = (unsigned short*)imageData->GetScalarPointer(0,0,0);
+ float* dataImagePointerF = (float*)imageData->GetScalarPointer(0,0,0);
+ double* dataImagePointerD = (double*)imageData->GetScalarPointer(0,0,0);
+ double* dataHistogramPointer = (double*)points->GetScalarPointer(0,0,0);
/*
Range of greys
*/
double range[2];
if(imageData==NULL)
- range[1]=1;
- else
+ {
+ range[1] = 1;
+ } else {
imageData->GetScalarRange(range);
+ } // imageData
+
/*
Setting the minimun and maximum levels of grey
*/
- maxLevelOfGrey=(int)range[1];
- minLevelOfGrey=(int)range[0];
+ maxLevelOfGrey = range[1];
+ minLevelOfGrey = range[0];
//std::cout<<"maxLevelOfGrey "<<maxLevelOfGrey<<" minLevelOfGrey "<<minLevelOfGrey<<std::endl;
/*
Image Size
int ext[6];
imageData->GetExtent(ext);
int sx,sy,sz;
- sx=ext[1]+1;
- sy=ext[3]+1;
- sz=ext[5]+1;
+ sx = ext[1]-ext[0]+1;
+ sy = ext[3]-ext[2]+1;
+ sz = ext[5]-ext[4]+1;
sizeImage=sx*sy*sz;
dataHistogramPointer[i]=0;
}
- /*
- Constructing the Histogram
- */
- //int k=size/(maxLevelOfGrey-minLevelOfGrey);
- int j=0;
- for(i=0;i<sizeImage;i++)
+ long int j=0;
+
+
+ if (imageData->GetScalarType()==VTK_CHAR)
{
- /*
- hashing the histogram
- */
- //double p=((float)*dataImagePointer-minLevelOfGrey);
- //j=p*k;
-
- j=getIndex(*dataImagePointer);
- //std::cout<<j<<std::endl;
- dataHistogramPointer[j]++;
- dataImagePointer++;
- }
- /*
- BORRAME
- */
- /*
- k=0;
- for(i=0;i<size;i++)
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerC);
+ dataImagePointerC++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // CHAR
+
+ if (imageData->GetScalarType()==VTK_UNSIGNED_CHAR)
{
- k=dataHistogramPointer[i];
- }
- */
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerUC);
+ dataImagePointerUC++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // UNSIGNED CHAR
+
+
+ if (imageData->GetScalarType()==VTK_SHORT)
+ {
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerS);
+ dataImagePointerS++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // SHORT
+
+ if (imageData->GetScalarType()==VTK_UNSIGNED_SHORT)
+ {
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerUS);
+ dataImagePointerUS++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // UNSIGNED SHORT
+
+
+ if (imageData->GetScalarType()==VTK_FLOAT)
+ {
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerF);
+ dataImagePointerF++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // FLOAT
+
+
+ if (imageData->GetScalarType()==VTK_DOUBLE)
+ {
+ for(i=0;i<sizeImage;i++)
+ {
+ j=getIndex(*dataImagePointerD);
+ dataImagePointerD++;
+ dataHistogramPointer[j]++;
+ } // for i
+ } // DOUBLE
+
}
+
+
/*
Returns the poins of the histograms
*/
image
@gValue: Level of grey for which wants the index in the histogrram
*/
-int pHistogram::getIndex(int gValue)
+int pHistogram::getIndex(double gValue)
{
-
- double p=((double)gValue-minLevelOfGrey)/(maxLevelOfGrey-minLevelOfGrey);
+ double p;
+ double diff=maxLevelOfGrey-minLevelOfGrey;
+ if (diff!=0)
+ {
+ p=((double)gValue-minLevelOfGrey)/(maxLevelOfGrey-minLevelOfGrey);
+ } else {
+ p=0;
+ }
double k=p*(size-1);
//std::cout<<"gValue "<<gValue<<" k "<<k<<std::endl;
return (int)k;
//double p=((float)gValue-minLevelOfGrey)/(maxLevelOfGrey-minLevelOfGrey); // JPRx
//double k=p*size;
- unsigned short* dataHistogramPointer=NULL;
- dataHistogramPointer=(unsigned short*)points->GetScalarPointer(0,0,0);
-
+ double* dataHistogramPointer = dataHistogramPointer=(double*)points->GetScalarPointer(0,0,0);
return dataHistogramPointer[gValue];
}