эффективное извлечение мозаики TIFF C++

string зарезервированное слово, но String просто имя класса. Это означает, что string не может использоваться в качестве имени переменной отдельно.

, Если бы по некоторым причинам Вы хотели переменную, названную строка , Вы видели бы только первую из этих компиляций:

StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 

, Если Вы действительно хотите имя переменной, названное строка , можно использовать @ в качестве префикса:

StringBuilder @string = new StringBuilder();

Другое критическое различие: Переполнение стека выделяет их по-другому.

8
задан Adriaan 14 January 2010 в 21:55
поделиться

4 ответа

Просто отобразите свой файл.

http://www.kernel.org/doc/man-pages/online/pages/man2/mmap.2.html

2
ответ дан 5 December 2019 в 22:19
поделиться

Я сделал кое-что подобное для работы с произвольно большим файлом формата TARGA(TGA). Дело в том, что при работе с таким файлом изображение не сжимается. Вы можете вычислить положение любого произвольного пикселя внутри изображения и найти его с помощью простого поиска. Вы можете рассмотреть формат targa, если у вас есть возможность указать кодировку изображения.

Если не существует множества разновидностей форматов TIFF. Скорее всего, вы захотите использовать библиотеку, если они уже прошли через все трудности, связанные с поддержкой всех различных форматов.

0
ответ дан 5 December 2019 в 22:19
поделиться

[Major edit 14 Jan 10]

Я был немного сбит с толку вашим упоминанием о плитке, когда плитка не плитка.

Я действительно использую плиточные/пирамидальные изображения TIFF. Я создал их с VIPS

vips im_vips2tiff source_image output_image.tif:none,tile:256x256,pyramid

Я думаю, что вы можете сделать это с :

vips im_vips2tiff source_image output_image.tif:none,tile:256x256,flat

Вы можете поэкспериментировать с размером плитки. Тогда вы сможете читать, используя TIFFReadEncodedTile.

Хранилище с несколькими разрешениями, использующее пирамидальные развязки, намного быстрее, если вам нужно увеличить/уменьшить масштаб. Вы также можете использовать эту функцию для получения грубого изображения, за которым почти сразу же следует подробное изображение.

После переключения на (соответствующего размера) плиточное хранилище (что принесет вам MASSIVE улучшение производительности для случайного доступа!), вашим узким местом будет диск io. Чтение файлов происходит намного быстрее, если читать их последовательно. Здесь маппинг может быть решением.

Некоторые полезные ссылки:

VIPS IIPImage LibTiff.NET stackoverflow VIPS - это библиотека обработки изображений, которая может сделать гораздо больше, чем просто чтение/запись. Она имеет свой собственный, очень эффективный внутренний формат. Она имеет хорошую документацию по алгоритмам. Во-первых, она отделяет обработку от файловой системы, позволяя кэшировать плитки.

IIPImage - это многомасштабируемая библиотека веб-сервера/браузера. Я нашел документацию очень хорошим источником информации по мульти-разрешающей визуализации (например, google maps)

Другое решение на этой странице, использующее mmap, эффективно только для "маленьких" файлов. Я часто сталкивался с 32-битными границами. Обычно выделение 1 Гбайта памяти при 32-битных os (с 4 Гбайтами оперативной памяти) не удается из-за того, что даже виртуальная память фрагментируется после одного-двух запусков приложения. Тем не менее, памяти достаточно, чтобы кэшировать части или весь образ. Больше памяти = больше производительности.

3
ответ дан 5 December 2019 в 22:19
поделиться

Спасибо всем за ответы.

На самом деле изменение способа, которым требовались тайлы, позволило мне извлекать тайлы из файлов на жестком диске последовательно, а не случайным образом. Это позволило мне загрузить часть файла в оперативную память и извлечь оттуда плитки.

Повышение эффективности было огромным. В противном случае, если вам нужен произвольный доступ к файлу, mmap - хорошее дело.

С уважением, Хуан

2
ответ дан 5 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: