Страницы

Поиск по вопросам

пятница, 15 марта 2019 г.

Получение данных из “такой” карты высот

от есть такой кусок карты высот (8бит на канал)

Как я догадался, эти резкие скачки отвечают за разные уровни высоты. То есть, где где большая разница между светлым и голубым, там осуществляется переход между уровнями. При этом участки светлее отвечают за меньшую высоту на своем уровне.
Значит попробовал я следующим образом: на каждой строке проверять разницу между значениями красного канала на соседних пикселях. Взять к примеру константу max_dist = 180, и если разница больше max_dist , тогда засчитывать переход на следующий уровень, то же самое с переходом на предыдущий уровень при разнице меньше -max_dist.
Но это не работает, только появляются полосы. Какие еще есть способы извлечь такие данные?
UPDATE: Оказалось все еще интереснее)
Склеив все эти кусочки получил


Ответ

Зеленый канал определяет абсолютную высоту, хотя поделен на несколько уровней(их нужно разделять, в данном примере первый уровень в голубых областях, второй в последующей красной с зеленым области, и последний в правом нижнем углу.
Красный канал это остаток зеленого.По возвышениям 255 единиц из красного немного меньше чем 1 единица из зеленого. Отсюда можно вывести формулу
Синий канал содержит только пару уровней возвышения зеленого (но их оказывается больше, поэтому он бесполезен, все равно нужно вручную отделять уровни)
elevation = level*255 + green + red/256

Комментариев нет:

Отправить комментарий