FWHM의 추출 과정
안녕하세요 엄성민입니다.
MATLAB을 이용하여 촬영된 별 이미지로 부터 FWHM을 찾아내는 알고리즘을 생각해 봤습니다.
MaxIm DL과 같은 영상 처리 툴이나 가이드 소프트웨어에서 별상의 정보를 추출 할 때, 유사한 알고리즘이 이용 되리라 생각됩니다.
읽어 보시면 FWHM의 개념과 좌표를 찾는 원리가 이해가 되실 것 같네요.
촬영된 사진 또는 가이드 소프트웨어의 입력 프레임은 다음과 같은 이미지 처리 과정을 거쳐 평균 값, 표준 편차, 중심 좌표, FWHM 등을 산출 합니다.
1. 원본 이미지
원본 이미지는 컬러의 경우 일단 흑백으로 변환한 후 처리 됩니다. 아래는 위 원본 이미지의 모든 픽셀에 대한 밝기 값을 표시한 것입니다.
자세히 보시면 20,000 만큼 위로 떠 있는 것을 볼 수 있는데, 이는 배경 옵셋 값으로 촬영 시 광해등에 의해 발생한다고 생각됩니다. 또한 별의 중심 부분은 평탄면을 이루고 있는데 이는 CCD 또는 CMOS가 포화된 영역입니다. (포화라 함은 센서가 인지할 수 있는 가장 밝은 색으로 감응하였다고 생각하시면 됩니다. 당연히 흰색이 됩니다)
2. 배경 옵셋 제거
영상 처리의 첫번 째 단계로 모든 픽셀에 대해 배경 옵셋을 빼 줍니다. (이는 이미지 처리시 Level 조정과 같은 개념입니다.)
그림에서 보시면 전체적으로 20000이 내려가 배경 부분이 0으로 이동된 것을 볼 수 있습니다.
3. 포화 영역의 제거
별상 중앙의 포화 영역은 4에서 설명할 가우시안 Fitting 단계에서 원치 않는 에러를 유발합니다. 따라서 이 부분이 제거됩니다.
4. 가우시안 Fitting
이 단계가 핵심 부분이 됩니다. 우선 모르시는 분들을 위해 curve fitting (회귀 분석)에 대해 간략하게 설명합니다.
"중력 가속도가 얼마인가요?"라고 묻는다면 누구나 9.8m/sec^2 이라고 대답합니다.
그럼 중력 가속도 9.8은 어떻게 실험적으로 구해질까요?
이를 위하여 자유 낙하하는 물체의 속도를 구간 별로 실측하여 데이터를 얻었다고 합시다.
1초후 9.8m/sec, 2초후 9.8*2m/sec, 3초후 9.8*3m/sec ...으로 정확히 측정이 되지 않습니다.
아마도 오차가 포함되어 있을 겁니다.
중력 가속도가 일정하다는 가정을 세우면 시간 t에 대하여 속도가 선형적으로 증가할 것이라는 결론이 나오고 이를 수학적으로 모델링 합니다
v(t) = a*t (여기서 a는 중력 가속도, v(t)는 t초 후 속도)
이 모델에 위에 실측한 데이터 들을 집어넣고 오차가 최소가 되는 a 값을 구해 냅니다.. 구해보았더니 a가 9.8이였다 이거지요..
이것이 커브 피팅입니다.
이제 영상 처리로 돌아갑시다.
촬영된 별상의 이미지의 밝기 분포는 2D Gaussain 함수를 따른다고 가정합니다
밝기(x, y) = A*exp(-((x-x0)^2+(y-y0)^2)/(2*sigma^2))
우리는 촬영된 이미지로 부터 (x, y) 좌표 픽셀의 밝기를 알고 있습니다.
이것들을 모두 때려 넣어 위의 수식에서 A, x0, y0, sigma 값을 찾아 냅니다.
이것은 엄청난 반복 계산의 연속이므로 컴퓨터가 해줍니다/.
다음은 가우시안 Fitting이 진행된 이미지이며 파란 점은 실제 이미지에서의 픽셀 밝기 이고 부드러운 곡면은
피팅된 함수로 데이터를 계산하여 그린 것입니다.
찾아진 A, x0, y0, sigma 값을 이용하여 가정된 모델의 형상으로 별의 상을 도식화 하면 다음과 같습니다. 이것에 대한 실제 이미지는 맨 처음 보여드린 별사진의 마지막 것과 같습니다.
5. 데이터의 추출
가우시안 피팅된 이미지로 부터 다음 값들을 추출합니다.
x0, y0는 별상의 중심 좌표가 되며, 높이 1/2 지점에서의 x축 또는 y축 방향의 곡면 안쪽 거리가 FWHM이 됩니다.
또한 이것은 가우시안 분포 (정규 분포)이므로 평균, 편차, 표준 편차 값등이 모두 산출 됩니다.
이해가 잘 되셨길 바랍니다.
감사합니다 ^_^
저자 : 엄성민 (http://itew.tistory.com)
라이센스 : Non-commercial, Non-derivative Creative Commons License