
안녕하세요 오랜만이에요! 😊
오늘은 FLIR A 시리즈 카메라와 Spinnaker SDK를 활용해
온도 데이터를 컬러 이미지로 변환하는 재미있는 실습을 소개해드릴게요.
Radiometric 모드에서 가져온 온도값에 Iron, Rainbow 팔레트를 적용해서 컬러맵 이미지를 만들어보는 과정인데요
직접 LUT(Look Up Table)를 적용하면서 시각화하는 방법까지 하나하나 따라 해보실 수 있답니다!
열화상 데이터를 활용한 이미지 처리에 관심 있으셨다면 이번 포스팅이 큰 도움이 되실 거예요.
그럼 함께 시작해볼까요?
* 강좌 목차
[Python/FLIR] Spinnaker SDK, PySpin 설치 가이드
· FLIR Spinnaker SDK 설치 및 실행(Windows, Ubuntu)
[Python/FLIR] PySpin Node 사용법
· 노드의 개념, 타입, 사용법 설명, spinview에서 노드 정보 확인
[Python/FLIR] PySpin 카메라 스트리밍 기본
· Pyspin 사용하여 카메라 Connect 및 Grab 해보기
[Python/FLIR] PySpin카메라에서 온도값 가져오기(1)
· Nodemap으로 pixelformat 변경, IRFormat 변경하기
[Python/FLIR] PySpin 카메라에서 온도값 가져오기(2)
· TemperatureLinear(10K, 100K)으로 온도값 가져오기
[Python/FLIR] PySpin 카메라에서 온도값 가져오기(3)
· Radiometric으로 온도값 가져오기
[Python/FLIR] PySpin 온도 데이터 팔레트 적용
· 온도값 팔레트 이미지 만들어보기
[Python/FLIR] PySpin 카메라 제어(1)
· QueryCase를 사용한 측정 온도 범위 변경 예제
[Python/FLIR] PySpin 카메라 제어(2)
· FPS변경 및 NUC Excute 예제
1. Radiometric모드 변경 및 온도값 Grab
1-1. 모드 변경
Pixel Format을 Mono16으로 변경해줍니다.
IR Pixel Format을 Radiometric로 변경해줍니다.
1-2 온도값 Grab
PySpin 카메라에서 온도값 가져오기(3) 강좌를 참고하여 Radiometric으로 온도값을 가져옵니다.
raw_data
↓ (J0, J1 적용 → 센서 보정)
센서 보정 data
↓ (X, A1, B1, A2, B2 적용 → 대기 보정)
대기 보정 data
↓ (R, B 적용 → Planck 모델 계산)
최종 온도 data(temperature_kelvin)
Celsius_data = temperature_kelvin – 273.15
# Radiometric 계산 함수 def calculate_radiometric(image_data): image_Radiance = (image_data - J0) / J1 Celsius_data = (B / np.log(R / ((image_Radiance / Emissivity / Tau) - K2) + F)) - 273.15 max_value = np.max(Celsius_data) min_value = np.min(Celsius_data) # min_coordinates = np.argwhere(Celsius_data == min_temperature) # 최소 좌표 # max_coordinates = np.argwhere(Celsius_data == max_temperature) # 최대 좌표 # print(f"Celsius_data = {Celsius_data}") # return Celsius_data, max_temperature, min_temperature, max_coordinates, min_coordinates return Celsius_data, max_value, min_value
Celsius_data는 카메라 해상도에 해당하는 픽셀 수만큼의 온도 값을 포함하고 있습니다
Ex) A50 : 464 * 348, A70 : 640 * 480

2. Palette File Load
팔레트는 하단에 첨부한 IRON.csv, RAINBOW.csv 파일을 사용합니다.
컬러 팔레트 load는 numpy의 loadtxt 함수를 사용하여 진행합니다.
파일의 경로와 타입을 정확하게 써줍니다.
iron_palette = np.loadtxt("./palette/IRON.csv", delimiter=",", dtype=np.uint8)

3. 컬러 팔레트 이미지 생성
3-1 온도 범위 정규화
먼저, 입력된 온도 데이터(Celsius_data)의 최소값과 최대값을 계산합니다.
min_value = np.min(Celsius_data)
max_value = np.max(Celsius_data)

전체 온도 값을 0–255 범위로 정규화하여 8비트 이미지로 변환합니다. 이는 LUT(룩업 테이블)를 적용하기 위한 전처리입니다.
normalized_img = ((Celsius_data - min_value) / (max_value - min_value) * 255).astype(np.uint8)
3-2. 컬러 팔레트 준비
이 LUT는 OpenCV cv2.LUT() 함수가 요구하는 형식인 (256, 1, 3)의 8비트 정수 배열로 재구성됩니다.
palette_lut = palette_lut.reshape(256, 1, 3).astype(np.uint8)
3-3. 컬러맵 적용
정규화된 단일 채널 이미지를 3채널(BGR) 이미지로 변환합니다.
normalized_img_3ch = cv2.merge([normalized_img] * 3)
이 3채널 이미지에 컬러 팔레트를 LUT로 적용하여 최종적인 컬러맵 이미지를 생성합니다.
color_mapped_img = cv2.LUT(normalized_img_3ch, palette_lut)

default 이미지

Iron 이미지

Rainbow 이미지
더 자세한 내용은 “컬러팔레트 실습.ipynd” 파일을 참고 부탁 드립니다.
📂파일 다운로드 바로가기 클릭하기!
이번 강좌에서는 Spinnaker SDK로 얻은 온도값을 팔레트 Look Up Table을
사용하여 이미지에 컬러 팔레트를 적용하는 실습을 해보았습니다.
다음 강좌에서는 QueryCase를 값을 사용하여 측정 온도 범위를 바꾸는 실습을 진행하겠습니다.
그럼 다음 시간에 또 만나요!
감사합니다.

안녕하세요 오랜만이에요! 😊
오늘은 FLIR A 시리즈 카메라와 Spinnaker SDK를 활용해
온도 데이터를 컬러 이미지로 변환하는 재미있는 실습을 소개해드릴게요.
Radiometric 모드에서 가져온 온도값에 Iron, Rainbow 팔레트를 적용해서 컬러맵 이미지를 만들어보는 과정인데요
직접 LUT(Look Up Table)를 적용하면서 시각화하는 방법까지 하나하나 따라 해보실 수 있답니다!
열화상 데이터를 활용한 이미지 처리에 관심 있으셨다면 이번 포스팅이 큰 도움이 되실 거예요.
그럼 함께 시작해볼까요?
* 강좌 목차
[Python/FLIR] Spinnaker SDK, PySpin 설치 가이드
· FLIR Spinnaker SDK 설치 및 실행(Windows, Ubuntu)
[Python/FLIR] PySpin Node 사용법
· 노드의 개념, 타입, 사용법 설명, spinview에서 노드 정보 확인
[Python/FLIR] PySpin 카메라 스트리밍 기본
· Pyspin 사용하여 카메라 Connect 및 Grab 해보기
[Python/FLIR] PySpin카메라에서 온도값 가져오기(1)
· Nodemap으로 pixelformat 변경, IRFormat 변경하기
[Python/FLIR] PySpin 카메라에서 온도값 가져오기(2)
· TemperatureLinear(10K, 100K)으로 온도값 가져오기
[Python/FLIR] PySpin 카메라에서 온도값 가져오기(3)
· Radiometric으로 온도값 가져오기
[Python/FLIR] PySpin 온도 데이터 팔레트 적용
· 온도값 팔레트 이미지 만들어보기
[Python/FLIR] PySpin 카메라 제어(1)
· QueryCase를 사용한 측정 온도 범위 변경 예제
[Python/FLIR] PySpin 카메라 제어(2)
· FPS변경 및 NUC Excute 예제
1. Radiometric모드 변경 및 온도값 Grab
1-1. 모드 변경
Pixel Format을 Mono16으로 변경해줍니다.
IR Pixel Format을 Radiometric로 변경해줍니다.
1-2 온도값 Grab
PySpin 카메라에서 온도값 가져오기(3) 강좌를 참고하여 Radiometric으로 온도값을 가져옵니다.
raw_data
↓ (J0, J1 적용 → 센서 보정)
센서 보정 data
↓ (X, A1, B1, A2, B2 적용 → 대기 보정)
대기 보정 data
↓ (R, B 적용 → Planck 모델 계산)
최종 온도 data(temperature_kelvin)
Celsius_data = temperature_kelvin – 273.15
Celsius_data는 카메라 해상도에 해당하는 픽셀 수만큼의 온도 값을 포함하고 있습니다
Ex) A50 : 464 * 348, A70 : 640 * 480
2. Palette File Load
팔레트는 하단에 첨부한 IRON.csv, RAINBOW.csv 파일을 사용합니다.
컬러 팔레트 load는 numpy의 loadtxt 함수를 사용하여 진행합니다.
파일의 경로와 타입을 정확하게 써줍니다.
iron_palette = np.loadtxt("./palette/IRON.csv", delimiter=",", dtype=np.uint8)
3. 컬러 팔레트 이미지 생성
3-1 온도 범위 정규화
먼저, 입력된 온도 데이터(Celsius_data)의 최소값과 최대값을 계산합니다.
min_value = np.min(Celsius_data)
max_value = np.max(Celsius_data)
전체 온도 값을 0–255 범위로 정규화하여 8비트 이미지로 변환합니다. 이는 LUT(룩업 테이블)를 적용하기 위한 전처리입니다.
normalized_img = ((Celsius_data - min_value) / (max_value - min_value) * 255).astype(np.uint8)
3-2. 컬러 팔레트 준비
이 LUT는 OpenCV cv2.LUT() 함수가 요구하는 형식인 (256, 1, 3)의 8비트 정수 배열로 재구성됩니다.
palette_lut = palette_lut.reshape(256, 1, 3).astype(np.uint8)
3-3. 컬러맵 적용
정규화된 단일 채널 이미지를 3채널(BGR) 이미지로 변환합니다.
normalized_img_3ch = cv2.merge([normalized_img] * 3)
이 3채널 이미지에 컬러 팔레트를 LUT로 적용하여 최종적인 컬러맵 이미지를 생성합니다.
color_mapped_img = cv2.LUT(normalized_img_3ch, palette_lut)
default 이미지
Iron 이미지
Rainbow 이미지
더 자세한 내용은 “컬러팔레트 실습.ipynd” 파일을 참고 부탁 드립니다.
📂파일 다운로드 바로가기 클릭하기!
이번 강좌에서는 Spinnaker SDK로 얻은 온도값을 팔레트 Look Up Table을
사용하여 이미지에 컬러 팔레트를 적용하는 실습을 해보았습니다.
다음 강좌에서는 QueryCase를 값을 사용하여 측정 온도 범위를 바꾸는 실습을 진행하겠습니다.
그럼 다음 시간에 또 만나요!
감사합니다.