Когда я создаю составной растр в QGIS с помощью инструмента GRASS r.composite и затем щелкаю по определенной ячейке, я получаю эти значения в синих / зеленых / красных / составных растрах: синий = 124, зеленый = 124, красный = 172, составной = 15861.
Я знаю, что синий / зеленый / красный представляют значения яркости данных полос. Что представляет собой 15861 и как рассчитывается?
-r
параметром (Output color values as RRR:GGG:BBB
) для запроса комбинации RGB ячейки. Также посмотреть на r.what.color . [Ссылки на GRASS6, поскольку эта версия используется ОП].Ответы:
Число 124 в качестве двоичного байта (восемь цифр) равно 01111100. Для представления RGB-тройки из трех байтов потребуется трижды восемь или 24 таких бита. По умолчанию
r.composite
уменьшает это значение до 15 бит, отбрасывая наименее значимые биты в каждой полосе. Таким образом, он обрезает 01111100 до 01111, что равно 15. (Эквивалентно, он делит 124 на 8 и игнорирует остаток.) Очевидно, что эти три пятибитных результата объединяются в порядке B, G, R для формирования 15-битного числа (представляет значения в диапазоне от 0 до 2 ^ 15-1 = 32767, что достаточно мало, чтобы сохранить таблицу цветов до приемлемого размера). Таким образом, эти значения представляют три полосы изображения, каждая из которых имеет только пять битов точности, а не исходные восемь.В примере с вопросом вычисления выполняются так:
Синий = 124 преобразуется в 124/8 = 15 (плюс оставленный остаток 4). В двоичном виде это 01111.
Зеленый = 124 преобразуется в 124/8 = 15 (плюс оставленный остаток 4). В двоичном виде это 01111.
Красный = 172 преобразуется в 172/8 = 21 (плюс оставшийся остаток 4). В двоичном виде это 10101.
Цифры объединяются в 01111 01111 10101. Это 15-значное двоичное число представляет значение 15861 = (15 * 32 + 15) * 32 + 21.
r.composite
может выполнить больше обработки, чем эта, и может сделать это немного по-разному в зависимости от предоставленных вами опций, но эти операции показывают основной способ преобразования байта в пятибитное значение.Вы можете приблизительно отменить процедуру, используя последовательные деления на 32:
15861/32 = 495 плюс остаток от 21. (Умноженный на 8, этот остаток от 21 дает 168, что лишь немного меньше, чем исходный 172 для красной полосы.)
495/32 = 15 плюс остаток 15. (Умноженный на 8, этот остаток 15 дает 120, что лишь немного меньше, чем исходное значение 124 для зеленой полосы.)
Нам осталось 15, что при умножении на 8 дает 120, что лишь немного меньше, чем первоначальное значение 124 для синей полосы.
Ссылка
r.composite
страница руководства по адресу https://grass.osgeo.org/grass72/manuals/r.composite.html .источник