Проблема с двойной точностью и смартпоинтером в ITK

У меня проблема в том, что я открываю изображение из графического интерфейса с помощью Qt (через класс, который я создал ImageFrame, этот класс определил PixelType следующим образом:

typedef double PixelType;
typedef itk::Image<PixelType,2> ImageType;

и после извлечения изображения я бы солгал, чтобы сделать БПФ, ввод которого является реальными данными. Ошибка гласит: невозможно преобразовать третий параметр «itk::SmartPointer» в «double*» с помощью объекта класса ImageFrame (который определил тип пикселя как двойной).

1>.\prueba_r01.cpp(126): ошибка C2664: 'fftw_plan_dft_r2c_2d': нет возможности преобразовать параметр 3 из 'itk::SmartPointer' в 'двойное *'
1> с
1> [< br> 1> TObjectType=itk::Image
1> ]
1> Нет доступного оператора преобразования, определенного для использования, которое может быть реализовано для преобразования, или нет, если нет возможности выполнить преобразование.

Теперь я не могу понять, почему он не может вычислить fft, если пиксель имеет двойной формат. Кто-нибудь может дать мне представление о том, как решить эту проблему? Всем большое спасибо заранее!


person Antonio    schedule 06.07.2011    source источник
comment
почему люди минусуют? этот вопрос абсолютно закономерен   -  person CharlesB    schedule 06.07.2011


Ответы (2)


Это связано с тем, что image.Pointer() — это объект интеллектуального указателя, оболочка вокруг указателя чтения на ваши данные. Вы должны передать image.Pointer().GetPointer() в fftw.

person CharlesB    schedule 06.07.2011
comment
Так просто, как вы сказали, большое спасибо за ваше время в такой простой вещи, я очень благодарен - person Antonio; 06.07.2011
comment
Не хватило этого сделать, информация как-то теряется нет данных двойной указатель в* после этого кода: double in = (double) imagen.GetPointer() - person Antonio; 22.07.2011

Чтобы получить данные о пикселях (двойной *), вам нужно использовать

image->GetBufferPointer();

Это вернет двойной *, который можно передать в FFTW.

person Daniel Blezek    schedule 22.09.2011