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

조회수 317

안녕하세요! 이번 강좌에서는 Spinnaker SDK를 활용하여

FLIR A Series 카메라의 온도 데이터를 제어하는 방법을 알아보겠습니다.


특히 PixelFormat 설정 및 Temperature Linear, Radiometric 모드 변경에 대해 자세히 다룰 예정입니다.

FLIR 카메라를 활용한 온도 데이터 분석이 궁금하시다면 이번 강의를 꼭 확인해 보세요!




* 강좌 목차


[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의 예제를 기반으로 하며, 카메라를 FLIR A Series 카메라를 사용합니다.


이번 시간은 Spinnaker SDK를 사용해 카메라에서 온도값 가져오기 첫번째 시간입니다.

PixelFormat과 Temperature Linear, Radiometric에 대하여 개념을 숙지하고,

PySpin 노드의 값을 변경해보는 실습 시간입니다.

 

1. Pixelformat의 정의 및 사용법


픽셀 포맷(PixelFormat)은 카메라나 이미지 시스템에서 각 픽셀이 어떤 방식으로

데이터를 저장하는지 정의한 형식입니다.

한마디로, "한 픽셀을 몇 비트로, 어떤 구조로 표현할 것인가"에 대한 규칙입니다.

Mono8과 Mono16은 기본적으로 흑백으로 데이터가 들어옵니다.

Mono8은 한 픽셀 당 8비트로 받으며, 각 픽셀의 범위는 0~255입니다.

Mono16은 한 픽셀 당 16비트로 받으며, 각 픽셀의 범위는 0~65535입니다.


1-1. 온도 모드에 따른 PixelFormat

Mono8의 경우 3강 이미지 Grab 강좌에서 확인한 것처럼 바로 확인할 수 있는 이미지 형태로,

0~255값의 흑백으로 grab합니다.

Mono16은 RadioMetric과 Temperature Linear에서 사용하며,

raw데이터가 각 픽셀이 온도 Kelvin값(0~65535)값으로 반환됩니다.

raw데이터를 섭씨온도로 변형한 후, normalize 과정을 거쳐 이미지화 됩니다.

최종 반영은 nodemap에 PixelFormat노드에 반영합니다.


  •  선택 가능한 PixelFormat 종류


  • PixelFormat Spinview feature


1-2. PixelFormat 변경 예제



Get pixel_format Node



nodemap = cam.GetNodeMap() # get PixelFormat Nodemap node_pixel_format = PySpin.CEnumerationPtr(nodemap.GetNode('PixelFormat'))




Mono8 변경 함수


def Set_FixelFormat_Mono8():        if node_pixel_format.GetAccessMode() == PySpin.RW:            node_pixel_format_mono8 = PySpin.CEnumEntryPtr(node_pixel_format.GetEntryByName('Mono8'))            pixel_format_mono8 = node_pixel_format_mono8.GetValue()            node_pixel_format.SetIntValue(pixel_format_mono8)        else:            print("node_pixel_format not available")


 

Mono16 변경 함수


def Set_FixelFormat_Mono16():        if node_pixel_format.GetAccessMode() == PySpin.RW:            node_pixel_format_mono16 = PySpin.CEnumEntryPtr(node_pixel_format.GetEntryByName('Mono16'))            pixel_format_mono16 = node_pixel_format_mono16.GetValue()            node_pixel_format.SetIntValue(pixel_format_mono16)        else:            print("node_pixel_format not available")



 

2. Temperature Linear, RadioMetric 개념 및 사용법


  • 선택 가능한 IRFormat 종류 

  • IRFormat Spinview feature


2-1 Temperature Linear란?

Temperature Linear는 온도에 비례하는 원시(Raw) 값을 선형적으로 출력하는 방식으로,

정확한 온도 대신 온도 변화나 분포를 감지하는 데 적합합니다.

Temperature Linear의 모드는 10k와 100k가 있습니다.

Temperature Linear 모드에서의 정밀도는 온도 범위 크기에 반비례 합니다.

따라서 10k의 범위는 100k의 범위보다 정밀하며, 더 미세한 온도 차이를 감지하고 싶다면 

범위가 좁은 10k를 사용하는 것을 추천 드립니다. 



2-2라디오메트릭(Radiometric)이란?

Radiometric은 픽셀 단위로 정확한 물리적 온도값(°C, K 등)을 포함하는 적외선 영상 모드로,

Emissivity, 거리, 반사온도 등의 보정 정보를 포함해 절대 온도 측정이 가능한 모드입니다.

결론적으로 각 픽셀이 보정된 절대 온도 값을 포함하는 적외선 영상 모드입니다.

Temperature Linear와 차이점은 Radiometric의 정밀도가 높고, 더 정확한 온도측정이 가능하기

때문에 과학적 분석, 정밀 측정에 자주 사용됩니다.

 


2-3 PySpin모드 변경 예제

온도 모드의 변경은 PixelFormat을 먼저 변경 후 진행합니다.

최종 반영은 nodemap에 “IRFormat”노드에 반영합니다.




Get IRFormat Node


nodemap = cam.GetNodeMap() # get IRFormat Nodemap node_IRFormat = PySpin.CEnumerationPtr(self.nodemap.GetNode('IRFormat'))




RadioMetric 예제



def Set_Radiometric():        if node_IRFormat.GetAccessMode() == PySpin.RW:            print(f"set mode change Radiometric")            node_temp_radiometric = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('Radiometric'))            node_radiometric = node_temp_radiometric.GetValue()            node_IRFormat.SetIntValue(node_radiometric)        else:            print("node_IRFormat is not available")


 

TemperatureLinear 100K 예제


def Set_Temperature100K():        if node_IRFormat.GetAccessMode() == PySpin.RW:            print(f"set mode change Temperature100K")            # node_IRFormat = PySpin.CEnumerationPtr(nodemap.GetNode('IRFormat'))            node_temp_linear_low = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear100mK'))            node_temp_low = node_temp_linear_low.GetValue()            node_IRFormat.SetIntValue(node_temp_low)        else:            print("node_IRFormat is not available")


 

TemperatureLinear 10K 예제


def Set_Temperature10K():        if node_IRFormat.GetAccessMode() == PySpin.RW:            print(f"set mode change Temperature10K")            node_temp_linear_high = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear10mK'))            node_temp_high = node_temp_linear_high.GetValue()            node_IRFormat.SetIntValue(node_temp_high)        else:            print("node_IRFormat is not available")


 

실습 코드는 “온도값 가져오기 실습(1).zip” 파일 참고 부탁 드립니다.


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


이번 강좌에서는 Spinnaker SDK를 활용한 FLIR 카메라의 PixelFormat 설정 및 온도 모드 변경 방법에

대해 학습하였습니다. 다음 강좌에서는 Temperature Linear(10K, 100K) 모드에서 온도값을 확인하고,

이를 이미지로 변환하는 방법을 다룰 예정입니다.


FLIR 카메라 및 Spinnaker SDK 활용법을 지속적으로 학습하며

정밀한 온도 측정과 이미지 처리 기술을 익혀보세요!


더 많은 FLIR 카메라 활용 팁이 궁금하다면? 다음 강좌에서 만나봐요!

감사합니다. 😊



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.