Каналы, разделенные по строкам (BIL), попикселная запись спектральных каналов (BIP) и поканальная запись (BSQ) - три основных способа организации данных в многоканальных изображениях. BIL, BIP и BSQ не являются форматами изображений, это методы записи значений пикселов в файл. Эти файлы поддерживают отображение одно- и многоканальных изображений и могут хранить черно-белые, в градациях серого, псевдоцветные, полноцветные и мультиспектральные данные изображений.
Файлы BIL, BIP и BSQ - бинарные, они должны иметь ассоциированный заголовок в формате ASCII, чтобы ArcGIS мог их прочитать. Этот файл заголовка содержит вспомогательную информацию об изображении, такую как число строк и столбцов, наличие цветовой карты, а также широту и долготу.
Метод BIL использует способ записи многоканальных изображений, при котором строки значений для каждого канала записываются последовательно. Например, в случае трехканального изображения, все три канала данных сначала записываются в строку 1, затем в строку 2, и т.д., пока не будет записана последняя строка изображения. На следующей диаграмме показаны данные BIL для трехканального набора данных:
Метод BIP отличается от метода BIL тем, что данные для каждого пиксела записываются поканально. Например, при записи того же трехканального изображения, данные каналов 1, 2 и 3 записываются для первого пиксела столбца 1; затем данные каналов 1, 2 и 3 записываются для первого пиксела столбца 2 и т.д.
При поканальной записи, информация для каждого канала записывается полностью. Другими словами, данные всех пикселов канала 1 записываются в первую очередь, затем записываются все пиксели канала 2 и т.д.
Файлы описания изображения
Существуют три файла описаний, которые могут использоваться вместе с файлами BIL, BIP и BSQ: файл заголовка (.hdr), в котором описывается компоновка пикселов изображения, файл цвета (.clr), в котором содержится цветовая карта, и файл статистики (.stx), в котором содержится статистика каждого канала изображения. Эти ASCII файлы можно создать в обычном текстовом редакторе, используя известную информацию об изображении.
Файл заголовка
В файле заголовка описываются данные изображения. Файл заголовка должен быть создан для каждого изображения, он должен иметь то же имя, что и файл изображения, и расширение .hdr, например:
<image>.hdr
Файл заголовка содержит набор записей, каждая из которых описывает определенный атрибут изображения. Например, запись может описывать число строк и столбцов в изображении. Формат каждой записи выглядит так:
<keyword> <value>
, где <keyword> соответствует определенному заданному атрибуту, а <value> - значению данного атрибута. Записи в заголовке могут следовать в любом порядке, но каждая из них должна начинаться с новой строки. Каждая строка файла, которая не начинается с ключевого слова, рассматривается как комментарий и игнорируется.
В приведенном списке перечислены допустимые ключевые слова и описаны соответствующие им атрибуты изображения. Некоторые ключевые слова имеют значения, используемые по умолчанию. Если значение по умолчанию соответствует данным в изображении, вы можете не включать это ключевое слово в файл заголовка.
nrows—Число строк изображения. Строки располагаются параллельно оси x в системе координат карты. Значение по умолчанию отсутствует.
ncols—Число столбцов изображения. Столбцы располагаются параллельно оси y в системе координат карты. Значение по умолчанию отсутствует.
nbands—Число спектральных каналов изображения. Значение по умолчанию равно 1.
nbits—Количество бит на пиксел на канал. Допустимые значения 1, 4, 8, 16 и 32. По умолчанию, используется 8 бит на пиксел на канал. Для изображения с «реальным цветом», содержащим три канала (R,G,B) с 8 битами на пиксел для каждого канала, nbits равно 8, а nbands равно 3, чем составляет всего 24 бита на пиксел. Если nbits изображения равно 1, nbands также должно быть 1.
pixeltype—Это ключевое слово означает, что используются пикселы типа целочисленный со знаком (signed integer). Если не применяется ключевое слово «pixeltype» со значением «signedint», предполагается, что данные используют целочисленные значения без знака (unsigned integers.
byteorder—Порядок байт, в котором хранятся значения пикселов изображения. Порядок байт имеет значение для 16-битовых изображений с 2 байтами на пиксел. Допустимые значения:
- I - Порядок байтов Intel® (Silicon Graphics®, DEC Alpha™, PC) - также известен как прямой порядок байтов (little endian)
- M - Порядок байтов Motorola® (Sun™, HP® и др.) - также известен как обратный порядок байтов (big endian)
Порядок байтов по умолчанию соответствует порядку, использующемуся на главном компьютере, выполняющем обработку.
layout—Организация каналов в файле изображения. Допустимые значения:
- bil—Каналы, разделенные по строкам. Это значение по умолчанию.
- bip—Попикселная запись спектральных каналов.
- bsq—Поканальная запись.
skipbytes—Количество байт данных изображения, которые необходимо пропустить, чтобы найти начало собственно данных изображения. Это ключевое слово позволяет пропустить любую информацию в заголовке файла. Значение по умолчанию - 0 байт.
ulxmap—x координата центра верхнего левого пиксела. Если вы задаете этот параметр, также необходимо задать ulymap; иначе, используется значение по умолчанию.
ulymap—y координата центра верхнего левого пиксела. Если вы задаете этот параметр, также необходимо задать ulxmap; иначе, используется значение по умолчанию.
xdim—Размер пиксела по оси x в единицах карты. Если вы задаете этот параметр, также необходимо задать ydim, ulxmap и ulymap; иначе, используется значение по умолчанию.
ydim—Размер пиксела по оси y в единицах карты. Если вы задаете этот параметр, также необходимо задать xdim, ulxmap и ulymap; иначе, используется значение по умолчанию.
На рисунке ниже показаны значения ulxmap, ulymap, xdim и ydim, используемые по умолчанию. Координаты карты центра верхнего левого пиксела (ulxmap, ulymap) = (0, (nrows - 1)), а центр нижнего левого пиксела (0, 0). На этом рисунке, значения ulxmap и ulymap равны (0, 3). По умолчанию x и y размеры пиксела устанавливаются как xdim = 1 и ydim = 1.
bandrowbytes—Число байт на канал на строку. Это значение должно быть целочисленным. Это ключевое слово используется только с файлами BIL, при наличии дополнительных битов в конце каждого канала внутри строки, которые должны быть пропущены. Bandrowbytes может рассматриваться в качестве индекса начальной точки следующего канала данных. Поскольку bandrowbytes указывает начало каждого канала строки, его изменение приводит к смещению начальной точки следующего канала.
На рисунке ниже показана одна строка данных трехканального изображения. Bandrowbytes является суммой числа бит, используемых для хранения данных изображения, и дополнительных бит, которые должны быть пропущены для доступа к следующему каналу.
bandrowbytes = image data + extra bits
Чтобы задать ключевое слово bandrowbytes, вы должны знать схему размещения данных изображения, или, более точно, количество байт, используемых для хранения значений пикселов для каждого канала в каждой строке. Если bandrowbytes не указан, используется значение по умолчанию, вычисляемое по следующей формуле:
bandrowbytes = the smallest integer(ncols x nbits) / 8
Значение по умолчанию используется в тех случаях, когда в конце каждого канала строки отсутствуют дополнительные замыкающие биты, и когда число бит на канал на строку является наименьшим целым числом байт, которое в состоянии корректно представить данные канала; например, если данным требуется 2.5 байта, 3 байта является наименьшим целым числом байт, которые могут хранить эти данные. В этих двух случаях задавать bandrowbytes не нужно. Тем не менее, если число байт на канал на строку превышает значение по умолчанию, измените значение ключа bandrowbytes.
На следующих двух примерах показано поведение ключа bandrowbytes. В первом примере описан случай, когда замыкающие биты отсутствуют, во втором - они присутствуют.
- Если замыкающие биты в конце канала отсутствуют, bandrowbytes равен числу байт, использующихся для хранения данных.
Например, дано изображение 6-на-6 с тремя каналами и 8 битами (1 байт) на пиксел, для данных изображения требуется 6 байтов на канал в строке.bandrowbytes = image data
По умолчанию, bandrowbytes установлен на 6 байтов, как показано на следующей формуле:bytes per band per row = ncols x nbits = 6 x 8 = 48 bits or 6 bytes
Т.к. число байтов на канал в строке равно bandrowbytes, значение по умолчанию является соответствующим параметром. Поэтому, bandrowbytes не нужно задавать специально.bandrowbytes = (ncols x nbits) / 8 = (6 x 8) / 8 = 48 / 8 bandrowbytes = 6 bytes
- Если замыкающие биты присутствуют, ключевое слово bandrowbytes не будет равен числу бит данных на канал на строку.
Предположим, у вас имеется трехканальное изображение из 5 строк и 5 столбцов с 4 битами на пиксел. По умолчанию, bandrowbytes является наименьшим целым числом байт, которое в состоянии корректно представить данные. В этом случае значение по умолчанию равно 3. Рассчитывается следующим образом:
Однако, для данных изображения требуется только 2,5 байта, которые рассчитываются путем умножения ncols на nbits. Поэтому, число байт, которое необходимо пропустить, составляет 0.5 (4 бита), т.е. является разницей между 3 байтами (bandrowbytes) 2.5 (байты данных изображения). На рисунке ниже показан один канал данных для одной строки изображения.bandrowbytes = (ncols x nbits) / 8 = (5 x 4) / 8 = 20 / 8 = 2.5 = 3 (when rounded up to the nearest integer)
totalrowbytes—Общее количество байт данных на строку. Ключевое слово totalrowbytes используется только тогда, когда в конце строки имеются дополнительные замыкающие биты.
Для файла BIL, totalrowbytes по умолчанию вычисляется по следующей формуле:
totalrowbytes = nbands x bandrowbytes
Значение по умолчанию предполагает, что дополнительных замыкающих бит в конце строки нет. Если они присутствуют, необходимо установить соответствующее значение. Например, для трехканального изображения с bandrowbytes равным 3, totalrowbytes, по умолчанию, составит 9. Если замыкающий бит в конце строки присутствует, установите totalrowbytes равным 10.
Для файла BIP, значение по умолчанию вычисляется по другой формуле:
totalrowbytes = (ncols x nbands x nbits) / 8
Totalrowbytes округляется до ближайшего целого числа байт, которое может корректно хранить пикселные данные строки. Например, для BIP изображения из 5 строк и 5 столбцов с тремя каналами и 4 битами на пиксел, totalrowbytes по умолчанию составит:
totalrowbytes = (ncols x nbands x nbits) / 8
= (5 x 3 x 4) / 8
= 60 / 8
= 7.5
= 8 (when rounded up to the nearest integer)
На рисунке показано значение totalrowbytes по умолчанию для изображения BIP.
Если значение totalrowbytes по умолчанию не точно отражает компоновку данных, его необходимо задать, в соответствии с числом байт каждой строки.
bandgapbytes—Число байт между каналами в изображениях формата BSQ. Значение по умолчанию равно 0.
Ниже показан типичный файл заголовка, сгенерированный для спутникового изображения формата BIL (каналы, разделенные по строкам), в котором 128-битный заголовок предшествует данным изображения.
Sample BIL header file
Lines that don't begin with a keyword are treated as comments.
nrows 1024 Comments can be placed here as well.
ncols 1024
nbands 3
nbits 8
layout bil
skipbytes 128
В следующей таблице приводится список ключей, использующихся в файле .hdr:
Ключевое слово | Допустимое значение | Значение по умолчанию |
---|---|---|
nrows | Любое целое > 0 | Нет |
ncols | Любое целое > 0 | Нет |
nbands | Любое целое > 0 | 1 |
nbits | 1, 4, 8, 16, 32 | 8 |
pixeltype | SIGNEDINT | Целое число без знака |
byteorder | I = Intel; M = Motorola | Как на главном компьютере |
компоновка | bil, bip, bsq | bil |
skipbytes | Любое целое ? | 0 |
ulxmap | Любое число | 0 |
ulymap | Любое число | nrows - 1 |
xdim | Любое число | 1 |
ydim | Любое число | 1 |
bandrowbytes | Любое целое > 0 | Минимальное целое ? (ncols x nbits) / 8 |
totalrowbytes | Любое целое > 0 | Для bil: nbands x bandrowbytes; для bip: минимальное целое ≥ (ncols x nbands x nbits) / 8 |
bandgapbytes | Любое целое ? | 0 |
Цветовой файл
Цветовой файл (.clr) является дополнительным файлом, который содержит цветовую карту одноканального псевдоцветного изображения. Если этот файл отсутствует, изображение отображается в градациях серого.
Цветовой файл содержит цвета, ассоциированные со значениями пикселов изображения. Цвета определяются с помощью цветовой модели RGB, в которой воспроизведение любого цвета достигается путем сложения трех основных цветов: красного (Red), зеленого (Green) и синего (Blue). Файл состоит из группы записей, каждая из которых начинается с новой строки и описывает цвет, соответствующий значению пиксела изображения.
Каждая запись имеет вид:
<value> <red> <green> <blue>
, где <value> - значение пиксела, а<red>, <green> и <blue> значения цветовых компонент. Сортировка записей производится по значению пиксела в порядке возрастания. Если первый знак строки не является цифрой, вся строка рассматривается как комментарий и игнорируется. Любые знаки в строке после четвертого параметра (blue) игнорируются, их можно использовать в качестве комментария.
Красная, зеленая и голубая компоненты описываются значениями в диапазоне от 0 до 255. Чем больше значение, тем больше интенсивность данного цветового компонента. По умолчанию, если запись для пиксела отсутствует, ему присваивается черный цвет. Пример цветового файла растровой карты типов почв, содержащий пиксели со значениями 11, 16, 18, 19, 21, 98 и 99, показан ниже:
Color file for Soils map
Entries are sorted in ascending order by pixel value.
11 255 0 0 (red)
16 255 165 0 (orange)
18 255 255 0 (yellow)
19 0 255 0 (green)
21 0 0 255 (blue)
98 0 255 255 (cyan)
99 160 32 240 (purple)
Цветовые файлы используются только с одноканальными изображениями. Любое одноканальное изображение с цветовым файлом интерпретируется как псевдоцветное. Цветовые файлы, сопровождающие многоканальные изображения, игнорируются.
Файл статистики
Файл статистики (.stx) является дополнительным файлом, описывающим статистику многоканального или в градациях серого изображения по каждому спектральному каналу. Файл состоит из серии записей, по одной на каждый канал, которые содержат минимальное и максимальное значения пикселов, среднее, стандартное отклонение, а также два линейных параметра растяжки контраста.
Каждая запись имеет следующий формат (все значения каждого канала расположены в одной строке):
<band> <minimum> <maximum> {mean} {std_deviation}
{linear_stretch_min} {linear_stretch_max}
, где <band> - номер канала, <minimum> - минимальное значение пиксела, <maximum> - максимальное значение пиксела, {mean} - среднее, {std_deviation} - стандартное отклонение, {linear_stretch_min} - минимальное значение пиксела для растяжения контраста, {linear_stretch_max} - максимальное значение пиксела для растяжения контраста.
Значения каждого параметра находятся в одной строке. Каждая запись, которая начинается не с числового значения, рассматривается как комментарий и игнорируется. Номер канала, а также минимальное и максимальное значения, являются обязательными параметрами; среднее, стандартное отклонение, минимальная и максимальная линейная растяжка контраста - дополнительными. Используйте «#» для пропуска дополнительных параметров.
Номера каналов варьируют от 1 до nbands. Параметры linear_stretch_min и linear_stretch_max используются для растяжения контраста отображаемого изображения. Пиксели, значения которых меньше параметра linear_stretch_min отображаются черным, если значения больше linear_stretch_max - белым. Пиксели, значения которых укладываются в диапазон между параметрами минимальная и максимальная растяжка контраста, отображаются с помощью оттенков серого. Чем меньше значение пиксела, тем темнее оттенок серого.
Пиксели, значения которых укладываются в диапазон между параметрами минимальная и максимальная растяжка контраста, отображаются с использованием максимального количества оттенков серого, доступного для устройства отображения.
Если параметры linear_stretch_min и linear_stretch_max не указаны, они определяются по умолчанию, как среднее значение минус два среднеквадратических отклонения для linear_stretch_min, и среднее значение плюс два среднеквадратических отклонения для linear_stretch_max. Если стандартное отклонение не вычислено, минимальное и максимальное значения пикселов используются в качестве параметров растяжки контраста.
Для многоканальных изображений, каждый канал растягивается перед тем, как изображение отображается. При наличии цветового файла (.clr), линейная растяжка контраста одноканального изображения в градациях серого не используется, вместо этого, изображение обрабатывается как псевдоцветное.
Ниже приведен пример файла статистики для четырехканального спутникового снимка, имеющего 8 бит на пиксел на канал:
Image statistics file
1 2 118 67 10
Band 2 has linear contrast stretch parameters:
2 23 251 112 23 80 90
3 68 91 73 4
Band 4 does not contain values for mean and standard deviation:
4 126 198 # # 135 167