Телескопы покупают здесь


A A A A Автор Тема: Для программистов: пишем скрипты для обработки астрофото в Гимпе.  (Прочитано 3235 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
В 80-е годы у кого был бытовой компьютер, мы для него сами писали программы.  Лучшими делились с друзьями.  Пишу исключительно для тех, в ком тот творческий дух жив и сейчас.  Кто хочет написать программу, обрабатывающую фотографии, полученные с телескопа — но не знает, с какой стороны сегодня к этому делу подступиться.

Возможно, у ЛА есть собственные идеи по обработке снимков, которые хочется попробовать реализовать самостоятельно или с небольшой поддержкой коллег.

Данная тема логически продолжает и углубляет тему «Обработка астрофото в The Gimp».  Здесь я предлагаю программистам (как опытным, так и начинающим) использовать следующие инструменты для обработки астрофото:
  • Графический редактор Гимп  (инструкция по Гимпу), свободно скачивается.  Поддерживает и JPEG'и, и TIFF'ы.  На днях ожидается поддержка цветов по 16 бит на канал и более.  Недавно по Гимпу (чуть более старой версии) была издана замечательная книга Дениса Колесниченко!
  • Язык программирования Питон (документация по Питону), свободно скачивается.  Питон рассчитан на начинающих, но это язык универсальный и довольно мощный.  Книги по Питону переводятся на русский язык, издаются, пишутся русскими авторами — можно заказать с доставкой в Интернет-магазине, найдя по ключевому слову Python.
  • Операционная система Windows, у вас уже есть.  ;)  Впрочем, для эстетов можно использовать Гну-Линукс.  Он родной для этого инструментария, поэтому там установить систему и работать в ней даже проще.

Под Windows XP система разработчика устанавливается в следующем порядке (порядок важен):
  • Скачиваем (gtk-2.12.9-win32-2.exe) и устанавливаем библиотеку GTK+ версии 2.12.9, именно она занимается графическим интерфейсом.
  • Скачиваем (python-2.6.2.msi) и устанавливаем Python версии 2.6.2, на нём будем программировать.
  • Скачиваем и устанавливаем библиотеку PyGTK версии 2.12.1 (англ.), она даст вашим программам на Питоне доступ к GTK+.  Для этого нужно скачать и запустить следующие три мелких файла (они сами найдут Питон и запишутся туда):
    1. pycairo-1.4.12-2.win32-py2.6.exe
    2. pygobject-2.14.2-2.win32-py2.6.exe
    3. pygtk-2.12.1-3.win32-py2.6.exe
  • Скачиваем (gimp-2.6.6-i686-setup.exe) и устанавливаем Гимп, не забыв во время установки подтвердить «галочкой», что вам нужна поддержка Питона под названием Gimp-Python (англ.), а не просто «фотошопить»!  На момент обработки фотографий Гимп будет нашей «операционной системой»: в нём загружаем фотографии, отлаживаем свои программы на Питоне, вызываем его мощные графические функции.  В Гимпе также можно будет доработать фотки ручками и сохранить результат.
  • При желании устанавливаем UFRaw.  Это позволит работать с RAW-файлами, не выходя из Гимпа.

Полный набор разработчика занимает около 40Мб.  Если вы выбираете полную установку (можно сэкономить, скажем, на документации), после установки он займёт на диске около 200Мб.

Теперь в Гимпе доступна консоль Питона (Фильтры → Python-Fu → Консоль), из которой можно экспериментировать с обработкой изображения.  Кто любит забегать вперёд и владеет английским, может почитать описание, как обрабатывать в Гимпе графические изображения с помощью Питона (англ.) и по функциям Гимпа (англ.).  В GIMP Plugin Registry можно взять «живые» примеры на Питоне, вплоть до реализации HDR.

Прошу прощения, если информацию буду давать здесь нерегулярно, с перерывами в несколько месяцев по мере её проверки.  Тема новая, самому приходится во всём разбираться и упорядочивать изученное.  Но постараюсь отвечать здесь на вопросы, связанные с программированием по предложенной схеме.  Да и другие опытные товарищи по Гимпу тоже могут подсказывать, буду этому только рад.

У любителей астрономии, участников Астрофорума, много было творческих идей по доработке телескопов и т.д.  Читал эти «железные» темы с большим интересом.  Если также случится и с обработкой фотографий, надеюсь увидеть несколько замечательных плагинов к Гимпу, облегчающих всем жизнь!

P.S. Прошёлся сам по описанным пунктам и обновил их.  Кстати, иностранные ЛА пишут «астрономические» плагины под Гимп.  Питон, вероятно, самое простое решение для начинающих.  Если же скорость выполнения важна, более опытный программист может использовать Си.
« Последнее редактирование: 14 Мая 2009 [07:41:21] от ath »
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн astroiLL

  • ***
  • Сообщений: 248
  • Благодарностей: 2
  • Астрономия и Линукс!
    • Сообщения от astroiLL
    • Кубанский Астроклуб 45
Замечательно!
Давно пытался заняться.
У меня правда Линукс ;)
Скорей бы 16 бит в Гимпе уже появилось. Думаю тогда будет больше ЛА (и не только) его использовать.
Кубанский Астрономический Клуб 45
http://astrokuban.info/gallery2/

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
В Линуксе так колдовать не надо.  Там просто устанавливаются пакеты с Питоном (скорее всего уже стоит) и Гимпом (вроде бы, там уже поддержка Питона встроена).

Надо ли в Линуксе устанавливать PyGTK, не знаю.  В любом случае нужный и заточенный под дистрибутив пакет легко найдётся в любимом менеджере пакетов.  Если получится запустить консоль Python-Fu, обязательно напишите.

Думаю, что 16 бит появятся аккурат к тому времени, когда мы научимся всеми этими скриптами нормально пользоваться.
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50

Оффлайн елVIс

  • *****
  • Сообщений: 1 361
  • Благодарностей: 15
  • Мне нравится этот форум!
    • Сообщения от елVIс
Когда-то написал в нулевом приближении плугин
к-рый суммирует изображения от фотокамеры.
Отмечаешь две точки(звезды) на очередном - он их автоматически совмещает и складывает.
К сожалению, CD, где это валялось, не читается.
Будет время - попытаюсь заново что-то написать/восстановить
Может быть, даже работать будет  ;D
ТАЛ-150ПМ, Coronado PST, Алькор, Pentax IstD с ЗМ-5СА и МТО-1000

Оффлайн athАвтор темы

  • *****
  • Сообщений: 1 212
  • Благодарностей: 11
  • Любитель компьютеров, иногда смотрю в телескоп
    • Сообщения от ath
В качестве примера программы на Питоне, обрабатывающей изображение в Гимпе, возьмём скрипт foggify.py — он накладывает на изображение туман.  Во вложении дан пример применения foggify.py к изображению сетки.  Изменяя этот пример, вы можете реализовать любой желанный алгоритм обработки изображений.

Если вы установили Гимп в каталог GIMP\ , то сможете найти файл с этой программой на Питоне в каталоге GIMP\lib\gimp\2.0\plug-ins — сюда же можно складывать собственные программы, при запуске Гимп должен их найти автоматически.  В этом же каталоге есть и другие скрипты на Питоне.  При желании можете самостоятельно разобрать их устройство.

#!/usr/bin/env python

#   Gimp-Python - allows the writing of Gimp plugins in Python.
#   Copyright (C) 1997  James Henstridge <james@daa.com.au>
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
В начале программы идут классические комментарии, говорящие:
  • Где в операционной системе Гну можно найти транслятор Питона.  Как дань традиции, программы на различных интерпретируемых языках программирования начинаются с похожей строчки.
  • Что файл foggify.py является частью проекта Гимп-Питон.
  • Что авторское право на Гимп-Питон принадлежит James Henstridge, здесь же дан адрес его электронной почты и год написания проекта.
  • Что программа предоставлена вам под свободной лицензией Гну GPL версии 2 или выше.
  • Где вы можете получить текст этой лицензии, в случае утраты.

from gimpfu import *
import time

gettext.install("gimp20-python", gimp.locale_directory, unicode=True)
Мы обрабатываем изображения из Гимпа, т.к. в нём есть мощные функции, предназначенные для обработки изображений.  Эти функции становятся доступными из Питона при подключении следующих модулей:
  • gimpfu — это основной модуль для написания плагинов, который подключает и остальные модули.  Именно здесь определяются функции register() и main(), вызов которых будет немного ниже.
  • gimp — здесь собраны основные процедуры, функции и структуры данных, включая объекты Image, Layer и переменную pdb для доступа к The Procedural Database.  Модуль автоматически подключается при подключении модуля gimpfu
  • gimpenums — полезные констранты, модуль автоматически подключается при подключении модуля gimpfu
  • gimpplugin — альтернативный модуль, предоставляющий больше гибкости, но меньше возможностей, чем стандартный gimpfu
  • gimpshelf — позволяет вашей программе на Питоне запоминать данные на виртуальной «книжной полке», храня их там по меньшей мере до выхода из Гимпа

Расположенный выше фрагмент в первых двух строчках подключает модуль gimpfu и стандартный модуль time — да, вся мощь Питона нам также доступна!  Из модуля time будет использована только одна функция time.time() , возвращающая количество секунд, прошедших с 1 января 1970 года.  Подробности про эту и другие функции модуля time смотрите в официальном описании этого модуля на английском.

Чтобы узнать, какие именно константы и функции предоставляет разработчику, скажем, модуль gimpfu, достаточно в консоли Питона (Фильтры → Python-Fu → Консоль) набрать "import gimpfu; dir(gimpfu)" (естественно, без кавычек).  Можно даже изучить исходный текст модуля gimpfu, он находится в файле GIMP\lib\gimp\2.0\python\gimpfu.py

Последняя строчка подключает сервис gettext , чтобы foggify.py смог выводить надписи не только на английском, но и на местном языке.  Для самоделок она необязательна, но если программа пишется для широкого использования, изучить сервис gettext полезно.  Именно из-за этого сервиса некоторые строчки берутся в скобочки с подчёркиванием.  Например _("Clouds") вместо простого "Clouds" позволяет использовать в русском диалоге слово "Облака".

Во вложении диалог программы foggify.py показан как на родном английском, так и на "местном", русском языке.  Перевод gettext берёт из уже откомпилированного языкового файла GIMP\share\locale\ru\LC_MESSAGES\gimp20-python.mo

def foggify(img, layer, name, colour, turbulence, opacity):

    gimp.context_push()
    img.undo_group_start()

    if img.base_type is RGB:
        type = RGBA_IMAGE
    else:
        type = GRAYA_IMAGE
    fog = gimp.Layer(img, name,
                     layer.width, layer.height, type, opacity, NORMAL_MODE)
    fog.fill(TRANSPARENT_FILL)
    img.add_layer(fog, 0)

    gimp.set_background(colour)
    pdb.gimp_edit_fill(fog, BACKGROUND_FILL)

    # create a layer mask for the new layer
    mask = fog.create_mask(0)
    fog.add_mask(mask)

    # add some clouds to the layer
    pdb.plug_in_plasma(img, mask, int(time.time()), turbulence)

    # apply the clouds to the layer
    fog.remove_mask(MASK_APPLY)

    img.undo_group_end()
    gimp.context_pop()
Собственно, это и был текст функции foggify() , обрабатывающей изображение — на языке Питон процедуры задаются с помощью ключевого слова def .  В ваших программах здесь должен быть запрограммирован на языке Питон ваш алгоритм обработки астрофото.

register(
    "python-fu-foggify",
    N_("Add a layer of fog"),
    "Adds a layer of fog to the image.",
    "James Henstridge",
    "James Henstridge",
    "1999,2007",
    N_("_Fog..."),
    "RGB*, GRAY*",
    [
        (PF_IMAGE, "image",       "Input image", None),
        (PF_DRAWABLE, "drawable", "Input drawable", None),
        (PF_STRING, "name",       _("_Layer name"), _("Clouds")),
        (PF_COLOUR, "colour",     _("_Fog color"),  (240, 180, 70)),
        (PF_SLIDER, "turbulence", _("_Turbulence"), 1.0, (0, 10, 0.1)),
        (PF_SLIDER, "opacity",    _("Op_acity"),    100, (0, 100, 1)),
    ],
    [],
    foggify,
    menu="<Image>/Filters/Render/Clouds",
    domain=("gimp20-python", gimp.locale_directory)
    )
Предпоследняя часть foggify.py это регистрация нашего скрипта и только что определённой функции foggify() внутри Гимпа с помощью функции register().  В результате пользователь сможет:
  • Вызвать foggify.py из меню (Фильтры → Визуализация → Облака → Туман…)
  • При вызове появится окно параметров, где пользователь скрипта сможет ввести и настроить все необходимые параметры.  Задание параметров я советую проследить по английской версии диалога.

main()
Функция main() запускает наш плагин, обычно она последняя в тексте программы.

Что дальше?  Знающие английский найдут полезной страничку GIMP Python Documentation, которую поддерживает James Henstridge, автор разобранного скрипта foggify.py и проекта Гимп-Питон.  На страничке разбирается исходный текст плагина python_fu_clothify и даётся детальное описание процедур и объектов, которые предоставляют основные модули Гимп-Питона:

http://www.gimp.org/docs/python/index.html
« Последнее редактирование: 18 Мая 2009 [13:06:31] от ath »
HEQ5 Pro; EOS 60Da; бинокли Canon 15×50 IS, Celestron 7×50