rgb2pct и палитры QGIS, GIMP

Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

rgb2pct и палитры QGIS, GIMP

Сообщение Denis Rykov » 16 фев 2010, 16:07

Утилита rgb2pct позволяет конвертировать полноцветные растры в индексированные. Это можно сделать одним из двух способов, либо указать количество цветов в результирующем цветоделенном растре:

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

rgb2pct -n 50 -of GIF input.tif output.gif
либо использовать уже готовую палитру. Для этого в ключе -pct нужно указать растр, содержащий палитру:

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

rgb2pct -pct indexing.gif -of GIF input.tif output.gif
В качестве такого растра может выступать виртуальный VRTDataset. VRTDataset - это простой xml файл, в котором кроме всего прочего можно описать палитру, например:

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

    <ColorTable>
      <Entry c1="0" c2="0" c3="0" c4="255"/>
      <Entry c1="145" c2="78" c3="224" c4="255"/>
    </ColorTable>
Если цветов не много, то палитру можно набить и вручную, в случае же большого количества цветов это довольно трудоемкое занятие. Одним из способов получения файла палитры является создание и сохранение его средствами QGIS. Однако, QGIS сохраняет палитру не в формате VRTDataset:

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

# QGIS Generated Color Map Export File
INTERPOLATION:EXACT
0,100,68,76,255,Color entry 1
1,188,180,56,255,Color entry 2
3,156,216,172,255,Color entry 3
6,72,192,188,255,Color entry 4
7,136,176,200,255,Color entry 5
Вот для перевода QGIS-овской палитры в палитру VRTDataset я и набросал следующий скрипт:

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

import sys
QGisPalette = open(sys.argv[1], "r")
VRTPalette = open(sys.argv[2], "wt")
VRTPalette.write('<VRTDataset rasterXSize="640" rasterYSize="480">\n')
VRTPalette.write('    <VRTRasterBand dataType="Byte" band="1">\n')
VRTPalette.write('        <ColorTable>\n')


for line in QGisPalette.readlines():
        if line[0].isdigit():
            VRTPalette.write('            <Entry c1="'+str(line.split(',')[1])+'" c2="'+str(line.split(',')[2])+'" c3="'+str(line.split(',')[3])+'" c4="'+str(line.split(',')[4])+'"/>\n')

VRTPalette.write('        </ColorTable>\n')
VRTPalette.write('    </VRTRasterBand>\n')
VRTPalette.write('</VRTDataset>\n')
QGisPalette.close()
VRTPalette.close()
rasterXSize="640" rasterYSize="480" - особой роли не играют, но без их определения rgb2pct не хочет работать.
Может, конечно, и некрасиво получилось, зато работает :)
Spatial is now, more than ever, just another column- The Geometry Column.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: rgb2pct и палитра QGIS

Сообщение Voltron » 16 фев 2010, 20:07

Маленькое дополнение. Параметр -pct появился в gdal 1.7.0 в более старых версиях его нет (или я плохо искал?)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: rgb2pct и палитра QGIS

Сообщение Максим Дубинин » 17 фев 2010, 04:00

именно так, в 1.7
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: rgb2pct и палитра QGIS

Сообщение Mavka » 17 фев 2010, 09:53

Voltron
Ticket 2958
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: rgb2pct и палитра QGIS

Сообщение Максим Дубинин » 17 фев 2010, 09:57

Mavka, так это ты был автором этого дела?
пристегивайтесь, турбулентность прямо по курсу

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: rgb2pct и палитра QGIS

Сообщение Voltron » 17 фев 2010, 10:25

Это конечно хорошо, добавлю в свою установку. Только вот кугис пока линкуется со старой версией... Жаль, а то бы в GdalTools включил

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: rgb2pct и палитра QGIS

Сообщение Mavka » 17 фев 2010, 11:21

sim
Изображение
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: rgb2pct и палитры QGIS, GIMP

Сообщение Denis Rykov » 28 мар 2010, 21:39

Небольшие поправки и скрипт пригоден для перегонки палитры GIMP-а в VRT:

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

import sys
gplPalette = open(sys.argv[1], "r")
VRTPalette = open(sys.argv[2], "wt")
VRTPalette.write('<VRTDataset rasterXSize="640" rasterYSize="480">\n')
VRTPalette.write('    <VRTRasterBand dataType="Byte" band="1">\n')
VRTPalette.write('        <ColorTable>\n')


for line in gplPalette.readlines():
        if (line[0].isdigit() or line[0]==' '):
            VRTPalette.write('            <Entry c1="'+str(line.split()[0])+'" c2="'+str(line.split()[1])+'" c3="'+str(line.split()[2])+'" c4="'+str(line.split()[3])+'"/>\n')

VRTPalette.write('        </ColorTable>\n')
VRTPalette.write('    </VRTRasterBand>\n')
VRTPalette.write('</VRTDataset>\n')
gplPalette.close()
VRTPalette.close()
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость