[Python][Python/FLIR] PySpin 카메라에서 온도값 가져오기(2)#5

조회수 415

Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화




* 강좌 목차


[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 예제


Python으로 Spinnaker SDK를 활용해 FLIR A Series 카메라를 제어하는 방법을 배워보세요.

본 강좌에서는 FLIR의 공식 예제를 기반으로 하여  PySpin을 사용한 Temperature Linear(100K, 10K)

모드 설정, 온도값 확인 및 섭씨 변환, 그리고 데이터를 이미지로 변환하는 과정을 다룹니다.

특히 Spinnaker SDK를 활용한 온도 데이터 처리에 관심 있는 분들에게 유용한 정보가 될 것입니다.



1. Temperature Linear 모드 설정


raw_data를 온도 데이터로 변환하여 ROI에 대한 값과 Max, Min값 등 유의미한 값을 확인할 수 있습니다.


1-1. Pixel Format을 16bit로 설정합니다.


Pixel Format은 스트리밍 하면 변경할 수 없습니다.

PySpin카메라에서 온도값 가져오기(1) 강을 참고하여 Mono16 비트로 설정합니다.

Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화


if node_pixel_format.GetAccessMode() == PySpin.RW:    # Mono8 모드의 노드 가져옴    node_pixel_format_mono16 = PySpin.CEnumEntryPtr(node_pixel_format.GetEntryByName('Mono16'))    # Mono8 value Get    pixel_format_mono16 = node_pixel_format_mono16.GetValue()    # node_pixel_format 노드에 Mono8 적용    node_pixel_format.SetIntValue(pixel_format_mono16)



1-2. IR Format을 TemperatureLinear으로 맞추어 줍니다.


IR Format을 변경하게 되면, 이미지를 grab(GetNextImage)하는 raw_data가 선택한 모드에 따라 들어오게 됩니다.

IR Format은 스트리밍 중에도 변경이 가능합니다.

하지만, 스트리밍 중 모드가 변경되면 raw_data 후처리를 변경한 모드에 따라 변경해주어야 합니다.

PySpin카메라에서 온도값 가져오기(1) 강을 참고하여 IRFormat node를 TemperatureLinear 모드로 설정합니다.

Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화




1) TemperatureLinear 10K


if node_IRFormat.GetAccessMode() == PySpin.RW:    node_temp_linear_low = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear10K'))    node_temp_low = node_temp_linear_low.GetValue()    node_IRFormat.SetIntValue(node_temp_low) else:    print("node_IRFormat is not available")




2) TemperatureLinear 100K


if node_IRFormat.GetAccessMode() == PySpin.RW:    node_temp_linear_low = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear100K'))    node_temp_low = node_temp_linear_low.GetValue()    node_IRFormat.SetIntValue(node_temp_low) else:    print("node_IRFormat is not available")




2. 온도값 확인 및 섭씨 변환


TemperatureLinear 모드 변경 후, 들어오는 raw data 해상도의 각 픽셀은kelvin 단위의 온도값 입니다.

10K와 100K는 각 픽셀에 맞게 일정한 값을 곱해주고, kelvin을 Celsius값으로 변경이 필요합니다.



1) TemperatureLinear 10K

TemperatureLinear 10K는 측정된 값을 섭씨 온도로 변환할 때, 기존 데이터에 0.01을 곱한 후 -273.15를 빼주는 방식으로 처리됩니다.




  • TemperatureLinear 10K raw_data

  • Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화


  • TemperatureLinear 10K 섭씨 변환 공식
    Celsius_data = (image_data * 0.01) - 273.15


2) TemperatureLinear 100K

TemperatureLinear 100K는 측정된 값을 섭씨 온도로 변환할 때, 기존 데이터에 0.1을 곱한 후 -273.15를 빼주는 방식으로 처리됩니다.



  • TemperatureLinear 100K raw_data

  • Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화



  • TemperatureLinear 100K 섭씨 변환 공식

Celsius_data = (image_data * 0.1) - 273.15


위의 과정이 끝난 후, 모든 픽셀 데이터를 Celsius data로 얻을 수 있습니다.


  • 최종 Celsius 데이터

  • Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화




3. 온도값 이미지 시각화


raw_data로부터 이미지를 시각화하여 상대적인 온도 분포를 눈으로 확인할 수 있습니다.


Temperature Linear모드로 들어오는 rawdata는 16bit의 0 ~ 66535 사이의 값입니다.

이미지 표현 범위인 0~255로 변경하기 위하여 정규화를 진행합니다.


1) 정규화를 하기 위하여 raw_data를 섭씨로 바꾼 데이터의 최댓값과 최솟값을 구해줍니다.

max 값 : max_temperature = np.max(Celsius_data)

min 값 : min_temperature = np.min(Celsius_data)

2) Celsius_data와 max값, min값을 사용해 정규화를 진행합니다.(정규화 시 cv2.normalize 함수를 사용해도 무관합니다.)

# 온도 데이터를 0 ~ 255 범위로 정규화

# 정규화는 0~1 범위로 매핑되고, 255를 곱해서 표현 범위(0~255)로 확장

temp_to_img = 255 * (Celsius_int - min_temperature) / (max_temperature - min_temperature)

# float -> int8 변환

output_image = temp_to_img.astype(np.uint8)

# 단일 채널(1채널) -> 3채널로 변경

output_image = cv2.cvtColor(output_image, cv2.COLOR_GRAY2BGR)



  • 최종 ouput_image

  • Spinnaker SDK, PySpin, Python, FLIR A Series, TemperatureLinear 10K, TemperatureLinear 100K, PixelFormat Mono16, 온도 데이터 변환, Kelvin to Celsius, 열화상 데이터 시각화


이렇게 해서 Spinnaker SDK를 활용해 FLIR A Series 카메라에서 온도 데이터를 가져오고

이를 섭씨로 변환한 후 이미지로 시각화하는 과정까지 살펴보았습니다.


Temperature Linear 모드를 적절히 설정하면 보다 정밀한 온도 측정이 가능하며

데이터를 이미지 형태로 변환하면 시각적으로 쉽게 분석할 수 있습니다.


다음 강좌에서는 더욱 효율적인 데이터 활용법과 추가적인 기능을 다룰 예정이니 많은 관심 부탁드립니다.

궁금한 점이 있거나 더 알고 싶은 내용이 있다면 아래 문의 바로가기로 남겨주세요!

감사합니다.





5ed63b20d0aa3.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.