Пакетный импорт растров и подготовка к привязке (Linux/bash)

Решенные задачи, первая запись - описание решения.
Ответить
Александр Мурый
Гуру
Сообщения: 5065
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 721
Ваше звание: званий не имею
Откуда: Москва

Пакетный импорт растров и подготовка к привязке (Linux/bash)

Сообщение Александр Мурый » 14 ноя 2010, 22:20

Для привязки растров в GRASS нужно для начала импортировать их в новую область GRASS. Не обязательно импортировать каждое изображение в отдельную область, можно поместить все в одну.
  • Запускаем GRASS в командной строке, например, так:

    Код: Выделить всё

    grass64 -text ~/home/user/grassdata/location/PERMANENT
  • Заходим в директорию с растрами (например, это файлы *jpg)

    Код: Выделить всё

    cd ~/папка_с_растрами/

    и импортируем один любой из них, используя модуль r.in.gdal:

    Код: Выделить всё

    r.in.gdal -e input=./01.jpg output=01 location=rasters
  • Выходим из GRASS и заходим снова, уже в свежесозданную область:

    Код: Выделить всё

    grass64 -text ~/home/user/grassdata/rasters/PERMANENT
  • Импортируем оставшиеся растры, используя модуль r.in.gdal и команды bash:

    Код: Выделить всё

    for file in ./*jpg; do r.in.gdal input=$file output=$(basename $file); done

    В текущем наборе появляются растры *.red / *.green / .*blue, соответствующие каналам RGB каждого изображения. [Примечание: не все типы изображений при импорте разбиваются по каналам, например, GIF импортируются как единый растр]
  • Получим каждый растр в цветах RGB (модуль r.composite), по очереди "подгоняя" под них текущий регион (модуль g.region):

    Код: Выделить всё

    for raster in `g.mlist rast pat="*red" | sed 's/.red//g'` ; do 
    g.region rast=$raster.red ;
    r.composite -d red=$raster.red green=$raster.green blue=$raster.blue output=`echo $raster.rgb`;
    done
  • "Гурманам" можно поменять все символы "-" в названиях на "_":

    Код: Выделить всё

    for maps in `g.mlist rast pat="*rgb"` ; do 
    g.rename rast=$maps,`echo $maps | sed 's/-/_/g'`;
    done
  • Создадим группы изображений, которые затем будут привязываться из другой области.
    Допустим, что растры наши -- не космоснимки, а, например, топокарты или схемы, для которых привязка растров по всем каналам ни к чему. Тогда надо включить в состав группы изображений только растры *.rgb

    Код: Выделить всё

    for groups in `g.mlist group` ; do 
    i.group -r group=$groups input=$groups.red,$groups.green,$groups.blue;
    i.group group=$groups input=`echo $groups | sed 's/-/_/g'`.rgb;
    done


    Если важно, чтобы привязывались все растры с отдельными каналами и растр RGB, добавляем в группы все *.rgb без удаления из групп всех *.red / *.green / .*blue:

    Код: Выделить всё

    for groups in `g.mlist group` ; do
    i.group group=$groups input=`echo $groups | sed 's/-/_/g'`.rgb;
    done
Редактор материалов, модератор форума

Ответить

Вернуться в «Рецепты»