Уменьшение звёзд и работа со звёздами: эволюция методов и рабочий процесс в PixelMath
Разумное уменьшение звёзд позволяет ярче выделить основной объект съёмки, особенно в областях с высокой плотностью звёзд, таких как область Млечного Пути, — если ничего не делать, звёздное небо будет сильно мешать восприятию туманности. Эта статья систематизирует методы уменьшения звёзд, начиная от эрозионных фильтров прежних лет и заканчивая современным основным подходом через безызвёздное изображение и его реализацией в PixelMath.
Метод прежних лет: уменьшение звёзд эрозией (Erosion)
Самая ранняя форма уменьшения звёзд опиралась на эрозию (Erosion): в Photoshop использовали фильтр «Минимум» (Minimum), а в PixInsight — Erosion, чтобы применить эрозию к звёздам в выделенной области и тем самым уменьшить их. Для более тонкой работы это сочетали с маской краёв (edge mask), чтобы не «съесть» центры звёзд.
Честно говоря, раньше я почти не уменьшал звёзды, потому что традиционная Erosion часто портит звёзды (например, превращает круглые звёзды в ромбы или уродует звёзды в форме бриллианта). Но для некоторых объектов, например туманности Киля, расположенной в области Млечного Пути, даже при самой качественной звёздной маске в готовом изображении всё равно остаётся масса звёзд, мешающих туманности, — и тогда без уменьшения звёзд не обойтись. Именно поэтому самое слабое место эрозионного уменьшения звёзд — крайняя чувствительность к качеству маски: если маска сделана плохо, в центрах звёзд и вокруг них легко возникают артефакты.

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

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

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




Реализация уменьшения звёзд в PixelMath (нелинейное состояние)
Уменьшение звёзд с помощью безызвёздного изображения можно точно выполнить в PI с помощью PixelMath. Пошагово это выглядит так:
- Подготовьте файл изображения A и его безызвёздное изображение — файл B.
- С помощью STF вместе с HistogramTransformation одновременно понизьте яркость A и B (сдвиньте midtone вправо).
- Инвертируйте A и B после понижения яркости (клавиши Ctrl+I).
- Разделите инвертированное A на инвертированное B, чтобы получить инвертированное изображение звёзд C (PixelMath).
- Умножьте C на инверсию B, чтобы получить инверсию D изображения с уменьшенными звёздами (PixelMath).
- Инвертируйте D обратно в нормальное изображение с уменьшенными звёздами (Ctrl+I).
Шаги 5 и 6 на самом деле представляют собой не что иное, как формулу режима наложения screen. Если вы хотите более сильное уменьшение, на шаге 2 можно понизить яркость A и B ещё сильнее. Схематическая формула:
afterimage = ~((~mtf_low(beforeimage) / ~mtf_low(starless)) * ~starless)

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

Ключевой момент: звёзды нужно правильно извлекать с помощью «инвертированного деления»
Многие обрабатывают изображение безызвёздным методом, но в конце терпят неудачу при добавлении звёзд обратно, и суть проблемы — в том, как звёзды были извлечены.
Если просто вычесть безызвёздное изображение из исходного, чтобы получить звёзды, а затем добавить эти звёзды обратно, они часто получаются тусклыми и с неверным цветом, будто вы понизили непрозрачность слоя. Причина в том, что часть содержимого звёзд осталась на безызвёздном изображении, поэтому вычитание не смогло полностью извлечь звёзды.
Более удачный способ — получить полные звёзды с помощью инвертированного деления; после завершения обработки безызвёздного изображения верните звёзды с помощью умножения или инвертированного умножения (режим screen blending).

Линейное и нелинейное состояние: формулы извлечения и возврата различаются
После того как RC Astro выпустила StarXTerminator (SXT), область применения удаления звёзд расширилась с нелинейного состояния на линейное состояние. Однако в линейном и нелинейном состояниях шаги и формулы извлечения и возврата звёзд всё же немного отличаются, и это часто упускают из виду.
Нелинейное состояние (изображение уже подверглось сильному растяжению, так что пиксели больше не находятся в исходном линейном соотношении):
- Извлечение звёзд: отметьте «Unscreen Stars» в SXT, либо после удаления звёзд получите их по формуле инвертированного деления
~(~Original_Nebula / ~Starless_Nebula). - Возврат звёзд: в PixelMath используйте формулу инвертированного умножения
~(~Nebula * ~stars)— это и есть математическая формула Screen Blending.
Линейное состояние (после интеграции, до сильного растяжения, когда пиксели сохраняют исходное линейное соотношение):
- Извлечение звёзд: не отмечайте «Unscreen Stars» в SXT.
- Возврат звёзд: в PixelMath используйте формулу сложения
Nebula + stars.

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