[Python][Python/FLIR] PySpin Color 팔레트 적용 #7

조회수 296

FLIR A 시리즈 열화상 카메라 Python PySpin Radiometric 온도 데이터를 컬러 이미지로 변환

안녕하세요 오랜만이에요! 😊

오늘은 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

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경



2. Palette File Load

팔레트는 하단에 첨부한 IRON.csv, RAINBOW.csv 파일을 사용합니다.

컬러 팔레트 load는 numpy의 loadtxt 함수를 사용하여 진행합니다.

파일의 경로와 타입을 정확하게 써줍니다.


iron_palette = np.loadtxt("./palette/IRON.csv", delimiter=",", dtype=np.uint8)

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경


3. 컬러 팔레트 이미지 생성


3-1 온도 범위 정규화

먼저, 입력된 온도 데이터(Celsius_data)의 최소값과 최대값을 계산합니다.

min_value = np.min(Celsius_data) 

max_value = np.max(Celsius_data)

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경


전체 온도 값을 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)

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경

default 이미지

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경

Iron 이미지

FLIR, 열화상 카메라, FLIR A50, Spinnaker SDK, PySpin, Python, 파이썬, NodeMap, 노드맵, SpinView, 카메라 제어, 온도값, 온도 데이터, 온도 측정, 온도 측정 범위, 온도 범위 변경, Temperature Range, CurrentCase, QueryCase, QueryCaseEnabled, QueryEnable, QueryCaseLowLimit, QueryCaseHighLimit, LowLimit, HighLimit, Kelvin, Radiometric, TemperatureLinear, PixelFormat, Mono16, IRFormat, 스트리밍, 카메라 스트리밍, SDK 설치, Windows, Ubuntu, 예제 코드, 실습, ipynb, Jupyter Notebook, NUC, FPS 변경

Rainbow 이미지


더 자세한 내용은 “컬러팔레트 실습.ipynd” 파일을 참고 부탁 드립니다.


📂파일 다운로드 바로가기 클릭하기!


이번 강좌에서는 Spinnaker SDK로 얻은 온도값을 팔레트 Look Up Table을

사용하여 이미지에 컬러 팔레트를 적용하는 실습을 해보았습니다.


다음 강좌에서는 QueryCase를 값을 사용하여 측정 온도 범위를 바꾸는 실습을 진행하겠습니다.

그럼 다음 시간에 또 만나요!

감사합니다.



9428bf56d5d07.png


Contact us.

블로그 바로가기
www.blog.naver.com/mdstec_flir

블로그 방문하기

MDS 교육 수강하기
상반기/ 하반기 진행시 오픈 예정

수강신청 바로가기


@MDS Tech Inc. All Rights Reserved.

Youtube↖︎

Instagram↖︎

Facebook↖︎

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승


©MDS Tech Inc. All Rights Reserved.

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층

TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승

©MDS Tech Inc. All Rights Reserved.