ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ การเลี้ยวเบนทำให้เกิดความไม่ลงรอยกัน ในการทดสอบสิ่งนี้สามารถพยายามเพิ่มความคมชัดของภาพโดยใช้ deconvolution โดยใช้ฟังก์ชั่นกระจายจุดที่สอดคล้องกับ F / 29 สำหรับการเลี้ยวเบนเรามี (สูงสุดถึงการทำให้เป็นมาตรฐานโดยรวม)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
เมื่อ J 1เป็นฟังก์ชัน Bessel ของคำสั่งชนิดแรก 1 ,
sคือระยะทางในภาพที่วัดเป็นพิกเซล,
rคือขนาดของหนึ่งพิกเซล (โดยทั่วไปประมาณ 4.2 * 10 ^ (- 6) เมตรสำหรับเซนเซอร์ครอบตัด),
λคือความยาวคลื่นของแสงและ
Fหมายเลข F ในกรณีนี้ 29
นี่คือความจริงสำหรับแสงสีเดียวเพื่อประมาณฟังก์ชั่นการกระจายจุดสำหรับช่องสีที่เราสามารถเฉลี่ยในช่วงความยาวคลื่นที่เหมาะสม นอกจากนี้หนึ่งควรรวม P (s) กับพื้นที่ของพิกเซลที่ระบุโดย s
หากเรารวบรวมฟังก์ชั่นการกระจาย 3 จุดสำหรับช่อง 3 สีด้วยวิธีนี้เราสามารถทำให้ภาพคมชัดขึ้นโดยแปลงให้เป็นพื้นที่สีเชิงเส้นและใช้อัลกอริทึมการถอดรหัสจากนั้นเปลี่ยนกลับเป็น sRGB ฉันได้ผลลัพธ์ดังต่อไปนี้:
ดังนั้นใบหน้าจึงคมชัดขึ้นอย่างมากโดยใช้เฉพาะข้อมูลเกี่ยวกับหมายเลข F และสมมติฐานเกี่ยวกับขนาดของพิกเซล แถบวัตถุสามารถมองเห็นได้ในส่วนที่มืดของภาพนี่เป็นเพราะการโพสต์หลังจากเปลี่ยนกลับเป็น sRGB
ตามที่ร้องขอฉันจะเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับโปรแกรมที่ใช้ ฉันใช้ImageJและImageMagickฉันยังใช้ Mathematica เพื่อคำนวณฟังก์ชันการกระจายจุด แต่ก็สามารถทำได้ภายใน ImageJ ฉันจะเริ่มต้นด้วยการอธิบายว่าฉันจะ deconvolution ด้วย ImageJ อย่างไรเมื่อฉันมีฟังก์ชั่นกระจายคะแนน หากต้องการ deconvolution คุณต้องติดตั้งปลั๊กอินสำหรับ ImageJ ฉันใช้ปลั๊กอินนี้สำหรับกรณีนี้ แต่ยังมีปลั๊กอินอื่นที่สามารถใช้งานได้เช่นปลั๊กอินDeconvolutionLab
ก่อนอื่นคุณต้องทำการแปลงเป็น linear colourspace ฉันใช้ ImageMagick เพื่อแปลงภาพ unsharp (input.jpg) ไปเป็น colorpace แบบเส้นตรงโดยใช้คำสั่ง:
convert input.jpg -colorspace RGB output.tif
จากนั้นด้วย ImageJ คุณจะเปิดไฟล์ output.tif จากนั้นจากตัวเลือกเมนูคุณเลือก "ภาพ" จากนั้น "สี" และ "ช่องทางคาย" จากนั้นเลือกเมนู "ปลั๊กอิน" จากนั้นเลือก "deconvolution วนซ้ำแบบวนซ้ำ" จากนั้นเลือก deconvolution interative 2d "
จากนั้นคุณจะได้หน้าต่าง deconvolution จากนั้นคุณเลือกรูปภาพและ "PSF" หมายถึงจุดฟุ้งกระจายที่นั่นคุณเลือกไฟล์ภาพที่มีฟังก์ชั่นการกระจายจุด สำหรับวิธีนี้ฉันเลือก "WPL" ซึ่งเป็นพื้นฐานของตัวกรอง Wiener ซึ่งมักจะทำงานได้ดีพอสำหรับภาพที่มีสัญญาณรบกวนต่ำ ในตัวเลือกสำหรับ WPL ให้ตรวจสอบ "normalize PSF" และสำหรับตัวกรองสัญญาณความถี่ต่ำเปลี่ยนค่าเป็น 0.2 โดยค่าเริ่มต้นคือ 1 แต่ค่าที่ต่ำกว่าจะดีกว่าสำหรับภาพที่มีสัญญาณรบกวนต่ำ (ถ้าคุณเลือกให้มีขนาดใหญ่ขึ้น จะได้ภาพที่คมชัดน้อยลง) ตัวเลือกอื่น ๆ ขอบเขตสามารถเลือกที่จะสะท้อนการปรับขนาดสามารถตั้งค่าเป็น "กำลังต่อไปของ 2" เอาท์พุทสามารถตั้งค่าเป็น 32 บิตความแม่นยำสามารถตั้งค่าเป็นสองเท่า ฉันเลือกจำนวนซ้ำสูงสุดเป็น 15
จากนั้นคุณรันโปรแกรมโดยคลิกที่ "deconvolve" จากนั้นคุณจะได้ไฟล์ภาพขนาด 32 บิตเป็นเอาต์พุต โดยทั่วไปค่าพิกเซลจะค่อนข้างคล้ายกับที่อยู่ในภาพต้นฉบับ แต่คุณสามารถมีพิกเซลบางส่วนที่เกินจำนวนสูงสุดสำหรับรูปแบบภาพต้นฉบับ ดังนั้นในกรณีนี้เราเริ่มด้วยภาพ 8 บิต แต่ในภาพ deconvolved คุณสามารถมีค่าสีเทาที่เกิน 255 ซึ่งทำให้ภาพทั้งหมดมืดเกินไป สิ่งนี้จะต้องได้รับการแก้ไขโดยการตัดพิกเซลเหล่านี้เป็น 255 ซึ่งคุณสามารถทำได้โดยเลือกในเมนู "กระบวนการ" จากนั้น "คณิตศาสตร์" และ "สูงสุด" ค่าสูงสุดจะถูกใช้เพื่อตัดค่าสีเทาที่เกินค่านั้น โปรดทราบว่าสิ่งนี้จะทำกับภาพที่คุณคลิกครั้งสุดท้าย คุณสามารถดูว่าไฟล์ใดเป็น "ไฟล์ปัจจุบัน" โดยเลือก "
จากนั้นเมื่อคุณแยกองค์ประกอบสี 3 ส่วนออกแล้วคุณสามารถรวมองค์ประกอบเหล่านั้นได้โดยเลือกในเมนู "รูปภาพ" จากนั้น "สี" จากนั้น "รวมช่อง" จากนั้นคุณจะได้ภาพคอมโพสิตที่คุณสามารถแปลงเป็น 8 บิต RGB ได้โดยใช้คำสั่ง "Stack to RGB" ที่คุณพบที่นั่น
จากนั้นคุณบันทึกภาพนั้นเรียกมันว่า im.tif ในที่สุดคุณต้องแปลงเป็น sRGB คุณสามารถทำได้ด้วย ImageMagick โดยใช้คำสั่ง:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
คำถามที่เหลือคือวิธีการรับฟังก์ชั่นการกระจายจุด ในทางปฏิบัติหากคุณถ่ายภาพเหมือนที่อยู่ภายใต้การสนทนาที่นี่คุณสามารถถ่ายภาพจุดกำเนิดได้เช่นดาวที่ F / 29 และใช้มันเป็นจุดกระจายของฟังก์ชั่น หรือคุณสามารถดูขอบเขตความคมชัดสูงและแยกฟังก์ชันการกระจายจุดจากวิธีที่ค่าสีเทาเปลี่ยนจากค่าหนึ่งไปเป็นค่าอื่นข้ามขอบเขต แต่คุณพยายามทำให้ภาพคมชัดที่สุดเท่าที่จะทำได้
ในกรณีนี้มีวัตถุประสงค์เพื่อรวบรวมฟังก์ชั่นการกระจายจุดสำหรับช่องสีตามสิ่งที่คุณคาดหวังว่าจะเป็นสำหรับ F / 29, deconvolve ภาพกับสิ่งนั้นและดูว่าผลลัพธ์ดูดีขึ้นหรือไม่ ฉันใช้ Mathematica ทำการคำนวณบางอย่างและโปรแกรมพีชคณิตขั้นสูงเช่นนั้นมันง่ายมากที่จะทำกิจวัตรทุกประเภทรวมถึงค่าเฉลี่ยในช่วงความยาวคลื่นและรวมพื้นที่พิกเซลเพื่อทำให้ PSF สมจริงยิ่งขึ้น
แต่ ImageJ ยังอนุญาตให้คุณสร้างรูปภาพใหม่ที่คุณสามารถใช้เป็นฟังก์ชันกระจายจุด หากคุณคลิกที่ "ไฟล์" และจากนั้น "ใหม่" คุณสามารถสร้างภาพขนาด 32 บิตกล่าวคือ 64 คูณ 64 เต็มไปด้วยสีดำ จากนั้นคุณสามารถโปรแกรมสูตรสำหรับค่าสีเทาโดยเลือก "กระบวนการ" จากนั้นเลือก "คณิตศาสตร์" และ "มาโคร" ในการรับฟังก์ชั่นการกระจายจุดสำหรับกรณีนี้ซึ่งเกี่ยวข้องกับฟังก์ชัน Bessel ในที่นี้คุณสามารถใช้ความจริงที่ว่ามันถูกอธิบายอย่างดีโดยคำศัพท์สองสามคำแรกของการขยายอนุกรม หน้า MathWorld ที่ฉันเชื่อมโยงเพื่อให้การขยายชุดนี้แก่คุณดังนั้น J 1 (x) 2 / x 2 ด้วย x = π rs / ( λF ) สามารถแทนที่ด้วยฟังก์ชันของฟอร์ม A + B s 2 + C s 4. การประมาณนี้จะไม่ถูกต้องหาก s มีขนาดใหญ่เกินไป ตอนนี้เรารู้ว่า PSF มีแนวโน้มที่จะเป็นศูนย์เช่นที่ระยะทางประมาณ 5 หรือ 6 พิกเซลมันสามารถตั้งค่าเป็นศูนย์ สมมติว่าพหุนามยังมีขนาดเล็กที่ค่าเหล่านี้คุณสามารถเขียนแมโครเป็น:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
จากนั้นคุณสร้างภาพ 3 ภาพสำหรับแลมบ์ดา = 650 นาโนเมตร, 500 นาโนเมตรและ 400 นาโนเมตรหรือค่าอื่น ๆ ที่คุณคิดว่าเหมาะสมที่จะนำเสนอการเลี้ยวเบนในช่องสี 3 ช่อง จากนั้นคุณสามารถทำการหาค่าเฉลี่ยของความยาวคลื่นที่แตกต่างกันสองสามตัวโดยสร้างรูปภาพสำหรับแลมบ์ดาที่แตกต่างกันจากนั้นเลือก "กระบวนการ" จากนั้นเลือก "เครื่องคิดเลขภาพ" แล้วเลือก "เพิ่ม" จากนั้นคุณสามารถเพิ่มรูปภาพอื่นลงในผลลัพธ์นี้และเมื่อคุณเพิ่มเสร็จแล้วคุณสามารถหารเพื่อรับค่าเฉลี่ยโดยเลือก "กระบวนการ" จากนั้นเลือก "คณิตศาสตร์" และ "หาร"