本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文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 polskuاین وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسی

Thu nhỏ sao và xử lý sao: sự tiến hóa của các phương pháp và cách thực hiện bằng PixelMath

Kéo giãn và giai đoạn phi tuyến2021.01

Thu nhỏ sao ở mức hợp lý sẽ làm cho chủ thể của bức ảnh nổi bật hơn, nhất là ở những vùng sao dày đặc như vùng Dải Ngân Hà: nếu không xử lý, cả một bầu trời đầy sao sẽ lấn át tinh vân một cách nghiêm trọng. Bài này sắp xếp lại các phương pháp thu nhỏ sao, từ bộ lọc xói mòn (Erosion) thời đầu cho tới phương pháp dùng ảnh đã tách sao đang là chủ đạo hiện nay cùng cách thực hiện bằng PixelMath.

Cách làm thời đầu: thu nhỏ sao bằng xói mòn (Erosion)

Cách thu nhỏ sao sớm nhất dựa vào xói mòn (Erosion): trong Photoshop thì dùng bộ lọc “Minimum”, còn trong PixInsight thì dùng Erosion, để xói mòn các ngôi sao trong vùng chọn và làm sao nhỏ lại. Ai cầu kỳ hơn thì kết hợp thêm mặt nạ biên, tránh xói mòn vào tận lõi sao.

Thành thật mà nói, trước đây tôi ít khi thu nhỏ sao, vì Erosion truyền thống thường làm hỏng sao (chẳng hạn biến sao tròn thành hình thoi, hoặc phá hỏng sao kim cương). Nhưng với một số mục tiêu, ví dụ đại tinh vân Thuyền Để (Carina Nebula) nằm trong vùng Dải Ngân Hà, thì dù mặt nạ sao có làm khéo đến đâu, thành phẩm vẫn còn vô số sao gây nhiễu cho tinh vân, và lúc đó không thể không thu nhỏ sao. Cũng vì thế, tử huyệt lớn nhất của cách thu nhỏ sao bằng xói mòn là nó cực kỳ nhạy cảm với chất lượng mặt nạ: mặt nạ làm không tốt thì ở lõi sao và vùng quanh sao rất dễ sinh ra hiện tượng giả (artifact).

So sánh trước và sau khi thu nhỏ sao thời đầu, kết hợp mặt nạ của StarNet++ (đại tinh vân Thuyền Để)

Bước ngoặt: thu nhỏ sao bằng ảnh đã tách sao

Sự tiến bộ của thời đại dần biến việc thu nhỏ sao thành công việc chỉ cần kéo một thanh trượt là xong, muốn thu nhỏ lớp sao cỡ nào cũng tùy chỉnh được. Mấu chốt nằm ở chỗ: mọi người bắt đầu dùng các công cụ tách sao (như StarNet++) để thu nhỏ sao, chứ không chỉ để loại bỏ sao. Đến năm 2021, sau khi mọi thứ được đưa vào script thì càng tiện hơn nữa, và bộ lọc “Minimum” của PS hay Erosion của PI đã không còn thịnh hành.

Trong PI đã xuất hiện script thu nhỏ sao dùng được ngay. Nó không dùng bộ lọc “Minimum” hay Erosion, mà đạt mục đích bằng cách kết hợp StarNet++ với Contour Mask.

Minh họa cách thu nhỏ sao bằng script dựa trên StarNet++

Nhân đây tôi làm rõ một điểm dễ hiểu lầm: tùy chọn “Create star mask” trong StarNet++ thật ra tạo ra không phải mặt nạ, mà chính là những ngôi sao đã bị tách đi. Nếu bạn dùng PixelMath của PI hoặc layer của PS để cộng star_mask này trở lại ảnh đã tách sao, bạn sẽ thu được thứ gần như y hệt ảnh gốc chưa tách sao.

“star mask” do StarNet++ tạo ra thật ra chính là các ngôi sao, cộng trở lại thì khôi phục được ảnh

Sau khi thu nhỏ, các ngôi sao có to bằng nhau hết không

Đã có một người bạn cùng sở thích cho rằng sau khi thu nhỏ sao thì kích thước các ngôi sao đều trở nên như nhau. Thật sự có phải vậy không? Thực ra không phải — kích thước sao sau khi thu nhỏ chủ yếu phụ thuộc vào kích thước ban đầu của saomặt nạ thu nhỏ sao.

Trên thực tế, mỗi lần thu nhỏ sao bạn đều chọn loại sao muốn thu nhỏ (chủ yếu là sao cỡ nhỏ và vừa) rồi làm một mặt nạ thích hợp, khớp với kích thước sao; vì vậy sau khi thu nhỏ, kích thước các ngôi sao vẫn có thể khác nhau, chỉ là từ vùng quanh sao có thể nhận ra dấu vết của việc thu nhỏ. Lấy ảnh phóng to của SL 17 làm ví dụ: đó là kết quả của tổng cộng hai lần thu nhỏ sao (đến nay tôi chưa từng làm quá hai lần).

Sau khi thu nhỏ, kích thước các ngôi sao vẫn khác nhau và từ vùng quanh sao thấy được dấu vết thu nhỏ (SL 17)

Phóng to SL 17 để xem hiệu quả của hai lần thu nhỏ sao

Thu nhỏ sao bằng phương pháp ảnh đã tách sao cho kết quả sao tự nhiên hơn

Đối chiếu cục bộ trước và sau khi thu nhỏ sao

Thực hành thu nhỏ sao bằng PixelMath (trạng thái phi tuyến)

Việc thu nhỏ sao dựa trên ảnh đã tách sao có thể thực hiện chính xác trong PI bằng PixelMath. Các bước được phân tách như sau:

  1. Chuẩn bị sẵn tệp ảnh A, cùng với tệp ảnh đã tách sao B của A.
  2. Dùng STF kết hợp HistogramTransformation để đồng thời hạ độ sáng của A và B (dịch midtone sang phải).
  3. Đảo ảnh A và B sau khi đã hạ độ sáng (bàn phím Ctrl+I).
  4. Chia A đã đảo ảnh cho B đã đảo ảnh để thu được ảnh sao đảo C (PixelMath).
  5. Nhân C với ảnh đảo của B để thu được D, tức ảnh đảo của ảnh đã thu nhỏ sao (PixelMath).
  6. Đảo ảnh D để trở lại ảnh đã thu nhỏ sao bình thường (Ctrl+I).

Trong đó bước 5 và 6 thực chất chính là công thức của screen blending mode. Nếu muốn mức thu nhỏ mạnh hơn, ở bước 2 bạn có thể hạ độ sáng của A và B xuống thấp hơn nữa. Công thức minh họa như sau:

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

Minh họa các bước phân tách khi thu nhỏ sao bằng PixelMath

Phương pháp tương tự cũng có thể tái hiện trong Photoshop hoặc Affinity Photo, khác biệt là ở đó công việc được hoàn thành bằng layer, và chế độ hòa trộn (blending mode) giữa các layer cũng hơi khác.

Tái hiện cách thu nhỏ sao của PixelMath bằng layer trong Photoshop, có ghi chú chế độ hòa trộn của từng layer

Mấu chốt: phải lấy sao ra cho đúng bằng “phép chia đảo ảnh”

Nhiều người xử lý ảnh theo hướng tách sao nhưng cuối cùng lại thất bại khi cộng sao trở lại; mấu chốt nằm ở chỗ các ngôi sao đã được lấy ra bằng cách nào.

Nếu chỉ đơn thuần trừ ảnh đã tách sao khỏi ảnh gốc để lấy sao, rồi cộng số sao đó trở lại, kết quả thường là các ngôi sao mờ nhạt, màu sắc không đúng, trông như thể bạn đã hạ opacity của layer. Nguyên nhân là một phần nội dung của sao còn sót lại trên ảnh đã tách sao, nên phép trừ không lấy được trọn vẹn các ngôi sao.

Cách tốt hơn là dùng phép chia đảo ảnh để lấy được trọn vẹn các ngôi sao; sau khi xử lý xong ảnh đã tách sao, hãy dùng phép nhân hoặc phép nhân đảo ảnh (screen blending mode) để đặt sao trở lại.

Đối chiếu khác biệt giữa lấy sao bằng phép trừ (trên) và bằng phép chia đảo ảnh (dưới)

Tuyến tính và phi tuyến: công thức lấy ra và đặt lại khác nhau

Sau khi RC Astro cho ra mắt StarXTerminator (SXT), phạm vi áp dụng của việc tách sao đã mở rộng từ trạng thái phi tuyến sang cả trạng thái tuyến tính. Tuy vậy, ở trạng thái tuyến tính và phi tuyến, các bước cùng công thức để lấy sao ra và đặt sao lại vẫn hơi khác nhau, và điều này thường bị bỏ qua.

Trạng thái phi tuyến (ảnh đã trải qua kéo giãn mạnh, giữa các pixel không còn quan hệ tuyến tính ban đầu):

  • Lấy sao ra: đánh dấu “Unscreen Stars” trong SXT, hoặc sau khi tách sao thì dùng công thức chia đảo ảnh ~(~Original_Nebula / ~Starless_Nebula) để lấy sao.
  • Đặt sao lại: trong PixelMath dùng công thức nhân đảo ảnh ~(~Nebula * ~stars), đây cũng chính là công thức toán học của Screen Blending.

Trạng thái tuyến tính (sau khi tích hợp (integration) xong và trước khi kéo giãn mạnh, giữa các pixel vẫn giữ quan hệ tuyến tính ban đầu):

  • Lấy sao ra: không đánh dấu “Unscreen Stars” trong SXT.
  • Đặt sao lại: trong PixelMath dùng công thức cộng Nebula + stars.

Đối chiếu công thức lấy sao ra và đặt sao lại ở trạng thái tuyến tính và phi tuyến

Khi đã xác định rõ ảnh của bạn đang ở trạng thái nào và dùng đúng công thức tương ứng để lấy sao ra rồi đặt sao lại, bạn sẽ tránh được chuyện sao bị tối đi, đổi màu hay hỏng hẳn sau khi được đặt lại.