本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文This site is available in English.View in Englishこのサイトには日本語版があります。日本語で表示이 사이트는 한국어로도 제공됩니다.한국어로 보기Diese Website ist auch auf Deutsch verfügbar.Auf Deutsch ansehenEste sitio web también está disponible en español.Ver en españolQuesto sito è disponibile anche in italiano.Visualizza in italianoCe site est également disponible en français.Afficher en françaisEste site também está disponível em português.Ver em portuguêsDeze website is ook beschikbaar in het Nederlands.In het Nederlands bekijkenयह वेबसाइट हिन्दी में भी उपलब्ध है।हिन्दी में देखेंهذا الموقع متاح أيضًا باللغة العربية.عرض بالعربيةSitus ini juga tersedia dalam bahasa Indonesia.Lihat dalam bahasa IndonesiaBu site Türkçe olarak da mevcut.Türkçe görüntüleTa strona jest dostępna także po polsku.Wyświetl po polskuTrang web này cũng có phiên bản tiếng Việt.Xem bằng tiếng Việtاین وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسی

Уменьшение звёзд и работа со звёздами: эволюция методов и рабочий процесс в PixelMath

Растяжка и нелинейная стадия2021.01

Разумное уменьшение звёзд позволяет ярче выделить основной объект съёмки, особенно в областях с высокой плотностью звёзд, таких как область Млечного Пути, — если ничего не делать, звёздное небо будет сильно мешать восприятию туманности. Эта статья систематизирует методы уменьшения звёзд, начиная от эрозионных фильтров прежних лет и заканчивая современным основным подходом через безызвёздное изображение и его реализацией в PixelMath.

Метод прежних лет: уменьшение звёзд эрозией (Erosion)

Самая ранняя форма уменьшения звёзд опиралась на эрозию (Erosion): в Photoshop использовали фильтр «Минимум» (Minimum), а в PixInsight — Erosion, чтобы применить эрозию к звёздам в выделенной области и тем самым уменьшить их. Для более тонкой работы это сочетали с маской краёв (edge mask), чтобы не «съесть» центры звёзд.

Честно говоря, раньше я почти не уменьшал звёзды, потому что традиционная Erosion часто портит звёзды (например, превращает круглые звёзды в ромбы или уродует звёзды в форме бриллианта). Но для некоторых объектов, например туманности Киля, расположенной в области Млечного Пути, даже при самой качественной звёздной маске в готовом изображении всё равно остаётся масса звёзд, мешающих туманности, — и тогда без уменьшения звёзд не обойтись. Именно поэтому самое слабое место эрозионного уменьшения звёзд — крайняя чувствительность к качеству маски: если маска сделана плохо, в центрах звёзд и вокруг них легко возникают артефакты.

Сравнение до и после уменьшения звёзд прежних лет с использованием маски StarNet++ (туманность Киля)

Поворотный момент: уменьшение звёзд через безызвёздное изображение

С развитием технологий уменьшение звёзд постепенно превратилось в операцию, которую можно выполнить простым перетаскиванием ползунка, с возможностью самостоятельно выбирать, звёзды какого размерного класса уменьшать. Ключевой момент: люди начали использовать инструменты удаления звёзд (например, StarNet++) для их уменьшения, а не только для удаления. К 2021 году, после появления скриптов, это стало ещё удобнее, и фильтр «Минимум» в PS или Erosion в PI уже вышли из моды.

В PI появился готовый к использованию скрипт для уменьшения звёзд. Он не использует фильтр «Минимум» или Erosion, а достигает цели методом, сочетающим StarNet++ с Contour Mask.

Иллюстрация скриптового уменьшения звёзд на основе StarNet++

Здесь заодно проясню один момент, который легко понять неправильно: опция «Create star mask» в StarNet++ на самом деле создаёт не маску, а сами удалённые звёзды. Если с помощью PixelMath в PI или слоёв в PS добавить этот star_mask обратно к уже безызвёздному изображению, получится нечто почти идентичное исходному изображению, из которого звёзды не удалялись.

«star mask», создаваемая StarNet++, на самом деле — сами звёзды; добавив её обратно, можно восстановить изображение

Становятся ли все звёзды одного размера после уменьшения

Один из коллег по хобби как-то утверждал, что после уменьшения звёзд их размер становится одинаковым. Действительно ли это так? На самом деле нет — размер уменьшенной звезды зависит главным образом от её исходного размера и от маски уменьшения звёзд.

На практике при каждом уменьшении звёзд вы выбираете тип звёзд для сжатия (в основном мелкие и средние) и создаёте подходящую маску, соответствующую размерам звёзд; после уменьшения размеры звёзд по-прежнему могут различаться — просто по окружению звёзд можно заметить следы уменьшения. В качестве примера возьмём увеличенное изображение SL 17 — это результат двух проходов уменьшения звёзд в общей сложности (пока я не делал больше двух проходов).

После уменьшения размеры звёзд по-прежнему различаются, а по их окружению видны следы уменьшения (SL 17)

Увеличенный просмотр SL 17: эффект двух проходов уменьшения звёзд

Уменьшение звёзд методом безызвёздного изображения даёт более естественный результат по звёздам

Локальное сравнение до и после уменьшения звёзд

Реализация уменьшения звёзд в PixelMath (нелинейное состояние)

Уменьшение звёзд с помощью безызвёздного изображения можно точно выполнить в PI с помощью PixelMath. Пошагово это выглядит так:

  1. Подготовьте файл изображения A и его безызвёздное изображение — файл B.
  2. С помощью STF вместе с HistogramTransformation одновременно понизьте яркость A и B (сдвиньте midtone вправо).
  3. Инвертируйте A и B после понижения яркости (клавиши Ctrl+I).
  4. Разделите инвертированное A на инвертированное B, чтобы получить инвертированное изображение звёзд C (PixelMath).
  5. Умножьте C на инверсию B, чтобы получить инверсию D изображения с уменьшенными звёздами (PixelMath).
  6. Инвертируйте D обратно в нормальное изображение с уменьшенными звёздами (Ctrl+I).

Шаги 5 и 6 на самом деле представляют собой не что иное, как формулу режима наложения screen. Если вы хотите более сильное уменьшение, на шаге 2 можно понизить яркость A и B ещё сильнее. Схематическая формула:

afterimage = ~((~mtf_low(beforeimage) / ~mtf_low(starless)) * ~starless)

Иллюстрация пошагового уменьшения звёзд с помощью PixelMath

Тот же метод можно воспроизвести и в Photoshop или Affinity Photo — разница в том, что там это делается с помощью слоёв, а режимы наложения (blending mode) между слоями немного отличаются.

Воспроизведение уменьшения звёзд из PixelMath с помощью слоёв Photoshop с указанием режима наложения каждого слоя

Ключевой момент: звёзды нужно правильно извлекать с помощью «инвертированного деления»

Многие обрабатывают изображение безызвёздным методом, но в конце терпят неудачу при добавлении звёзд обратно, и суть проблемы — в том, как звёзды были извлечены.

Если просто вычесть безызвёздное изображение из исходного, чтобы получить звёзды, а затем добавить эти звёзды обратно, они часто получаются тусклыми и с неверным цветом, будто вы понизили непрозрачность слоя. Причина в том, что часть содержимого звёзд осталась на безызвёздном изображении, поэтому вычитание не смогло полностью извлечь звёзды.

Более удачный способ — получить полные звёзды с помощью инвертированного деления; после завершения обработки безызвёздного изображения верните звёзды с помощью умножения или инвертированного умножения (режим screen blending).

Сравнение разницы между извлечением звёзд вычитанием (вверху) и инвертированным делением (внизу)

Линейное и нелинейное состояние: формулы извлечения и возврата различаются

После того как RC Astro выпустила StarXTerminator (SXT), область применения удаления звёзд расширилась с нелинейного состояния на линейное состояние. Однако в линейном и нелинейном состояниях шаги и формулы извлечения и возврата звёзд всё же немного отличаются, и это часто упускают из виду.

Нелинейное состояние (изображение уже подверглось сильному растяжению, так что пиксели больше не находятся в исходном линейном соотношении):

  • Извлечение звёзд: отметьте «Unscreen Stars» в SXT, либо после удаления звёзд получите их по формуле инвертированного деления ~(~Original_Nebula / ~Starless_Nebula).
  • Возврат звёзд: в PixelMath используйте формулу инвертированного умножения ~(~Nebula * ~stars) — это и есть математическая формула Screen Blending.

Линейное состояние (после интеграции, до сильного растяжения, когда пиксели сохраняют исходное линейное соотношение):

  • Извлечение звёзд: не отмечайте «Unscreen Stars» в SXT.
  • Возврат звёзд: в PixelMath используйте формулу сложения Nebula + stars.

Сравнение формул извлечения и возврата звёзд в линейном и нелинейном состояниях

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