Như đã đề cập trong các câu trả lời khác, nhiễu xạ đã dẫn đến sự không rõ ràng. Để thử nghiệm điều này, người ta có thể cố gắng làm sắc nét hình ảnh bằng cách sử dụng giải mã bằng cách sử dụng chức năng trải rộng điểm tương ứng với F / 29. Để nhiễu xạ, chúng ta có (tối đa hóa bình thường)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
Trong đó J 1 là hàm Bessel của loại thứ tự 1 đầu tiên ,
s là khoảng cách trong ảnh được đo bằng pixel,
r là kích thước của một pixel (thường là khoảng 4.2 * 10 ^ (- 6) mét cho cảm biến crop),
λ là bước sóng của ánh sáng, và
F F-số, trong trường hợp này 29.
Điều này sau đó đúng với ánh sáng đơn sắc, để xấp xỉ chức năng trải rộng điểm cho các kênh màu chúng ta có thể lấy trung bình trên một số bước sóng thích hợp. Ngoài ra, người ta nên tích hợp P (s) trên diện tích pixel được chỉ định bởi s.
Nếu chúng ta biên dịch các hàm trải 3 điểm cho 3 kênh màu theo cách này, chúng ta có thể làm sắc nét hình ảnh bằng cách chuyển đổi nó thành không gian màu tuyến tính và áp dụng thuật toán giải mã và sau đó chuyển đổi trở lại sRGB. Tôi đã nhận được kết quả sau:
Vì vậy, khuôn mặt đã được làm sắc nét đáng kể khi chỉ sử dụng dữ liệu về số F và giả định về kích thước của pixel. Các tạo tác dải được hiển thị trong phần tối của hình ảnh, điều này là do áp phích hóa sau khi chuyển đổi trở lại sRGB.
Theo yêu cầu, tôi sẽ thêm một số chi tiết về các chương trình được sử dụng. Tôi đã sử dụng ImageJ và ImageMagick , tôi cũng đã sử dụng Mathicala để tính toán hàm lây lan điểm, nhưng nó cũng có thể được thực hiện trong ImageJ. Tôi sẽ bắt đầu bằng cách giải thích cách tôi thực hiện giải mã với ImageJ khi tôi đã có chức năng trải rộng điểm. Để thực hiện giải mã, bạn cần cài đặt một plugin cho ImageJ, tôi đã sử dụng plugin này cho trường hợp này, nhưng cũng có các plugin khác có sẵn, ví dụ như plugin DeconvolutionLab .
Trước tiên, bạn cần chuyển đổi sang không gian màu tuyến tính, tôi đã sử dụng ImageMagick để chuyển đổi hình ảnh unsharp (input.jpg) sang không gian màu tuyến tính bằng lệnh:
convert input.jpg -colorspace RGB output.tif
Sau đó với ImageJ, sau đó bạn mở tệp output.tif. Sau đó, từ các tùy chọn menu, bạn chọn "hình ảnh" rồi "màu" và sau đó "Nhổ kênh". Sau đó, từ menu chọn "plugin" và sau đó "deconvolution lặp song song" và sau đó giải mã tương tác 2d ".
Sau đó, bạn nhận được cửa sổ giải mã, sau đó bạn chọn hình ảnh và "PSF" có nghĩa là fucntion điểm lan truyền, ở đó bạn chọn tệp hình ảnh có chứa chức năng trải rộng điểm. Đối với phương pháp, tôi chọn "WPL" dựa trên bộ lọc Wiener, thường hoạt động khá tốt đối với hình ảnh có độ nhiễu thấp. Trong các tùy chọn cho WPL, hãy kiểm tra "bình thường hóa PSF" và đối với bộ lọc thông thấp, thay đổi giá trị thành 0,2, theo mặc định là 1, nhưng giá trị thấp hơn sẽ tốt hơn cho hình ảnh có độ nhiễu thấp (nếu bạn chọn nó lớn hơn, bạn ' sẽ có được một hình ảnh ít sắc nét hơn). Các tùy chọn khác, Ranh giới có thể được chọn là phản xạ, thay đổi kích thước có thể được đặt thành "công suất tiếp theo là 2", đầu ra có thể được đặt thành 32 bit, độ chính xác có thể được đặt thành gấp đôi. Tôi đã chọn số lần lặp tối đa là 15,
Sau đó, bạn chạy chương trình bằng cách nhấp vào "deconvolve". Sau đó, bạn nhận được một tệp hình ảnh 32 bit làm đầu ra. Thông thường, các giá trị pixel khá giống với những gì chúng có trong ảnh gốc, nhưng bạn có thể có một số pixel vượt quá mức tối đa cho định dạng ảnh gốc. Vì vậy, trong trường hợp này, chúng tôi đã bắt đầu với hình ảnh 8 bit, nhưng trong hình ảnh được giải mã, bạn có thể có các giá trị màu xám vượt quá 255, sau đó làm cho toàn bộ hình ảnh trở nên quá tối. Điều này phải được khắc phục bằng cách cắt các pixel này thành 255, bạn có thể thực hiện bằng cách chọn trong menu "process" và sau đó là "Math" và sau đó là "Max". Giá trị tối đa sau đó sẽ được sử dụng để cắt các giá trị màu xám vượt quá giá trị đó. Lưu ý rằng điều này sẽ được thực hiện cho hình ảnh mà bạn nhấp vào lần cuối. Bạn cũng có thể xem tệp nào là "tệp hiện tại" bằng cách chọn "
Sau đó, khi bạn đã giải mã được 3 thành phần màu, bạn có thể kết hợp chúng bằng cách chọn trong menu "hình ảnh", sau đó "màu" và sau đó "Hợp nhất kênh". Sau đó, bạn nhận được một hình ảnh tổng hợp mà bạn có thể chuyển đổi thành 8 bit RGB bằng cách sử dụng lệnh "Stack to RGB" mà bạn tìm thấy ở đó.
Sau đó, bạn lưu hình ảnh đó, hãy gọi nó là im.tif. Cuối cùng, bạn phải chuyển đổi nó thành sRGB, bạn có thể làm điều đó với ImageMagick bằng lệnh:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
Câu hỏi còn lại là làm thế nào để có được chức năng trải rộng điểm. Trong thực tế, nếu bạn đã chụp một bức ảnh giống như bức ảnh đang thảo luận ở đây, bạn có thể chỉ cần chụp một bức ảnh về nguồn điểm, ví dụ như một ngôi sao ở F / 29 và sử dụng nó làm chức năng trải rộng điểm của bạn. Ngoài ra, bạn có thể xem xét các ranh giới có độ tương phản cao và trích xuất hàm lây lan điểm từ cách các giá trị màu xám thay đổi từ giá trị này sang giá trị khác qua ranh giới. Nhưng sau đó, bạn đang cố gắng làm sắc nét hình ảnh tốt nhất có thể.
Trong trường hợp này, mục tiêu là biên dịch các hàm phân tán điểm cho kênh màu dựa trên những gì bạn mong đợi là cho F / 29, giải mã hình ảnh với điều đó và xem kết quả có đủ cải thiện không. Tôi đã sử dụng Mathicala để thực hiện một số tính toán và chương trình đại số máy tính tiên tiến như vậy khá dễ dàng để thực hiện tất cả các loại thao tác bao gồm lấy trung bình trên một khoảng bước sóng và tích hợp trên các vùng pixel để làm cho PSF thực tế hơn.
Nhưng ImageJ cũng cho phép bạn tạo một hình ảnh mới mà bạn có thể sử dụng làm chức năng trải rộng điểm. Nếu bạn nhấp vào "Tệp" và sau đó "Mới", bạn có thể tạo hình ảnh có kích thước 32 bit, giả sử, 64 x 64 chứa đầy màu đen. Sau đó, bạn có thể lập trình một công thức cho các giá trị màu xám bằng cách chọn "quy trình", sau đó "Toán học" và sau đó "Macro". Để có được hàm lây lan điểm cho trường hợp này liên quan đến hàm Bessel ở đây, bạn có thể sử dụng thực tế là nó được mô tả tốt bằng một vài thuật ngữ đầu tiên của việc mở rộng chuỗi. Trang MathWorld mà tôi liên kết để cung cấp cho bạn bản mở rộng chuỗi này, vì vậy, J 1 (x) 2 / x 2 với x = π rs / ( F ) có thể được thay thế bằng một hàm có dạng A + B s 2 + C s 4. Giá trị gần đúng này sẽ trở nên không hợp lệ nếu s quá lớn. Bây giờ, chúng ta biết rằng PSF có xu hướng bằng không, ví dụ ở khoảng cách khoảng 5 hoặc 6 pixel, nó có thể được đặt thành không. Giả sử rằng đa thức vẫn còn nhỏ ở các giá trị này, bạn có thể viết Macro dưới dạng:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
Sau đó, bạn tạo 3 hình ảnh cho lambda = 650nm, 500nm và 400nm hoặc bất kỳ giá trị nào khác mà bạn cho là phù hợp để thể hiện nhiễu xạ trong 3 kênh màu. Sau đó, bạn có thể thực hiện lấy trung bình trên một vài bước sóng khác nhau bằng cách tạo hình ảnh cho lambda khác nhau và sau đó chọn "xử lý", sau đó "máy tính hình ảnh" và ở đó bạn chọn "thêm". Sau đó, bạn có thể thêm một hình ảnh khác vào kết quả này và khi bạn thêm xong, bạn có thể chia để lấy mức trung bình bằng cách chọn "quy trình", sau đó "toán học" và sau đó "chia".