과학/천문학

[Python] 허블 아카이브를 이용한 '폭발적 항성 생성 은하' 이미지 표출하기 (Expressing images of 'Starburst galaxy' using the Hubble Archive) - 2 (은하 이미지 표출하기)

AstroPenguin 2020. 12. 27. 17:00
728x90

himbopsa.tistory.com/26

 

[Python] 허블 아카이브를 이용한 '폭발적 항성 생성 은하' 이미지 표출하기 (Expressing images of 'Starbur

안녕하십니까, 새로운 글로 찾아뵙게 된 AstroPenguin입니다~~(격한환영) 여태까지의 게시물들에서는 공식이나 관계를 활용한 그림 또는 그래프를 표출하였다면 이번에는 직접적으로 천체의 이미

himbopsa.tistory.com

안녕하십니까! 새로운 글로 돌아오게 되었습니다.

저번 글에서는 허블 아카이브를 이용하여 은하의 이미지 데이터를 다운받는 과정을 배워보았다면,

이번 시간에는 다운받은 데이터를 파이썬을 통해 이미지의 형태로 표출시키는 과정에 대해 알아보겠습니다.

데이터 다운로드에 관한 자세한 글은 위에 링크 걸어놓았으니 참고하시면 됩니다^^

 

그럼 지금부터 시작하겠습니다!!

 

우선 FITS형식의 데이터를 다운받았다면 fits.open 구문에 파일이 들어가있는 경로를 지정해 주어 사용할 이미지 데이터를 불러옵니다. 만약 파이썬 코딩하는 파일과 데이터 파일이 같은 폴더에 존재한다면 경로 지정 없이 파일 이름을 기입하기만 하면 간단하게 불러올 수 있으니 두 파일은 같은 폴더에 저장해두시는걸 추천드립니다.

# 데이터를 불러와 테이터 형식 확인하기
import astropy.io.fits as fits
import numpy as np
import matplotlib.pyplot as plt

image_file = "C:/Users/000/OneDrive/바탕 화면/폴더명1/폴더명2/hst_10188_10_acs_wfc_f435w_sci.fits"
galaxy_data = fits.open(image_file)
print(galaxy_data.info())

파일 경로에 대한 것은 데이터가 담긴 폴더에 들어가 우클릭을 한 후 속성에 들어가시면 볼 수 있습니다. 이를 복사한 후 역슬래시를 슬래시( / )로 모두 바꿔주시고 맨 뒤에 파일명을 기입해주시면 됩니다.

 

자세한 데이터를 불러오는 방식은 차후 다른 포스팅을 통해 알려드리도록 하겠습니다.

데이터를 불러왔으면 000.info()를 통해 불러온 이미지 데이터에 관한 정보를 확인합니다. 이 때 저는 불러온 데이터를 galaxy_data로 지정하였습니다.

불러온 은하 이미지 데이터의 형식

데이터를 불러오는 과정이 끝났으면 FITS 데이터의 header와 data를 각각 지정해줍니다.

그리고 이들 중 데이터에 관한 정보와 픽셀 당 각도를 알려주는 부분을 불러와 출력을 해봅니다.

저희는 이미지 데이터를 사용할 것이기 때문에 galaxy_data[1]을 통해 galaxy_data의 두 번째 데이터인 ImageHDU를 지정해줍니다.

 

header와 data에 관하여 간단하게 설명드리자면

header에는 데이터 형식, 데이터 수집을 위한 위성 및 관측기기, 해당 천체의 적경과 적위, 관측일(줄리안데이) 등

데이터 관측에 대한 정보가 담겨있고,

data에는 실제 관측 데이터가 담겨있습니다.

image = galaxy_data[1].data
header = galaxy_data[1].header

print("info", header["PHOTMODE"])
# ACS WFC1 F814W MJD#52519.9608
# 촬영기기   필터    줄리안데이
print("deg/pixel", header["CD2_2"])
# 1픽셀당 각도

출력된 관측에 대한 정보

이제 데이터에 관한 정보를 모두 확인하였으니, 실제로 폭발적 항성 생성 은하의 대표적인 예시인 더듬이 은하의 이미지를 실제로 나타내보도록 하겠습니다.

우선, 지정한 image의 데이터를 matplotlib.pyplot에 적용하기 위해 array형식으로 바꿔줍니다.

그 후 np.percentile(image,숫자) 구문을 사용합니다.

첫 번째 파라메타에 image를 기입함으로 데이터의 형식을 이미지 형식을 사용할 것을 명시해주고,

두 번째 파라메타에 특정 숫자를 기입하여 이미지 데이터 밝기의 최대/최솟값을 지정해줍니다.

 

마지막으로 plt.imshow를 통해 은하 이미지 데이터 밝기의 최대/최솟값이 반영된 데이터를 나타냅니다.

NGC4038_image = np.array(image)

max_value = np.percentile(image, 99)
min_value = np.percentile(image, 60)

plt.figure(figsize=(8,8))
plt.imshow(image, cmap='gray', origin='lower', vmax = max_value, vmin = min_value)
# cmap='gray' : 흑백으로 연출
# origin='lower' : 좌표축의 좌측 아래를 (0,0)으로 설정
plt.show()

위와 같은 과정들을 모두 따라오셨으면 다음과 같은 결과물이 나옵니다.

출력된 더듬이은하의 이미지

이제는 출력된 더듬이 은하의 이미지를 실제 사진과 비교해볼 시간입니다! (두근두근)

꼭 더듬이 은하가 아니라 다른 은하 및 천체여도 구글이나 나사 사이트에 서칭을 통해 plot한 이미지와 원본 이미지를 대조해보시면 됩니다.

결과야 당연하지만, plot한 이미지와 실제 사진이 거의 일치한 것을 알 수 있습니다.

실제 사진에서의 색은 각 지점의 밝기에 따라 파장을 추측하고, 그 파장에 따른 색을 가상으로 넣은 것입니다.

만약 흑백으로 보시는게 밋밋하고 지겨우시다면 plt.imshow 구문의 두번째 파라메터인 cmap = 'gray'를 다른 색깔로 바꾸어 주시면 됩니다. 색깔에 대한 파라메터는 구글에 cmap color로 검색을 하셔서 사용을 하셔도 되고, 제가 첨부한 이미지를 보시고 사용하셔도 됩니다.

저는 plt.imshow 구문의 두번째 파라메터인 cmap = 'gray'를 cmap = 'afmhot'와 cmap = 'cool'로 바꾸어 보았습니다.

출력된 이미지는 다음과 같습니다.

cmap = 'afmhot'로 바꾼 이미지
cmap = 'cool'로 바꾼 이미지

자! 이번 시간 동안 다운로드 받은 은하의 이미지 데이터를 파이썬을 통해 표출하는 시간을 가져보았습니다.

다음 시간에는 또 다른 주제로 찾아뵙겠습니다.

그럼 모두들 안녕히계세요~~~

728x90