Обновление образа itk в пользовательском интерфейсе Qt - PullRequest
1 голос
/ 12 сентября 2011

У меня есть проблема, о которой я хотел бы сказать вам, потому что в некоторые дни у меня нет новых идей.

У меня есть изображение, на которое указывает двойной * указатель, и я хочу перевестиэто в itk :: smartpointer для обновления пользовательского графического интерфейса, для этого я сделал этот метод:

void prueba_r01::double2itk( double *im_proc, ImageType::Pointer *salida, int alto, int ancho)
// This method translate the double* image into itk:smartpointer image
ImageType::IndexType pixelIndex; // pixelIndex[0]= index x-axis; pixelIndex[1] = index y-axisy
ImageType::PixelType pixelValue; 
ImageType::PixelType aux; //auxiliar variable for checking the behaviour of the programm

// Doing a sweep of all the image (is in double *im_proc) translating the values into itk pointer format
for (int x=0; x<ancho; x++){ // ancho: widht of the image
    pixelIndex[0]=x;//x position
    for (int y=0; y<alto; y++){ // alto: height of the image
        pixelIndex[1]=y;//y position
        pixelValue= *(im_proc+x+ancho*y);
        (*salida)->SetPixel(pixelIndex,pixelValue);
        aux = (*salida)->GetPixel(pixelIndex); // checking that the image has been correctly transtaled from im_proc to salida-- > CHECKED
    }

}
}

И затем вызывается здесь:

    //Translation of the double* image into itk:smartpointer image
    double2itk(out_inv, &(ui.imageframe->imagereader), alto, ancho); 

И после этого,обновлен пользовательский интерфейс:

 // Update of the image shonw in the user interface
ui.imageframe->update();

Проблема в том, что кажется, что все работает правильно, но изображение в интерфейсе не обновляется.Другим вариантом, также допустимым для моего проекта, может быть сохранение изображения в файле «.bmp» или «.jpeg».Может ли кто-нибудь помочь мне?Любые идеи о том, что не работает должным образом?Есть ли какая-либо функция для создания файлов этого изображения?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

ITK имеет встроенные механизмы для этого с некоторыми значительными преимуществами безопасности. Кроме того: они могут использоваться в конвейере, как любой источник изображения, и поскольку они используют ваш существующий массив, они будут значительно быстрее (я думаю), чем циклически перемещаться по индексам.

http://www.itk.org/Doxygen/html/classitk_1_1ImportImageFilter.html

http://www.itk.org/Doxygen/html/classitk_1_1ImportImageContainer.html

http://www.itk.org/Wiki/ITK/Examples/IO/ImportImageFilter

1 голос
/ 24 сентября 2011

Вы должны использовать ImportImageContainer и быть очень осторожным при настройке параметров управления памятью.

По умолчанию ITK будет очищаться после себя и будет ожидать удаления памяти, на которую указывает ваш внешний указатель.

Примеры этого приведены в Руководстве пользователя.

Есть также очень хороший пример вики: http://www.vtk.org/Wiki/ITK/Examples/IO/ImportImageFilter

...