Задать вопрос
Ni55aN
@Ni55aN

Как извлечь данные высот из такой карты высот?

72e83fe6152f452eb6380ecd31f2159b.pngaa09dbe754164e2eb3e2f29965bdd5c2.png

Все что известно: голубые участки - самые нижние возвышения, далее идет красный, за ним зеленый, а следом за зеленым еще выше (в левом нижнем углу) идет красный
  • Вопрос задан
  • 362 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Ni55aN
@Ni55aN Автор вопроса
Все оказалось просто, после того как визуально оценил каналы по отдельности.
Получается, что зеленый канал отвечает за полную высоту от нижней точки до верхней, в то время как красный канал представляет остаток для зеленого. В это же время зеленый канал имеет несколько уровней
Формула следующая
elevation = level*256 + green+red/256
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Foolleren
@Foolleren
Компас есть, копать не люблю...
Но есть один момент, в левом углу опять идет отсчет от 0, но высота увеличивается, как это определять программно, пока неизвестно

похоже что при составлении карты высот произошло переполнение "байта" и всё сбросилось на 0
в самом простом случае можно определить область переполнения по границе перехода 0 и 255 делается это свёрткой по матрице
-1 -1 -1
-1  8 -1
-1 -1 -1

но сначала надо вычесть синий канал из зелёного
это конечно первая иттерация решения
вот что у меня получилосьdf1b8472b62b480aa7cc34ae735c5826.png
для тех кому интересно что это предлагаю зелёный канал в "объёме"
8be92b684e5a4a7e9d6c80770a4e4141.png
после внимательного взгляда на карту высот пришёл к выводу
что altuide= red+green*256+(blue+add)*256^2
канал add получаем следующим образом
делаем свёртку по матрице
0 0 0
0 1 -1
0 0 0

результат запоминаем в дополнительный канал A1 (мы записали переход с 255 до 0)
потом прогоняем матрицу свёртки
0 0 0
-1 1 0
0 0 0

но в этот раз мы детектируем переход с 0 на 255 и записываем в канал A2
в обоих каналах заменяем всё что не 255 на 0, 255 заменяем на 1
затем берём канал ADD ( берём тип который понимает отрицательные числа)
прогоняем от 0 до х и суммируем предыдущий пиксель с каналом А1
прогоняем от х до 0 и вычитаем А2 из предыдущего пикселя
получаем канал АDD который и используем
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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