Получение данных изображения с устройства досмотра чемоданов рентгеновского снимка

Мне нужно получить рентгеновский снимок с «рентгеновского досмотрового устройства». Я использую EPI, связанный с устройством, но, к сожалению, он неполный, и я должен сделать этот шаг самостоятельно. Часть руководства: «Сигналы от печатных плат диодной матрицы передаются на печатную плату аналого-цифрового преобразователя по ленточному кабелю. Плата аналого-цифрового преобразователя затем преобразует аналоговые данные от детекторных диодов в цифровые. данные на печатную плату CI, где они обрабатываются и отправляются на компьютер через карту National Instruments. Затем программное обеспечение машины обрабатывает сигналы и создает изображение». Теперь я не знаю, как преобразовать данные диодной матрицы в изображение. Моя первая проблема заключается в том, что я не знаю, сколько этих данных и сколько места они занимают? Когда я пытаюсь прочитать исходные данные, У меня есть только указатель для запуска данных из памяти, но я не знаю, как далеко я должен идти? В следующем коде я установил число 10 для проверки, но независимо от того, насколько оно увеличивается, он все равно печатает данные до 1000 (в методе printbuffer).

      void printbuffer(unsigned char* b) {
    int i;
    cout << hex << setfill('0');
    for (i = 0; i < 10; i += 1)
        cout << setw(2) << static_cast<int>(b[i]);
    cout << dec << endl;
}


void RunTest2(XAPI* x) {


    // Show runtime info
    cout << "Time for one line is " << x->Get(XAPI_Px_LineTime) << endl;
    cout << "Line width is " << x->Get(XAPI_Px_LineWidth) << " bytes" << endl;

    // Configure detector
    x->Configure();

    // Acquisition loop
    cout << "Getting 30 buffers of 1000 lines each..." << endl;
    x->Start(1000);
    int count = 0;
    unsigned char* pData;
    int ret, t = GetTickCounts();
    while ((ret = x->GetBlock(reinterpret_cast<void**>(&pData), 10000))
        == XAPI_OK) {

        // Display part of block
        // DO SOMETHING REAL WITH THE IMAGE DATA HERE
        cout << "ret: " << ret << " time: " << GetTickCounts() - t << endl;

        printbuffer(pData);

        t = GetTickCounts();

        // Finished with block
        x->ReleaseBlock();

        // This example just finishes after 30 buffers
        if (++count > 30)
            break;

    }

    // Stop Acquisition
    cout << "Stopping... (ret=" << ret << ")" << endl;
    x->Stop();

}

0 ответов

Другие вопросы по тегам