Горіхова шкаралупа
Кожен набір із 3 зображень нижче слід прочитати, наприклад "сірий (смуга) + непрозорість (смуга) = прозорий результат" . Ви можете протестувати ці процеси протягом декількох хвилин за допомогою відповідного файлу, розміщеного github . Я рекомендую процес №3 з порогом між 170 (зберігає сильні тіні) і 220 (тримає всі тіні). Процес 3 забезпечує найсильніші тіні і уникає сіро-відбілюючого ефекту. За необхідності адаптуйте загальну непрозорість отриманого шару. Рівняння в, --calc="<equation>"
можливо, також можна покращити, використовуючи gdal_calc
.
Відомості про такий підхід, пояснене дизайнером Photoshop, див. У розділі Додавання затіненої рельєфу у Photoshop (16 хв.).
Фон
gdaldem hillshade
створює односмуговий файл сірого масштабу з діапазоном значень пікселів = [1-255], також від найтемніших тіней до найбільш просвітленого пікселя. Для рівних ділянок px = 221 (#DDDDDD). NoDataValue
пікселі отримують нодатавальне значення за замовчуванням 0
, також, найтемніший чорний на вході та у виході є і повинен бути 1
. Якщо не визначено смугу непрозорості , непрозорість становить 100% .
gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Ми хочемо визначити та контролювати 2-ю смугу непрозорості!
Цілі
Ми хочемо однієї сірої смуги -b 1
, це схил. Поза gdal - це сіра смуга з безперервним діапазоном, наприклад, px = [1-255]. Ми можемо вирізати невідповідні ділянки (№2) або потемніти до px = 1 і покластися на смугу непрозорості (№3).
Ми хочемо одну смугу непрозорості -b 2
, як правило, інверсію схилу гори або пов'язану з цим функцію. Ми можемо вирізати невідповідні ділянки (№2). Це повинен бути безперервний діапазон непрозоростей, таких як px = [1-255], інакше, якщо немає елегантності.
gdal_calc
Можна використовувати як для математики на пікселях з вхідних файлів A, B, C ... і для перевірки булевих значень, таких як A<220
, який повертає 1 (true) або 0 (false). Це дозволяє умовне обчислення. Якщо умова помилкова, відповідна частина рівняння анулюється.
1. Сірий горб зроблений прозорим
Далі наведено дуже хороші результати в двох діапазонах, коли стандартні області gdal hillshade
сірого та білого кольору стають все більш прозорими:
# hillshade px=A, opacity is its invert: px=255-A
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity.tif --calc="255-A"
# assigns to relevant bands -b 1 and -b 2
gdalbuildvrt -separate ./final.vrt ./hillshade.tmp.tif ./opacity.tif
2. Оптимізація за допомогою псевдообрізання (-b 1 & -b 2)
2/3 пікселів -b 1
(відтінки сірого) стають невидимими для неозброєних очей, коли -b 2
додається непрозорість , але ці пікселі зберігають різні біліші -b 1
та низькі -b 2
значення непрозорості . Їх можна зробити всіма прозорими білими [255,1]
пікселями, що забезпечує кращу швидкість стиснення:
# filter the color band, keep greyness of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./color_crop.tmp.tif \
--calc="255*(A>220) + A*(A<=220)"
# filter the opacity band, keep opacity of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity_crop.tmp.tif \
--calc=" 1*(A>220) +(256-A)*(A<=220)"
# gdalbuildvrt -separate ./final.vrt ./color_crop.tmp.tif ./opacity_crop.tmp.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final_crop.tif
3. Далі -b 1 оптимізація (обрізати + чорніти)
Оскільки у нас є прогресивна смуга непрозорості, -b 2
на яку можна покластися, ми можемо зробити -b 1
пікселі або білими px = 255 via 255*(A>220)
, або чорними px = 1 via 1*(A>220)
.
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./color.tmp.tif \
--calc="255*(A>220) + 1*(A<=220)"
# gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity_crop.tmp.tif \
# --calc=" 1*(A>220) +(256-A)*(A<=220)".
# gdalbuildvrt -separate ./final.vrt ./color.tmp.tif ./opacity_crop.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final.tif
Цей результат показує сильніші тіні .
Результат
Створення прозорого схилу схилів має безпосередню мету усунути колишні сірі ділянки рівнини та пов’язані з цим небажаний, але всюдисущий ефект посивіння. Бажаний побічний продукт - це посилений контроль над кінцевим візуальним продуктом. Описаний процес видаляє більшість сірих та всіх білих пікселів. Мальовниче кольорове фонове зображення збереже обрані кольори при накладенні прозорими на чорні схили, лише тіньові ділянки будуть затемнені. Порівняння процесу №2 (зліва) та №3 (праворуч) нижче.
Огляд:
Масштаб, будь ласка, помітьте тіні (до і після):
Подальші оптимізації
Білі області : Можна також захотіти зберегти найбільш освічені ділянки, щоб збільшити 3D-відчуття. Буквально це було б симетричним цього поточного підходу з незначними пороговими змінами, а потім злиттям обох результатів через gdal_calc. Рівнина була б 100% прозорою, найтемніші тіні та найсвітліші просвітливі ділянки непрозорі.
Згладжування: вхідний схил може бути попередньо розгладжений, щоб отримати кращий кінцевий результат, див. Згладжування DEM за допомогою GRASS?
Композитний схил ( Як створити композитний схил? ).
Цікавий також схил схилу гори ( опис )
Примітки
- Поріг плоский ділянку в
gdal hillshade
виході ПВ = 221 (#DDDDDD = [221221221]), маркування плоских ділянок. Також px = 221 гірського схилу ділить зображення між нахилами в тіні (A <221) та пікселями у світлі нахили (A> 221).
- Поріг обробки при рхе = [170-220] в якості доведеною користі, він тримає близько 100% очі-помітною тіні, які сам по собі майже НЕ стоять на 15-35% площі рельєфу.
- Розмір файлів > Стиснення: final.tif з №1, №2, №3 становить ~ 1,3 Мб без стиснення, потім ~ 0,3-0,16 МБ після стиснення, 80% економія!
- Розмір файлів > обрізка: з .326 Кб у №1, колір і непрозорість обрізання (№2) доходять до 310 кб, колір чорніє (№3) - до 160 Кб. Ефект обрізання на розмір файлів становить від 5 до 50% зменшення з порогом у px = 220 та моїм входом.