Tôi nghĩ vấn đề chính là một trong các phạm vi động, thuật toán của bạn có thể đúng nhưng bạn đang làm việc với loại dữ liệu sai.
Một nguồn sáng điểm khác có thể cắt và chuyển sang màu trắng tinh khiết được lan truyền trên một diện tích lớn hơn bằng một thấu kính không định hướng, để nó tạo thành một đĩa không sáng và do đó không phải là clip.
Đó là lý do tại sao bạn có được những vòng tròn đẹp đó trong hình ảnh thực tế của bạn. Nếu bạn cắt tín hiệu (làm cho nó kém sáng hơn so với mức khác và sau đó lan truyền nó ra bằng mô phỏng Bo mạch của bạn, bạn sẽ có một vòng tròn mờ (hoặc hình lục giác, hoặc bất cứ thứ gì) không nổi bật và do đó trông không thực tế.
Những gì bạn có trong một chuỗi hình ảnh thực sự là:
bokeh (from the lens) -> digitisation (clipping) -> gamma correction & dynamic range compression
Những gì bạn đang làm là
sharp image -> digitisation (clipping) -> gamma correction & dynamic range compression -> bokeh simulation
Bạn sẽ không nhận được kết quả chính xác vì bạn không làm việc với dữ liệu tuyến tính.
Những gì bạn có thể làm là cố gắng tuyến tính hóa dữ liệu, thay thế bất kỳ phạm vi động nào đã bị mất để cắt, thực hiện mô phỏng Bo mạch của bạn và sau đó làm lại các hoạt động phi tuyến!
Đây là một ví dụ. Tôi đã bắt đầu với một hình ảnh HDR đã được bổ sung, cho kết quả phi tuyến cao. Đây là loại hình ảnh tồi tệ nhất để thử mô phỏng hiệu ứng với!
Thực hiện thao tác tích chập tiêu chuẩn để mô phỏng hiệu ứng bokeh (sử dụng công cụ làm mờ ống kính của photoshop) mang lại kết quả này, rất giống với những gì bạn đang nhận được:
Để có được kết quả tốt hơn, tôi đã áp dụng một đường cong cực đoan để thử và đưa hình ảnh trở lại gần như những gì nó đã có trước khi tô màu, trong đó các điểm nổi bật là nhiều, sáng hơn nhiều so với phần còn lại của hình ảnh. Tôi đã làm điều này bằng công cụ cấp độ, đẩy đầu vào trung tâm một bước dài sang phải, từ 1.0 đến khoảng 0.2). Sau đó, tôi áp dụng công cụ làm mờ ống kính, giống như trước đây. Cuối cùng tôi áp dụng một đường cong cực đoan theo hướng ngược lại với đường cong đầu tiên. Kết quả, trong khi một chặng đường dài từ hoàn hảo, trông giống như hiệu ứng ống kính thực tế hơn:
Nếu bạn đang thực hiện mã này, sau đó thử lập phương cho từng giá trị, sau đó áp dụng thói quen mô phỏng hiệu ứng Bo mạch của bạn, sau đó lấy gốc khối của mỗi giá trị. Bạn sẽ thấy một sự cải thiện. Nó có thể mất một số điều chỉnh.
tl; dr ngay cả khi bạn đã thực hiện một mô hình toán học hoàn hảo về hiệu ứng bokeh, nó phải được áp dụng trên dữ liệu tuyến tính không bị cắt. Nếu bạn áp dụng các tính toán tương tự cho dữ liệu được sửa đổi nhiều (ngay cả một tiêu chuẩn trong máy ảnh JPEG cũng được sửa đổi nhiều theo quan điểm toán học), bạn sẽ nhận được một kết quả rất khác.