Я заметил, что эта простая программа ArrayFire вызывает сильное искажение загруженных изображений TIFF:
#include <iostream>
#include <arrayfire.h>
int main( int argc, char** argv ) {
af::array img = af::loadImage( argv[1] );
double mn, mx;
unsigned idxn, idxx;
af::min( &mn, &idxn, img );
af::max( &mx, &idxx, img );
std::cout << "Image size = " << img.dims()[0] << ", " << img.dims()[1] << '\n';
std::cout << "Data type = " << img.type() << '\n';
std::cout << "Min = " << mn << " (at " << idxn << ")\n";
std::cout << "Max = " << mx << " (at " << idxx << ")\n";
af::saveImage( argv[2], img );
return 0;
}
Затем я компилирую и запускаю простое (монохромное) изображение:
./a.out orig.tif out.tif
со следующим выводом:
Image size = 256, 256
Data type = 0
Min = 0 (at 65535)
Max = 81.5025 (at 31356)
Когда я визуализирую эти изображения, я получаю следующий результат:
что, конечно, не то, что ожидается от ArrayFire; Я ожидаю, что он выведет точно такое же изображение, так как я не вносил в него никаких изменений. К сожалению, я не знаю достаточно о формате изображения TIFF или графическом интерфейсе ArrayFire, чтобы понять, что происходит. Я делаю что-то не так при загрузке изображения? (Я следовал документации ArrayFire для loadImage
а также saveImage
).
Я также пытался использовать loadImageNative
а также saveImageNative
в качестве альтернативы, но последний возвращает 4-слойное изображение TIFF, в то время как исходное изображение представляет собой только 1-слойный TIFF.
Любая помощь от экспертов ArrayFire будет отличной.
Спасибо!
Задача ещё не решена.
Других решений пока нет …