示例#1
0
void myefx::updateControllers() 
{ 
	// immagini in input/output:
	timageInOut=getChannelImage("Out");

	// proprietà:
	Controller_k1=(ctInt *)getProperty("Vel1");
	Controller_k2=(ctInt *)getProperty("Vel2");
} 
示例#2
0
文件: Main.cpp 项目: pengwg/fastrecon
int main(int argc, char *argv[])
{
    ProgramOptions options(argc, argv);
    options.showParameters();
    ReconParameters params = options.getReconParameters();

    // -------------- Load multi-channel data -----------------
    auto reconData = ReconData<float>::Create(params.samples, params.projections, options.isGPU());
    loadReconData(params, reconData.get());

    unsigned threads = std::min(reconData->channels(), omp_get_num_procs());

    QElapsedTimer timer0, timer;
    timer0.start();

    // -------------- Gridding -------------------------------
    timer.start();
    auto grid = GridLut<float>::Create(*reconData);

#ifdef BUILD_CUDA
    if (options.isGPU()) {
        dynamic_cast<cuGridLut<float> *>(grid.get())->setNumOfPartitions(25);
    }
#endif // BUILD_CUDA

    grid->setNumOfThreads(threads);
    grid->plan(params.rcxres, params.overgridding_factor, params.kernel_width, 512);
    auto imgData = grid->execute();
    std::cout << "Gridding total time " << timer.elapsed() << " ms" << std::endl;

    ImageData<float> imgMap;
    if (params.pils)
        imgMap = *imgData;

    auto filter = ImageFilter<float>::Create(*imgData);
    filter->setNumOfThreads(threads);

    // --------------- FFT ----------------------------------
    filter->fftPlan();
    
    timer.restart();
    filter->fftExecute();
    filter->fftShift();
    std::cout << "FFT total time " << timer.restart() << " ms" << std::endl;

    // -------------- Recon Methods -----------------------------------
    timer.restart();
    if (params.pils) {
        auto filterMap = ImageFilter<float>::Create(imgMap);
        std::cout << "\nRecon PILS... " << std::endl;
        filterMap->lowFilter(22);
        std::cout << "\nLow pass filtering | " << timer.restart() << " ms" << std::endl;

        std::cout << "\nFFT low res image... " << std::endl;
        filterMap->fftExecute();
        filterMap->fftShift();
        std::cout << "FFT total time " << timer.restart() << " ms" << std::endl;

        filterMap->normalize();

        std::cout << "\nSum of Square Field Map..." << std::flush;
        filter->SOS(imgMap, {params.rcxres, params.rcyres, params.rczres});
        std::cout << " | " << timer.elapsed() << " ms" << std::endl;
    }
    else
    {
        std::cout << "\nRecon SOS... " << std::flush;
        filter->SOS({params.rcxres, params.rcyres, params.rczres});
        std::cout << " | " << timer.elapsed() << " ms" << std::endl;
    }

    std::cout << "\nProgram total time excluding I/O: " << timer0.elapsed() / 1000.0 << " s" << std::endl;

    // -------------------------- Save Data ---------------------------
    QFile file(params.path + params.outFile);
    file.open(QIODevice::WriteOnly);
    for (const auto &data : *imgData->getChannelImage()) {
        auto value = std::abs(data);
        file.write((const char *)&value, sizeof(decltype(value)));
    }
    file.close();

    // -------------------------- Display Data -----------------------
    int n = 0;
    if (options.isDisplay())
    {
        QApplication app(argc, argv);
        for (int i = 0; i < imgData->channels(); i++)
        {
            auto data = imgData->getChannelImage(i);
            displayData(*data, imgData->imageSize(), QString("channel ") + QString::number(n++));
        }
        return app.exec();
    }
    else
        return 0;
}