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; }
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); }
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(); }
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; }