Diğer cevaplarda da belirtildiği gibi, kırınım netliğin olmamasına neden olmuştur. Bunu test etmek için, F / 29'a karşılık gelen nokta yayma işlevini kullanarak dekonvolüsyon kullanarak görüntü netleştirilmeye çalışılabilir. Kırınım için, biz (genel bir normalizasyon kadar)
P (s) = {J 1 [ / rs / ( λF )] / [ / rs / ( λF )]} 2
J burada 1 olduğu için 1 birinci türden Bessel fonksiyonu ,
s resmin piksel olarak ölçülen mesafe, bir
r , - (bitki sensörleri 6) m, tipik olarak (^ 10 * yaklaşık 4.2) bir piksel büyüklüğünde
λ , ışığın dalga boyudur ve
F , F sayısı, bu durumda 29'dur.
Bu, tek renkli ışık için geçerlidir, renk kanalları için nokta yayılma fonksiyonunu yaklaşık olarak belirlemek için, bazı uygun dalga boyları aralığında ortalayabiliriz. Ayrıca, P (ler) i s ile belirtilen piksel alanı üzerine entegre etmelidir.
3 renk kanalı için 3 nokta yayma işlevini bu şekilde derlersek, görüntüyü doğrusal renk uzayına dönüştürerek ve bir dekonvolüsyon algoritması uygulayarak ve sonra sRGB'ye dönüştürerek netleştirebiliriz. Aşağıdaki sonucu aldım:
Bu nedenle, yüz, yalnızca F sayısı ve piksel boyutuyla ilgili varsayım hakkındaki veriler kullanılarak önemli ölçüde keskinleştirildi. Banding artefaktları görüntünün karanlık kısmında görülebilir, bunun nedeni tekrar sRGB'ye dönüştükten sonra posterleşmesidir.
İstendiği gibi, kullanılan programlar hakkında daha fazla ayrıntı ekleyeceğim. ImageJ ve ImageMagick'i kullandım , ayrıca nokta yayma fonksiyonunu hesaplamak için Mathematica'yı da kullandım, ancak ImageJ içinde de yapılabilir. Zaten point spread fonksiyonuna sahipken ImageJ ile dekonvolüsyonu nasıl yaptığımı açıklayarak başlayacağım. Dekonvolüsyon yapmak için ImageJ için bir eklenti yüklemeniz gerekir, bu eklentiyi bu dava için kullandım , fakat aynı zamanda DeconvolutionLab eklentisi gibi başka eklentiler de mevcut .
Öncelikle, doğrusal renk uzayına dönüştürmeniz gerekiyor, komutunu kullanarak keskin olmayan görüntüyü (input.jpg) doğrusal renk alanına dönüştürmek için ImageMagick kullandım:
convert input.jpg -colorspace RGB output.tif
Sonra ImageJ ile, output.tif dosyasını açın. Ardından, menü seçeneklerinden "image", sonra "color" ve ardından "Spit Channels" seçeneğini seçin. Sonra menüden "eklentileri" ve ardından "paralel yinelemeli dekonvolüsyonu" ve ardından 2d etkileşimli dekonvolüsyonu "seçin.
Ardından dekonvolüsyon penceresini görürsünüz, ardından görüntüyü seçersiniz ve "PSF", nokta yayılma işlevini ifade eder, burada nokta yayma işlevini içeren görüntü dosyasını seçersiniz. Yöntem için, düşük gürültülü görüntüler için genellikle oldukça iyi çalışan Wiener filtresine dayanan "WPL" yi seçiyorum. WPL seçeneklerinde "PSF'yi normalleştir" seçeneğini işaretleyin ve düşük geçiş filtresi için değeri 0,2 olarak değiştirin, varsayılan olarak 1'dir, ancak düşük gürültülü görüntüler için düşük bir değer daha iyidir (eğer daha büyük seçerseniz, Daha az keskin bir görüntü elde edersiniz). Diğer seçenekler, Sınır refleks olarak seçilebilir, yeniden boyutlandırma "2 sonraki güç" olarak ayarlanabilir, çıktı 32 bit olarak ayarlanabilir, hassasiyet iki katına ayarlanabilir. 15 olan maksimum yineleme sayısını seçtim.
Daha sonra "dekonvolve" ye tıklayarak programı çalıştırın. Daha sonra çıktı olarak 32 bit görüntü dosyası elde edersiniz. Genellikle, piksel değerleri orijinal resimdeki değerlere oldukça benzerdir, ancak orijinal resim formatı için maksimum değeri aşan bazı piksellere sahip olabilirsiniz. Böylece, bu durumda 8 bit görüntüyle başladık, ancak çözülmüş görüntüde 255'i aşan gri değerlere sahip olabilirsiniz, bu da tüm görüntünün çok karanlık olmasına neden olur. Bu, bu "piksel" menüsünde "sonra" ve sonra "Matematik" ve sonra "Maks" seçerek yapabileceğiniz 255'e kırpılarak düzeltilmelidir. Maksimum değer, bu değeri aşan gri değerleri kesmek için kullanılacaktır. Bunun, en son tıkladığınız resme yapılacağını unutmayın. Hangi dosyanın "geçerli dosya" olduğunu da "seçerek" görebilirsiniz.
Ardından 3 renk bileşenini çözdükten sonra, bunları "görüntü", sonra "renk" ve sonra "Kanalları Birleştir" menüsünden seçerek birleştirebilirsiniz. Daha sonra orada bulduğunuz "RGB to Stack" komutunu kullanarak 8 bit RGB'ye dönüştürebileceğiniz bir kompozit görüntü elde edersiniz.
Daha sonra o resmi kaydedin, diyelim im.tif. Son olarak, bunu sRGB'ye dönüştürmelisiniz, bunu aşağıdaki komutu kullanarak ImageMagick ile yapabilirsiniz:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
Kalan soru daha sonra nokta yayma fonksiyonunun nasıl elde edileceğidir. Uygulamada, burada tartışılan resim gibi bir fotoğraf çekmiş olsaydınız, bir nokta kaynağının, örneğin F / 29'daki bir yıldızın fotoğrafını çekebilir ve bunu nokta yayma işleviniz olarak kullanabilirsiniz. Alternatif olarak, yüksek karşıtlık sınırlarına bakabilir ve nokta yayma işlevini, gri değerlerin bir değerden diğerine sınır boyunca değiştiği şekilde çıkarabilirsiniz. Fakat görüntüyü elinizden geldiğince netleştirmeye çalışıyorsunuz.
Bu durumda amaç, F / 29 için olmasını beklediğinize dayanarak renk kanalı için nokta yayma fonksiyonlarını derlemekti, görüntüyü bununla kirletin ve sonucun yeterince iyi görünüp görünmediğine bakın. Bazı hesaplamaları yapmak için Mathematica'yı kullandım ve bu kadar gelişmiş bir bilgisayar cebir programında, dalgaboyu aralığında ortalama alma ve PSF'yi daha gerçekçi hale getirmek için piksel alanlarına entegrasyon dahil olmak üzere her türlü manipülasyonu yapmak oldukça kolay.
Ancak ImageJ, nokta yayma işlevi olarak kullanabileceğiniz yeni bir görüntü oluşturmanıza da olanak sağlar. "Dosya" yı ve ardından "Yeni" yi tıklatırsanız, 32 x 64 boyutunda bir görüntü oluşturabilirsiniz, örneğin 64 x 64 siyahla dolu. Daha sonra "işlem" i, sonra "Matematik" i ve sonra "Makro" yu seçerek gri değerler için bir formül programlayabilirsiniz. Burada Bessel işlevini içeren bu durum için nokta yayılma işlevini elde etmek için, serinin genişlemesinin ilk birkaç terimi tarafından iyi tanımlandığı gerçeğini kullanabilirsiniz. Bağlandığım MathWorld sayfası size bu seri açılımlarını veriyor, yani J 1 (x) 2 / x 2 , x = gives ile rs / ( λF ) işleviyle değiştirilebilir A + B s 2 + C s 4. S çok büyükse bu yaklaşım geçersiz hale gelir. Şimdi, PSF'nin sıfıra yöneldiğini biliyoruz, örneğin yaklaşık 5 veya 6 piksellik bir mesafede sıfıra ayarlanabileceğini. Polinomun bu değerlerde hala küçük olduğunu varsayarak, Makroyu şöyle yazabilirsiniz:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
Daha sonra lambda = 650 nm, 500 nm ve 400 nm için 3 görüntü veya 3 renk kanalında kırınımı temsil etmek için uygun olduğunu düşündüğünüz diğer değerler ne olursa olsun oluşturursunuz. Daha sonra farklı lambdalar için resimler oluşturarak ve ardından "işlem" i, ardından "görüntü hesaplayıcısını" seçerek birkaç farklı dalga boyunun ortalamasını yapabilirsiniz. Burada "ekle" seçeneğini seçin. Daha sonra bu sonuca başka bir resim ekleyebilir ve ekleme işlemini tamamladığınızda, "işlem" i, ardından "matematik" i ve ardından "böl" i seçerek ortalamayı elde etmek için bölebilirsiniz.