Каналы, разделенные по строкам (BIL), попикселная запись спектральных каналов (BIP) и поканальная запись (BSQ) - три основных способа организации данных в многоканальных изображениях. BIL, BIP и BSQ не являются форматами изображений, это методы записи значений пикселов в файл. Эти файлы поддерживают отображение одно- и многоканальных изображений и могут хранить черно-белые, в градациях серого, псевдоцветные, полноцветные и мультиспектральные данные изображений.
Файлы BIL, BIP и BSQ - бинарные, для правильной интерпретации они должны иметь ассоциированный заголовок в формате ASCII. Этот файл заголовка содержит вспомогательную информацию об изображении, такую как число строк и столбцов, наличие цветовой карты, а также широту и долготу.
Метод 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 бит на пиксел на канал. Для изображения с «реальным цветом», содержащим три канала (RGB) с 8 битами на пиксел для каждого канала, nbits равно 8, а nbands равно 3, чем составляет всего 24 бита на пиксел. Если nbits изображения равно 1, nbands также должно быть 1.
Ключевое слово pixeltype означает целочисленный со знаком тип пиксела. Если не применяется ключевое слово pixeltype со значением SIGNEDINT, предполагается, что данные используют целочисленные значения без знака.
Ключевое слово 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 = 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
Значение по умолчанию предполагает, что дополнительных замыкающих бит в конце строки нет. Если они присутствуют, задайте соответствующее значение totalrowbytes. Например, для трехканального изображения с 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 по умолчанию не точно отражает компоновку данных, необходимо задать 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:
Ключевое слово | Допустимое значение: | Default |
---|---|---|
nrows | Любое целое > 0 | Нет |
ncols | Любое целое > 0 | Нет |
nbands | Любое целое > 0 | 1 |
nbits | 1, 4, 8, 16, 32 | 8 |
pixeltype | SIGNEDINT | Целое без знака |
byteorder | I = Intel; M = Motorola | Как на главном компьютере |
layout | 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) игнорируются, их можно использовать в качестве комментария.
Компоненты red, green и 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_min} - максимальное значение пиксела в линейном контрасте.
Значения каждого параметра находятся в одной строке. Каждая запись, которая начинается не с числового значения, рассматривается как комментарий и игнорируется. Номер канала, а также минимальное и максимальное значения, являются обязательными параметрами; среднее, стандартное отклонение, минимальная и максимальная линейная растяжка контраста - дополнительными. Используйте знак # для пропуска дополнительных параметров.
Номера каналов варьируют от 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