다른 답변에서 언급했듯이 회절로 인해 선명도가 떨어졌습니다. 이것을 테스트하기 위해 F / 29에 해당하는 포인트 스프레드 기능을 사용하여 디콘 볼 루션을 사용하여 이미지를 선명하게 할 수 있습니다. 회절의 경우, 우리는 (최대의 정규화)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
여기서 J 1 은 순서 1의 첫 번째 종류의 베셀 함수이고 ,
s 는 픽셀 단위로 측정 된 이미지의 거리이며,
r 은 한 픽셀의 크기입니다 (일반적으로 크롭 센서의 경우 약 4.2 * 10 ^ (-6) 미터).
λ 는 빛의 파장이고,
F 는 F- 번호입니다 (이 경우 29).
이것은 단색광의 경우에 해당하며, 일부 적절한 파장 범위에서 평균 할 수있는 색상 채널에 대한 점 확산 기능을 근사화합니다. 또한 s로 지정된 픽셀 영역에 P를 통합해야합니다.
이 방법으로 3 색 채널에 3 점 확산 함수를 컴파일하면 이미지를 선형 색 공간으로 변환하고 디컨 볼 루션 알고리즘을 적용한 다음 다시 sRGB로 변환하여 이미지를 선명하게 할 수 있습니다. 나는 다음과 같은 결과를 얻었다 :
따라서 F- 숫자에 대한 데이터와 픽셀 크기에 대한 가정 만 사용하여면이 크게 선명 해졌습니다. 이미지의 어두운 부분에 밴딩 아티팩트가 표시됩니다. 이는 sRGB로 다시 변환 한 후 포스터 화 때문입니다.
요청에 따라 사용 된 프로그램에 대한 자세한 내용을 추가하겠습니다. 내가 사용 ImageJ에 와 ImageMagick이가 , 나 또한 점 분포 함수를 계산하기 위해 티카를 사용하지만, 그것은 또한 ImageJ에 내에서 수행 할 수 있습니다. 이미 포인트 스프레드 기능이있을 때 ImageJ를 사용하여 디컨 볼 루션을 수행하는 방법에 대해 설명하겠습니다. 디컨 볼 루션을 수행하려면 ImageJ 용 플러그인을 설치해야합니다. 이 경우이 플러그인 을 사용 했지만 DeconvolutionLab 플러그인과 같은 다른 플러그인도 있습니다.
먼저 선형 색상 공간으로 변환해야합니다. ImageMagick을 사용하여 명령을 사용하여 선명하지 않은 이미지 (input.jpg)를 선형 색상 공간으로 변환했습니다.
convert input.jpg -colorspace RGB output.tif
그런 다음 ImageJ를 사용하여 output.tif 파일을여십시오. 그런 다음 메뉴 옵션에서 "image", "color"및 "Spit Channels"를 차례로 선택합니다. 그런 다음 메뉴에서 "플러그인"을 선택한 다음 "병렬 반복 디컨 볼 루션"을 선택한 다음 2d 인터 액티브 디컨 볼 루션을 선택하십시오.
그런 다음 디컨 볼 루션 창을 가져온 다음 이미지를 선택하고 "PSF"는 포인트 스프레드 기능을 의미하며 포인트 스프레드 기능이 포함 된 이미지 파일을 선택합니다. 이 방법에서는 Wiener 필터를 기반으로하는 "WPL"을 선택합니다.이 필터는 일반적으로 저잡음 이미지에 적합합니다. WPL의 옵션에서 "PSF 정규화"를 확인하고 저역 통과 필터의 경우 값을 0.2로 변경하십시오. 기본적으로 1이지만 낮은 노이즈 이미지의 경우 값이 낮을수록 좋습니다 (더 크게 선택하면 덜 선명한 이미지를 얻습니다). 다른 옵션, 경계는 반사적으로 선택 될 수 있으며, 크기 조정은 "next power of 2"로 설정 될 수 있고, 출력은 32 비트로 설정 될 수 있으며, 정밀도는 배로 설정 될 수 있습니다. 최대 반복 횟수를 15로 선택했습니다.
그런 다음 "deconvolve"를 클릭하여 프로그램을 실행하십시오. 그런 다음 32 비트 이미지 파일을 출력으로 가져옵니다. 일반적으로 픽셀 값은 원본 그림의 값과 매우 유사하지만 원본 이미지 형식의 최대 값을 초과하는 일부 픽셀을 가질 수 있습니다. 따라서이 경우 8 비트 이미지로 시작했지만 축소 된 이미지에서 255를 초과하는 회색 값을 가질 수 있으므로 전체 이미지가 너무 어두워집니다. 이 픽셀을 255로 클리핑하여 수정해야합니다. "process"메뉴에서 "Math"와 "Max"를 차례로 선택하면됩니다. 그런 다음 최대 값을 사용하여 해당 값을 초과하는 회색 값을 클리핑합니다. 마지막으로 클릭 한 이미지에 적용됩니다. "를 선택하여 어떤 파일이"현재 파일 "인지 확인할 수도 있습니다.
그런 다음 3 가지 색상 구성 요소를 분리 한 후 메뉴에서 "이미지", "색상"및 "채널 병합"을 선택하여 이들을 결합 할 수 있습니다. 그런 다음 "Stack to RGB"명령을 사용하여 8 비트 RGB로 변환 할 수있는 합성 이미지를 얻습니다.
그런 다음 이미지를 저장 한 후 im.tif라고하겠습니다. 마지막으로 이것을 sRGB로 변환해야합니다. 다음 명령을 사용하여 ImageMagick으로이를 수행 할 수 있습니다.
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
나머지 질문은 포인트 스프레드 기능을 얻는 방법입니다. 실제로 여기서 논의중인 것과 같은 사진을 찍었다면 간단히 F / 29의 별과 같은 점 소스 사진을 찍어이를 포인트 분산 기능으로 사용할 수 있습니다. 또는 고 대비 경계를보고 경계를 가로 질러 회색 값이 한 값에서 다른 값으로 변경되는 방식에서 포인트 스프레드 기능을 추출 할 수 있습니다. 그러나 가능한 한 이미지를 선명하게하려고합니다.
이 경우 목표는 F / 29에 대해 예상 한 것을 기반으로 색상 채널에 대한 포인트 스프레드 함수를 컴파일하고 이미지를 디볼 로브하고 결과가 충분히 좋아 보이는지 확인하는 것입니다. 필자는 Mathematica를 사용하여 계산을 수행했으며 이러한 고급 컴퓨터 대수 프로그램은 파장 간격에 대한 평균화 및 픽셀 영역에 대한 통합을 포함하여 PSF를보다 사실적으로 만드는 것을 포함하여 모든 종류의 조작을 수행하는 것이 매우 쉽습니다.
그러나 ImageJ를 사용하면 포인트 스프레드 기능으로 사용할 수있는 새 이미지를 만들 수도 있습니다. "파일"을 클릭 한 다음 "새로 만들기"를 클릭하면 검은 색으로 채워진 64 x 64 크기의 32 비트 이미지를 만들 수 있습니다. 그런 다음 "process", "Math"및 "Macro"를 선택하여 회색 값에 대한 수식을 프로그래밍 할 수 있습니다. 여기서 Bessel 함수를 포함하는이 경우 포인트 스프레드 함수를 얻으려면 시리즈 확장의 처음 몇 가지 용어로 잘 설명되어 있습니다. 내가 연결 한 MathWorld 페이지는이 시리즈 확장을 제공하므로, x = π rs / ( λF ) 인 J 1 (x) 2 / x 2 는 A + B s 2 + C s 4 형식의 함수로 대체 될 수 있습니다. s가 너무 크면이 근사값이 유효하지 않게됩니다. 이제 우리는 PSF가 0 인 경향이 있다는 것을 알고 있습니다. 예를 들어 약 5 또는 6 픽셀의 거리에서 0으로 설정할 수 있습니다. 다항식이이 값에서 여전히 작다고 가정하면 매크로를 다음과 같이 작성할 수 있습니다.
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
그런 다음 람다 = 650nm, 500nm 및 400nm 또는 3 개의 색상 채널에서 회절을 나타내는 데 적절하다고 생각하는 다른 값에 대해 3 개의 이미지를 만듭니다. 그런 다음 다른 람다에 대한 그림을 만든 다음 "프로세스", "이미지 계산기"를 차례로 선택하고 "추가"를 선택하여 몇 가지 다른 파장의 평균을 구할 수 있습니다. 그런 다음이 결과에 다른 이미지를 추가 할 수 있으며 추가가 완료되면 "process", "math"및 "divide"를 차례로 선택하여 평균을 구할 수 있습니다.