Thursday, December 1, 2016

TLDR: Photoshop hoạt động như thế nào?

Hôm nay, nhân có đứa bạn hỏi 1 câu rất vu vơ là photoshop hoạt động như nào mà có thể sửa cái ảnh đẹp như vậy. Vâng, một câu hỏi đối với mình khá là thú vị.

Mình không phải dân chơi ảnh, cũng ko phải designer gì cả, kỹ năng sử dụng photoshop của mình chỉ đủ dùng để làm mấy việc như sửa màu, thêm hiệu ứng đơn giản mỗi khi mình cần ...làm màu. Nhưng may mắn mình có một khoảng thời gian làm việc với graphic library (công việc của mình  liên quan với từng pixel của hình ảnh), và photoshop cũng chỉ là một phần mềm dựa trên những graphic library mà thôi, ngoài ra mình cũng có chút kiến thức về xử lý ảnh và về quang học. Mình viết bài này với đối tượng nhắm đến là những ai đang dùng photoshop trong công việc hàng ngày và tò mò như người bạn đặt câu hỏi bên trên, hi vọng bạn có thể hiểu thêm về công cụ đang giúp các bạn kiếm tiền (hoặc không gì cả) mỗi ngày.

Trước khi đi vào chi tiết photoshop làm gì, mình sẽ bắt đầu từ quá trình chụp ảnh. Khi các bạn nhấn nút chụp, ánh sáng sẽ đi qua các thấu kính của máy ảnh và hội tụ ở cảm biến ảnh (sensor), bộ xử lý trong máy ảnh sẽ xử lý những gì nhận được từ sensor thành bức ảnh lưu trên thẻ nhớ (chi tiết quá trình này hơi phức tạp, mình ko nêu chi tiết để các bạn đỡ nhưc đầu), và xong, bạn đã có bức ảnh để sẵn sàng xử lý.

Có một điểm cần lưu ý là ảnh mà máy ảnh chụp được gọi là ảnh raster tức là ảnh được tạo ra bởi nhiều điểm ảnh, khác với ảnh vector (là ảnh được tạo ra bởi những đối tượng toán học như điểm, đường thẳng, đường cong, ...), và photoshop là chương trình xử lý ảnh raster (raster-based image editor) khác với AUTOCAD hay adobe illustrator là chương trình xử lý ảnh vector.

Hẳn các bạn đã biết, ảnh raster là một mảng 2 chiều có các phần tử chính là các pixel, màu sắc của mỗi pixel được thể hiện bởi  phối màu phát xạ (additive color model, ví dụ như RGB, khác với phố màu hấp thụ - subtractive color model CYMK). Ví dụ như hình minh họa dưới đây

Minh họa ảnh raster với các pixel có các thành phần màu sắc khác nhau (ảnh từ wikipedia)
Điều mấu chốt ở đây chính là 3 thành phần màu này, ở hình minh họa trên thì các bạn thấy 3 thành phần màu được thể hiện bằng %, ví dụ cái pixel màu hơi trắng kia có 3 thành phần màu RGB là 93%, nghĩa là mỗi màu được phát sáng với 93% công suất nên mắt bạn sẽ thấy pixel đó hơi sáng, nhưng chưa trắng hẳn, nếu 3 màu phát sáng với công suất 100% thì pixel đó sẽ có màu trắng. Đó là ý tưởng về việc thể hiện màu sắc bằng 3 màu phát xạ.

Có một lưu ý nhỏ ở đây là các bạn làm photoshop sẽ thấy mã màu có dạng 6 chữ số ví dụ như màu đỏ là FF0000, màu lục là 00FF00, màu đen là 000000, mã màu này chính là cách ghi 3 màu RGB trên máy tính, có dạng mã thập lục phân (Hexadecimal). trong mã thập lục phân thì FF tương đương 255, tương đương với 100% "công suất" như mình đề cập ở trên, nên có thể dễ hiểu, mã màu FFFFFF là có 3 màu RGB là 100%, 100%, và 100% tức là màu trắng, 000000 là 3 màu 0% tức là không phát sáng, là màu đen. các bạn có thể kiểm chứng các màu khác.

Cái hay của cơ thế biểu thị màu sắc ở đây ko chỉ là việc hiển thị màu sắc lên màn hình, mà chúng ta còn có thể làm toán với những pixel. Ví dụ, màu đỏ pha với màu xanh lục ra màu gì, mình xin phép được toán học hóa câu hỏi trên.

Trong toán học, có 2 khái niệm là toán tử(operator) và toán hạng (operand), toán tử là một phép tính gì đó, toán hạng là đầu vào (input) của toán tử, đầu ra(output) của toán tử chính là kết quả phép tính, ví dụ a+b thì chúng ta có toán tử + có 2 toán hạng là a và b,  toán tử ở đây có thể là cộng, trừ, nhân, chia, khai căn, lấy mũ, đạo hàm, vi phân, tích phân, ...hoặc cũng có thể là kết hợp tất cả các  phép tính đó lại.
Qua trở lại ví dụ trên, mình có một toán tử pha màu, nhận input là 2 màu lục và đỏ, vậy kết quả là màu gì. Ban hãy tự kiểm tra bằng cách này: trong photoshop, bạn tạo ra 2  layer, một layer toàn màu đỏ (FF0000) và một layer toàn màu lục (00FF00), sau đó chọn kiểu layer blending là linear dodge, xem nó ra màu gì, mình bị mù màu nên ko biết nó ra màu gì, nhưng mình chắc chắn nó ra mã màu FFFF00. Các bạn có thể cho mình biết nó ra màu gì được ko?

Vây cái toán tử pha màu mà mình nhắc ở trên, nó gọi là trộn (blending) màu theo kiểu phối hợp (addition), từ ngữ trong ngành photoshop gọi là linear dodge. Và thực ra thì việc trộn màu trong photoshop nó có đủ thứ kiểu trộn (ví dụ như  nhuộm tóc phải có thêm các phụ gia để màu tóc nó lên đẹp hơn) các bạn ạ, các kiểu trộn đó nó được gọi là blending mode, mỗi mode thì có một kiểu toán tử khác nhau được áp dụng vào 2 layers.

Mình vừa ví dụ về việc blending với 2 layer trong photoshop là 2 màu thôi. Vậy nếu bạn có một bức ảnh hoàn chỉnh, được blending với một "tấm kính màu lục" (giống như giấy màu làm lồng đèn ấy), thì bức ảnh của bạn sẽ như thế nào? Nó sẽ giống như việc bạn nhìn bức ảnh qua mắt kính có dán "tấm kính màu lục" vậy, bức ảnh sẽ tràn ngập màu xanh, giống như cái filter vậy. Bức ảnh dưới đây của mình được chụp bằng máy PnS cách đây 6 năm, bức ảnh gốc thực tế ko đẹp như vậy, mấy cái cây nó ko đc XANH như vậy, nhưng nhờ mấy cái trò blending với layer màu xanh mà trông cây cối có vẻ tốt tươi như thế.

Ảnh gốc



Ảnh sau khi đã cho blend với màu xanh.
Vậy pts làm cách nào mà có thể đưa được toàn bộ bức ảnh từ kiểu xám xịt ra kiểu xanh tốt như thế. Thực chất thì pts làm việc với từng điểm ảnh, ở mỗi điểm ảnh, PTS sẽ thực hiện các toán tử trên các màu, kết quả là các giá trị màu sắc bị thay đổi. Hiểu đơn giản là như thế này: ví dụ việc làm cho bức ảnh xanh hơn, pts sẽ đi đến điểm ảnh đầu tiên, tăng thành phần màu xanh lên một ít, đến điểm ảnh thứ 2, cũng tăng thành phần màu xanh lên một ít, và cứ thế cho đến pixel cuối cùng của hình ảnh, kết quả là chính ta đã có một bức ảnh với tất cả các điểm ảnh đã được làm xanh hơn.

Các ví dụ khác của photoshop mà bạn có thể liên tưởng đến việc, tăng hoặc giảm công suất phát xạ của 3 màu RGB trên tưng điểm ảnh là: chỉnh độ sáng tối, chỉnh độ tương phản, các loại filter màu, sửa ảnh bị ám màu.

Một số hiệu ứng chỉnh màu nổi tiếng các bạn có thể hay gặp như làm cho ảnh trông có vẻ ấm hơn hay lạnh hơn(nó có cái thuật ngữ mà mình quên rồi) bằng cách tăng thêm sắc xanh lam hay đỏ cho bức ảnh.

Có một hiệu cũng là chỉnh màu, nhưng hơi đặc biệt ở chỗ nó sửa màu cho cả 3 kênh RGB làm cho tất cả các điểm ảnh đều có lượng phát xạ của RGB như nhau, đó là hiệu ứng grayscale (ảnh xám). Ảnh xám khác ảnh đen trắng về mặt kỹ thuật nhé các bạn. Ví dụ một điểm ảnh có dạng RrGgBb sau khi qua toán tử grayscale nó sẽ có dạng ZzZzZz, không tin bạn có thể lấy một bức ảnh màu, sau đó áp hiệu ứng đen trắng vào rồi dùng color picker xem màu của các điểm ảnh sau khi đã làm đen trắng có phải có dạng như mình nói ko.

Ok, vậy nếu chỉ là tính toán trên từng điểm ảnh như vậy, tại sao photoshop lại có thể làm được những việc như biến ảnh thường thành tranh bút chì?

Ah đúng mà không đúng, những ví dụ trên thì photoshop chỉ tính toán trên từng điểm ảnh, nhưng có những thuật toán photoshop tính toán trên nhiều điểm ảnh cùng lúc. Ví dụ để tạo hiệu ứng tranh chì, đầu tiên photoshop sẽ phải tìm ra các nét (edge detection) trên bức ảnh gốc bằng các phép toán vi phân 2 chiều (đại khái là phép toán vi phân, nhưng ko phải trên một đường thẳng mà là trên một mặt phẳng, đúng hơn là toán tử gradient), lúc đó nó sẽ có "ảnh chì màu" nhưng ảnh chì màu thì ko đẹp nên nó sẽ chuyển ảnh chì màu thành chì than bằng cách sử dụng hiệu ứng đen trắng. Nguyên tắc cơ bản là vậy, thực tế thì người ta sẽ có thêm các thuật toán đặc biệt để làm cho ảnh trông giống thật hơn.
Ảnh gốc (nguồn wikipedia)
Ảnh sau khi áp dụng thuật toán edge detection



Và nói đến đây, các bạn có thể high light mấy chữ "vi phân", "tích phân" trong bài này và ném vào mặt đứa nào dám hỏi "Học toán làm gì trong khi ra đường chỉ có đếm và cộng trừ nhân chia lấy căn bậc 2?" Vâng, nếu ko có toán thì ko có photoshop  hay camera 360 cho các bạn tự sướng đâu nhé.

Ah, nãy mình chưa nói tích phân được dùng ở đâu trong photoshop, trong các hiệu ứng làm mờ (blur), photoshop sẽ làm các phép nhân chập (convolution) có tác dụng là giảm sự khác nhau giữa các điểm ảnh đi (much là làm cho các điểm ảnh ko rõ ràng nữa), phép convolution trong toán học thực chất là là phép tích phân cộng kết hợp với vài phép toán khác. Dễ thấy ứng dụng của hiệu ứng blur là tạo ra các bức ảnh chụp chân dung lung linh được làm mờ hậu cảnh. Cũng như ví dụ trên, các bạn dùng plugin hay preset thì ấn một vài nút thì bức ảnh từ có DOF dài chuyển thành bức ảnh xóa phông trong huyền thoại. Việc này thực tế thì có nhiều gia đoạn, giai đoạn đầu tiên là phải tách chủ thể và hậu cảnh ra, photoshop làm việc đó bằng nhiều thuật toán edge detection, sau đó sẽ áp dụng các hiệu ứng blur cho phần hậu cảnh, làm lung linh phần chủ thể và ghép 2 phần lại với nhau.

Nhờ vi phân và tích phân mà các bạn mớ có bức ảnh lung linh như thế để up fb đấy nhé.

Các bạn thanh niên trong nghề thấy em nói có gì sai thì sửa giúp ạ. Em chỉ đứng ở view của người làm kỹ thuật mà nói về pts thôi, chứ em ko phải dân sử dụng pts chuyên nghiệp gì đâu ạ.

Em xin hết ạ.


1 comment:

  1. Bài viết hay, mở mang đầu óc.
    Cơ mà tích phân, vi phân, etc. để tạo ra công nghệ kĩ thuật thì đúng, bởi vậy chỉ nên phê phán mấy thằng học engineering hay STEM mà chê toán thôi. Còn mấy người học tâm lý học, xã hội học, y tá (well, y tá cũng cần toán để tính doses nhưng nhân chia cơ bản thôi, ko tới nỗi tích phân vi phân đâu), và hàng chục ngành khác ko cần toán cao cấp thì người ta kêu ca là đúng rồi.
    Nói chung, toán cơ bản (nhân chia, căn, mũ, giải pt bậc 2) thì ai cũng nên học, nhưng toán cao cấp (đạo hàm, tích phân, vi phân, bất đẳng thức, etc.) thì ko nên ép hết mọi người học.
    Quan Cfc.

    ReplyDelete