bool IbisItkVtkConverter::ConvertVtkImageToItkImage( IbisRGBImageType::Pointer itkOutputImage, vtkImageData *image, vtkMatrix4x4 *imageMatrix)
{
    if( !itkOutputImage )
        return false;

    itkOutputImage->Initialize();
    int * dimensions = image->GetDimensions();
    IbisItkFloat3ImageType::SizeType  size;
    IbisItkFloat3ImageType::IndexType start;
    IbisItkFloat3ImageType::RegionType region;
    const long unsigned int numberOfPixels =  dimensions[0] * dimensions[1] * dimensions[2];
    for (int i = 0; i < 3; i++)
    {
        size[i] = dimensions[i];
    }

    start.Fill(0);
    region.SetIndex( start );
    region.SetSize( size );
    itkOutputImage->SetRegions(region);

    itk::Matrix< double, 3,3 > dirCosine;
    itk::Vector< double, 3 > origin;
    itk::Vector< double, 3 > itkOrigin;
    // set direction cosines
    vtkMatrix4x4 *tmpMat = vtkMatrix4x4::New();
    vtkMatrix4x4::Transpose( imageMatrix, tmpMat );
    double step[3], mincStartPoint[3], dirCos[3][3];
    for( int i = 0; i < 3; i++ )
    {
        double row[4];
        GetMatRow( tmpMat, i, row );
        step[i] = vtkMath::Dot( row, row );
        step[i] = sqrt( step[i] );
        for( int j = 0; j < 3; j++ )
        {
            dirCos[i][j] = tmpMat->GetElement( i, j ) / step[i];
            dirCosine[j][i] = dirCos[i][j];
        }
    }

    double rotation[3][3];
    vtkMath::Transpose3x3( dirCos, rotation );
    double row3[4];
    GetMatRow( tmpMat, 3, row3 );
    vtkMath::LinearSolve3x3( rotation, row3, mincStartPoint );
    tmpMat->Delete();

    for( int i = 0; i < 3; i++ )
        origin[i] =  mincStartPoint[i];
    itkOrigin = dirCosine * origin;
    itkOutputImage->SetSpacing(step);
    itkOutputImage->SetOrigin(itkOrigin);
    itkOutputImage->SetDirection(dirCosine);

    itkOutputImage->Allocate();
    RGBPixelType *itkImageBuffer = itkOutputImage->GetBufferPointer();
    memcpy(itkImageBuffer, image->GetScalarPointer(), numberOfPixels*sizeof(RGBPixelType));
    return true;
}
Beispiel #2
0
void CGppe::Predict_CGppe_Laplace(double sigma, MatrixXd t, MatrixXd x, VectorXd idx_global, VectorXd ind_t, VectorXd ind_x,
                                MatrixXd tstar, MatrixXd test_pair)
{

    int Kt_ss = 1;
    double sigma_star, val;
    MatrixXd Kx_star, Kx_star_star, kstar, Kss, Css;
    MatrixXd Kt_star = covfunc_t->Compute(t, tstar);

    Kx_star = GetMatRow(Kx, test_pair.transpose()).transpose(); //maybe need some transpose?

    Kx_star_star = GetMat(Kx, test_pair.transpose(), test_pair.transpose()); // test to test
    kstar = Kron(Kt_star, Kx_star);
    kstar = GetMatRow(kstar, idx_global);

    Kss = Kt_ss * Kx_star_star;

    mustar = kstar.transpose() * Kinv * GetVec(f, idx_global);
    Css    = Kss - kstar.transpose() * W * llt.solve(Kinv * kstar);

    sigma_star = sqrt(Css(0, 0) + Css(1, 1) - 2 * Css(0, 1) + pow(sigma, 2));
    val = ( mustar(0) - mustar(1) ) / sigma_star;
    p   = normcdf(val);

}
Beispiel #3
0
void CGppe::Predictive_Utility_Distribution(MatrixXd t, MatrixXd tstar, int N, VectorXd idx_global)
{
    int Kt_ss = 1;
    VectorXd idx_xstar(N);
    MatrixXd Kstar, Kx_star_star, Kx_star, Kss, Css, Kt_star;
    for (int i = 0;i < N;i++)
    {
        idx_xstar(i) = i;
    }

    Kt_star = covfunc_t->Compute(t, tstar);
    Kx_star = GetMatRow(Kx, idx_xstar);//need to check for tranpose later?
    Kx_star_star = GetMat(Kx, idx_xstar, idx_xstar);

    Kstar = Kron(Kt_star, Kx_star);

    Kstar = GetMatRow(Kstar, idx_global);

    Kss = Kt_ss * Kx_star_star;
    mustar = Kstar.transpose() * Kinv * GetVec(f, idx_global);
    Css = Kss - Kstar.transpose() * W * llt.solve(Kinv * Kstar);
    varstar = Css.diagonal();
}
Beispiel #4
0
double CGppe::maximum_expected_improvement(const VectorXd & theta_t, const VectorXd& theta_x, const double& sigma,
        const MatrixXd& t, const MatrixXd & x, const VectorXd& idx_global, const VectorXd& ind_t, const VectorXd& ind_x, MatrixXd tstar, int N, double fbest)
{
    VectorXd idx_xstar=Nfirst(N);
    int Kt_ss = 1;
    double  mei;
    MatrixXd Kx_star, Kx_star_star, kstar, Kss, Css;
    MatrixXd Kt_star = covfunc_t->Compute(t, tstar);
	//dsp(GetKinv(),"Kinv");


    Kx_star = GetMatRow(Kx, idx_xstar.transpose()); //maybe need some transpose?

    Kx_star_star = GetMat(Kx, idx_xstar.transpose(), idx_xstar.transpose()); // test to test
    kstar = Kron(Kt_star, Kx_star);

    kstar = GetMatRow(kstar, idx_global);
    Kss = Kt_ss * Kx_star_star;


    mustar = kstar.transpose() * Kinv * GetVec(f, idx_global);
    Css    = Kss - kstar.transpose() * W * llt.solve(Kinv * kstar);
    varstar = Css.diagonal();


    VectorXd sigmastar = sqrt(varstar.array());
    VectorXd z = (fbest - mustar.array()) / sigmastar.array();
    VectorXd pdfval = normpdf(z);
    VectorXd cdfval = normcdf(z);
    VectorXd inter = z.array() * (1 - cdfval.array());
    VectorXd el = sigmastar.cwiseProduct(inter - pdfval);

	el=-1*el;
    mei = el.maxCoeff();
    //dsp(mei,"mei");
    return mei;
}
bool IbisItkVtkConverter::ConvertVtkImageToItkImage( IbisItkFloat3ImageType::Pointer itkOutputImage, vtkImageData *img, vtkMatrix4x4 *imageMatrix)
{
    if( !itkOutputImage )
        return false;

    itkOutputImage->Initialize();
    int numberOfScalarComponents = img->GetNumberOfScalarComponents();
    vtkImageData *grayImage = img;
    vtkSmartPointer<vtkImageLuminance> luminanceFilter = vtkSmartPointer<vtkImageLuminance>::New();
    if (numberOfScalarComponents > 1)
    {
        luminanceFilter->SetInputData(img);
        luminanceFilter->Update();
        grayImage = luminanceFilter->GetOutput();
    }
    vtkImageData * image = grayImage;
    vtkSmartPointer<vtkImageShiftScale> shifter = vtkSmartPointer<vtkImageShiftScale>::New();
    if (img->GetScalarType() != VTK_FLOAT)
    {
        shifter->SetOutputScalarType(VTK_FLOAT);
        shifter->SetClampOverflow(1);
        shifter->SetInputData(grayImage);
        shifter->SetShift(0);
        shifter->SetScale(1.0);
        shifter->Update();
        image = shifter->GetOutput();
    }

    int * dimensions = img->GetDimensions();
    IbisItkFloat3ImageType::SizeType  size;
    IbisItkFloat3ImageType::IndexType start;
    IbisItkFloat3ImageType::RegionType region;
    const long unsigned int numberOfPixels =  dimensions[0] * dimensions[1] * dimensions[2];
    for (int i = 0; i < 3; i++)
    {
        size[i] = dimensions[i];
    }

    start.Fill(0);
    region.SetIndex( start );
    region.SetSize( size );
    itkOutputImage->SetRegions(region);

    itk::Matrix< double, 3,3 > dirCosine;
    itk::Vector< double, 3 > origin;
    itk::Vector< double, 3 > itkOrigin;
    // set direction cosines
    vtkMatrix4x4 *tmpMat = vtkMatrix4x4::New();
    vtkMatrix4x4::Transpose( imageMatrix, tmpMat );
    double step[3], mincStartPoint[3], dirCos[3][3];
    for( int i = 0; i < 3; i++ )
    {
        double row[4];
        GetMatRow( tmpMat, i, row );
        step[i] = vtkMath::Dot( row, row );
        step[i] = sqrt( step[i] );
        for( int j = 0; j < 3; j++ )
        {
            dirCos[i][j] = tmpMat->GetElement( i, j ) / step[i];
            dirCosine[j][i] = dirCos[i][j];
        }
    }

    double rotation[3][3];
    vtkMath::Transpose3x3( dirCos, rotation );
    double row3[4];
    GetMatRow( tmpMat, 3, row3 );
    vtkMath::LinearSolve3x3( rotation, row3, mincStartPoint );
    tmpMat->Delete();

    for( int i = 0; i < 3; i++ )
        origin[i] =  mincStartPoint[i];
    itkOrigin = dirCosine * origin;
    itkOutputImage->SetSpacing(step);
    itkOutputImage->SetOrigin(itkOrigin);
    itkOutputImage->SetDirection(dirCosine);
    itkOutputImage->Allocate();
    float *itkImageBuffer = itkOutputImage->GetBufferPointer();
    memcpy(itkImageBuffer, image->GetScalarPointer(), numberOfPixels*sizeof(float));
    return true;
}