반응형

반사 및 굴절의 기하학적 특성

그림자를 관찰하거나 레이저 포인터를 사용하여 가시광선이 어느 정도 직선으로 전파되는 것은 일상적인 현상입니다. 이 동작은 기하학적 광학의 관점에서 가장 쉽게 설명됩니다. 이 설명은 빛의 파장이 빛이 입사하는 물체/구조물의 크기보다 훨씬 작은 경우에 유효합니다. IR 방사선은 가시광선과 매우 유사한 특성을 보입니다. 따라서 기하학적 광학을 사용하여 종종 설명할 수도 있습니다.

 

균질한 재료에서 IR 복사는 직선으로 전파됩니다. 기하학적 법칙에 따라 전파되는 광선으로 설명할 수 있습니다. 일반적으로 광선은 화살표로 표시됩니다.

 

두 물질의 경계면에서 입사된 복사선의 일부는 반사되고 일부는 굴절된 IR 복사선으로 투과됩니다.

 

예를 들어 IR 카메라의 렌즈와 같은 균질한 재료의 광학 특성은 굴절률 n으로 설명됩니다. 이 지수 n은 비흡수성 물질의 경우 1보다 큰 실수이고, 흡수성 물질의 경우 복잡한 수학적 양입니다.

 

다음 그림은 기하학적 광학의 반사 및 굴절 법칙을 보여줍니다. 그림에 나와 있는 예는 공기에서 게르마늄 표면에 입사하는 IR 복사를 나타냅니다.

 

 

복사 측정 및 열 복사

IR 카메라를 사용한 실제 측정에서 물체는 카메라 방향으로 방사선을 방출합니다. 여기서 물체는 검출기에 초점을 맞추고 정량적으로 측정됩니다.

열화상 촬영은 대부분 IR 복사에 불투명한 고체 물체로 수행되기 때문에 방출은 물체의 표면만을 나타냅니다.

 

흑체 복사(Blackbody Radiation)

기본 물리학에 기초하여 0K 이상의 절대 온도에서 모든 물체는 방사선을 방출합니다. 어떤 물체가 방출할 수 있는 최대 복사 세기는 물체의 온도에만 의존합니다. 따라서 이 방출된 복사를 열 복사라고 합니다. 실제 물체의 경우 추가 재료 속성인 방사율이 작용합니다.

 

최대 복사 세기를 방출하는 방출기를 흑체라고 합니다. 흑체는 다음과 같은 특성을 갖는 이상적인 표면과 유사합니다.

 

1. 흑체는 파장과 방향에 관계없이 모든 입사 방사선을 흡수합니다.

 

2. 주어진 온도와 파장에서 흑체보다 더 많은 에너지를 방출하는 표면은 없습니다.

 

3. 흑체에서 방출되는 복사는 파장에 따라 다릅니다. 그러나 그 광도는 방향에 의존하지 않습니다. 완벽한 흡수체 및 방사체로서 흑체는 복사 측정의 표준 역할을 합니다.

 

흑체 복사에 대한 플랑크 분포 함수

흑체의 열복사에 대한 매우 정확한 스펙트럼 측정은 19세기 말까지 존재했습니다. 그러나 막스 플랑크가 그의 유명한 플랑크 상수 h 개념을 도입한 1900년 이전에는 측정된 스펙트럼을 만족스럽게 설명할 수 없었습니다. 플랑크의 이론은 열역학에 기반을 두었지만 복사의 방출과 흡수의 양자적 특성으로 인해 흑체 복사 이론 뿐만 아니라 물리학의 전 세계에 완전히 새로운 개념을 도입했습니다.

 

다음 그림은 –20 ~ 1000 °C 온도의 흑체 복사를 보여줍니다.

 

 

다음과 같은 몇 가지 특징이 있습니다.

1. 스펙트럼 램프의 방출과 달리 이러한 스펙트럼은 연속적입니다.

2. 고정된 파장에 대해 복사 휘도는 온도와 함께 증가합니다(즉, 다른 온도의 스펙트럼은 서로 교차하지 않음).

3. 방출 스펙트럼 영역은 온도에 따라 다릅니다. 낮은 온도는 더 긴 파장으로 이어지고, 높은 온도는 더 짧은 파장 방출로 이어집니다.

반응형
반응형

CSV 파일 읽기

Python에서 CSV 파일을 읽으려면 먼저 csv 모듈을 가져와야 합니다.

다음으로 open() 함수를 사용하여 CSV 파일을 열어야 합니다.

다음으로 CSV 모듈에서 reader() 함수를 호출하고 파일 객체를 전달해야 합니다.

reader() 메서드는 CSV 파일의 행에 해당하는 항목이 포함된 목록을 반환합니다. 그런 다음 목록 항목을 반복할 수 있습니다.

 

csvfile.csv 파일을 열어보면 다음과 같은 내용이 있습니다.

name,age,gender,city

jon,25,male,london

kim,29,female,korea

 

csvfile.csv 파일을 파이썬에서 열어보고 출력해 보겠습니다. 출력된 결과를 보면 각각의 라인별로 리스트 타입으로 출력됩니다.

 

import csv

 

with open("E:/Data/csvfile.csv", mode = 'r') as file_handle_csv:

  file_content = csv.reader(file_handle_csv)

  for row in file_content:

    print(row)

 

Output:

['name', 'age', 'gender', 'city']

['jon', '25', 'male', 'london']

['kim', '29', 'female', 'korea']

 

 

CSV 파일 쓰기

1.     CSV 파일을 작성하려면 먼저 항목이 CSV 파일의 열 헤더에 해당하는 목록을 만들어야 합니다.

2.     레코드의 경우 각 내부 목록이 CSV 행에 해당하고 항목이 열 값에 해당하는 목록을 만들어야 합니다.

3.     쓰기 모드로 CSV 파일을 열어야 합니다.

4.     파일 개체가 CSV 모듈에서 write() 메서드로 전달됩니다. write() 메서드는 라이터 객체를 반환합니다.

5.     마지막으로 헤더를 작성하려면 헤더 목록을 writerow() 함수에 전달합니다.

6.     행을 쓰려면 다음 스크립트와 같이 레코드 목록을 writerows() 메서드에 전달합니다.

 

import csv

 

headers = ['Name', 'Age', 'Gender', 'City']

records = [['nick', 29, 'male', 'lyon'],

           ['joseph', 30, 'male', 'manchester'],

           ['kim', 33, 'female', 'seoul']]

 

with open("csvfile2.csv", mode = 'w', newline = '') as file_handle_csv:

    csv_writer = csv.writer(file_handle_csv)

    csv_writer.writerow(headers)   # writing the header

    csv_writer.writerows(records)  # writing the rows

 

새로 생성된 csvfile2.cvs 파일을 열어보면 다음과 같은 내용이 추가되었습니다.

Name,Age,Gender,City

nick,29,male,lyon

joseph,30,male,manchester

kim,33,female,seoul

 

 

PDF 파일 작업

Python으로 PDF 파일을 읽고 쓰는 방법을 보여줍니다.

PDF 파일을 읽으려면 PyPDF2 모듈을 설치해야 합니다. 다음 pip 명령으로 그렇게 할 수 있습니다.

 

pip install PyPDF2

 

PDF 파일 읽기

PDF 파일을 읽으려면 먼저 바이너리 읽기 모드로 파일을 열어야 합니다.

다음으로, 파일 객체를 PyPDF2 모듈에서 PdfFileReader() 메서드로 전달해야 합니다. 그러면 PdfFileReader() 메서드에서 반환된 개체를 사용하여 PDF 파일을 읽을 수 있습니다.

 

아래와 같이 numPages 속성을 사용하여 PDF 문서의 페이지 수를 가져올 수 있습니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile2.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

print(pdf_object.numPages)

 

텍스트를 인쇄하려면 먼저 getPage() 메서드를 사용하여 페이지를 가져와야 합니다.

다음으로 페이지 개체를 사용하여 extractText() 메서드를 호출하여 페이지 텍스트를 가져올 수 있습니다.

 

다음 스크립트는 PDF 문서의 첫 페이지 텍스트를 출력합니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

page_one = pdf_object.getPage(0)

print(page_one.extractText())

 

모든 페이지에서 텍스트를 인쇄하려면 모든 페이지를 반복하고 getPage 메소드를 사용하여 현재 페이지를 잡고 extractText() 함수를 사용하여 해당 텍스트를 인쇄하면 됩니다. 다음 스크립트는 PDF 문서의 모든 페이지에서 텍스트를 인쇄합니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

 

for i in range(pdf_object.numPages):

  new_page = pdf_object.getPage(i)

  print(new_page.extractText())

 

PDF 파일 쓰기

Python으로 PDF 문서를 작성하는 것은 복잡합니다.

형식 제약으로 인해 PDF 문서에 텍스트 문자열을 직접 추가할 수 없습니다.

PDF 문서를 작성하는 한 가지 방법은 PDF 문서의 특정 페이지에서 텍스트를 가져온 다음 해당 텍스트를 새 PDF 문서에 추가하는 것입니다.

 

1.     PdfFileWriter 클래스의 개체를 만듭니다. 이 객체는 PDF 문서에 텍스트를 쓰는 데 사용됩니다.

2.     다음으로 my_text.pdf 클래스의 첫 번째 페이지를 얻습니다.

3.     PDF 작성자 객체를 사용하여 페이지를 추가하거나 작성하려면 작성자의 addPage() 메서드에 페이지를 전달해야 합니다.

4.     다음 단계는 작성하려는 파일을 open() 함수를 사용하여 여는 것입니다.

5.     마지막으로 open() 함수에 의해 반환된 파일 객체는 PDF 작성자 객체의 write() 메서드로 전달됩니다.

 

다음 스크립트는 pdf_file1.pdf 파일에서 첫 번째 페이지를 읽고 해당 페이지를 새로 생성된 pdf_file2.pdf 파일에 추가합니다.

 

import PyPDF2

 

pdf_writer = PyPDF2.PdfFileWriter()

 

file_handle_pdf = open("pdf_file1.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

page_one = pdf_object.getPage(0)

 

pdf_writer.addPage(page_one)

 

new_pdf_file = open("pdf_file2.pdf", "wb")

pdf_writer.write(new_pdf_file)

new_pdf_file.close()

 

반응형
반응형

열화상 이미징

적외선(IR) 열화상은 지난 30년 동안 IR 검출기 설계, 전자 및 컴퓨터 과학의 마이크로시스템 기술에서 이루어진 엄청난 발전으로 인해 과학 및 산업 분야에서 매우 빠르게 발전하는 분야입니다.

 

오늘날 열화상 측정은 연구 개발 뿐만 아니라 비파괴 검사, 상태 모니터링, 예측 유지보수, 공정 및 건물의 에너지 비용 절감 등과 같은 다양한 산업 분야에 적용됩니다. 또한 최근 카메라 제조사들의 수익성 있는 산업 부문의 경쟁으로 수천 달러 또는 유로에 불과한 가격대의 저가 모델과 500달러 이하의 스마트폰 액세서리가 등장하면서 새로운 응용 가능성을 열었습니다.

 

열화상 이미지는 물리학 및 과학의 다양한 분야에서 사용할 수 있는 시각화 기술의 훌륭한 예입니다.

또한 시각화 측면에서 완전히 새로운 물리학 영역을 열었습니다. 요즘에는 떨어지는 물체의 충격이나 걷는 사람의 신발과의 상호 작용에 따른 바닥 온도 상승의 보이지 않는 영향을 쉽게 시각화 할 수 있습니다. 이것은 학교에서 시작하여 모든 종류의 산업 분야의 전문가 훈련으로 끝나는 물리학 및 자연 과학을 가르치는 완전히 새로운 방법을 허용할 것입니다.

 

서모그래피는 대부분의 경우 물체의 표면 온도를 정량적으로 측정할 수 있는 측정 기술입니다. 이 기술을 올바르게 사용하려면 전문가가 카메라의 기능과 사용자가 이미지에서 유용한 정보를 추출하기 위해 수행해야 하는 작업을 정확히 알고 있어야 합니다.

 

 

IR 이미지에 영향을 미치는 영향은 다음과 같습니다.

 

첫째, 물체의 복사는 대기, IR 윈도우 또는 카메라 광학 장치를 통과하는 동안 흡수 또는 산란을 통해 감쇠됩니다.

둘째, 대기 자체는 온도로 인해 복사를 방출할 수 있습니다. 이는 윈도우나 카메라 광학 장치 및 하우징 자체에도 해당됩니다.

 

셋째, 주변의 따뜻하거나 뜨거운 물체(열화상 카메라도 소스임)가 발생할 수 있습니다. 물체나 윈도우 등의 추가 IR 복사 반사에 영향을 줍니다. 또한 물체 또는 윈도우의 기여는 방사율 매개변수로 설명되는 재료, 표면 구조 등에 따라 달라질 수 있습니다.

 

 

최신 IR 카메라 시스템으로 기록된 이미지에 영향을 미치는 여러 매개변수 및 요인.

일반적으로 카메라 소프트웨어를 사용하여 조정할 수 있는 파라메터들 물체의 방사율
카메라와 물체의 거리(미국에서는 일반적으로 미터, 피트)
물체의 크기
상대습도
주변 온도(일반적으로 미국의 경우 섭씨 또는 켈빈, 화씨)
대기 온도
외부 광학 온도
외부 광학 전송
 
데이터가 이미지로 표시되는 방식에 영향을 주는 매개변수 온도 범위 ΔT
온도 범위 및 레벨
컬러 팔레트
IR 이미지의 정량 분석 및 해석에 중대한 영향을 미칠 수 있는 일부 매개변수 방사율의 파장 의존성(카메라의 파장 범위)
방사율의 각도 의존성(관찰각)
방사율의 온도 의존성
카메라와 물체 사이 물질의 광학적 특성
필터 사용(: 고온, 협대역)
열반사
풍속
태양광 부하
주변 물체의 그림자 효과
수분
물체의 열적 특성(: 시간 상수)

 

 

 

IR 이미징의 경우 IR 스펙트럼의 작은 범위만 사용됩니다. 일반적으로 열화상 촬영에 대해 세 가지 스펙트럼 범위가 정의됩니다. 8~14μm의 장파(LW) 영역, 3~5μm의 중파(MW) 영역, 0.9~1.7μm 단파(SW) 영역으로 구분됩니다. 밴드라고도 하는 이러한 범위의 제한 파장은 실제 감지기 감도 및 추가 광학 필터 요소에 따라 달라질 수 있습니다.

 

이러한 파장에 대한 제한은 첫 번째로 예상되는 열복사량의 영향, 두 번째로 탐지기의 물리학, 세 번째로 대기의 투과 특성에 따른 것입니다.

 

  

반응형
반응형

파이썬 응용 프로그램을 개발하는데 있어서 다른 유형의 파일을 가져와야 하는 경우가 종종 있습니다.

예를 들어 스팸 이메일을 분류하는 자연어 처리 애플리케이션을 개발하는 경우 스팸 이메일이 포함된 텍스트 파일을 사용하여 분류기 모델을 훈련해야 할 수 있습니다.

또한 CSV 파일에서 데이터를 읽고 CSV 파일에 데이터를 써야 할 수도 있습니다.

마지막으로 플랫 파일에 데이터를 읽고 쓰는 것 외에도 소켓을 사용하여 네트워크를 통해 데이터를 보내고 받아야 할 수도 있습니다.

 

파일 임포트

Python에서 파일 작업을 위해서 파일을 열어야 하는데 이때 사용하는 함수가 open()입니다.

open() 함수는 두 가지 속성을 전달해야 합니다. 열려는 파일의 경로와 파일을 오픈 할 모드입니다.

 

다음 표는 다양한 유형의 모드 값을 보여줍니다.

 

모드 설명
r 오직 읽기모드로 파일을 엽니다.
r+ 읽고 쓰기 위해서 파일을 엽니다.
rb 바이너리 형식 파일을 읽습니다.
rb+ 바이너리 형식으로 읽고 쓰기 위해서 파일을 엽니다.
w 오직 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
wb 바이너리 형식으로 쓰기위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
wb+ 바이너리 형식으로 읽거나 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
a 파일의 끝에 내용을 추가하기 위해서 파일을 엽니다.
a+ 내용을 추가하고 읽을 수 있도록 파일을 엽니다.
ab 바이너리 형식으로 내용을 추가하기 위해서 파일을 엽니다.
ab+ 바이너리 형식으로 내용을 추가하고 읽을 수 있도록 파일을 엽니다.

 

다음 스크립트는 읽고 쓸 수 있는 간단한 텍스트 파일을 엽니다. open() 함수에 의해 반환된 객체 유형을 출력합니다. 파일에 따라 open() 함수는 파일에서 다양한 유형의 작업을 수행하는 데 사용할 수 있는 객체를 반환합니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

type(file_handle_text)

 

Output:

_io.TextIOWrapper

 

같은 방법으로 워드 파일과 pdf 파일을 열 수 있습니다.

file_handle_word = open("E:/Data/ex_text.doc", "r+")

type(file_handle_word)

 

Output:

_io.TextIOWrapper

 

file_handle_pdf = open("E:/Data/ex_text.pdf", "r+")

type(file_handle_pdf)

 

Output:

_io.TextIOWrapper

 

open()함수에서 리턴 된 파일 객체는 name, mode closed를 사용하여 경로 이름, 파일 모드 및 파일 닫힘 여부를 확인할 수 있습니다.

 

print(file_handle_pdf.name)

print(file_handle_pdf.mode)

print(file_handle_pdf.closed)

 

Output:

E:/Data/ex_text.pdf

r+

False

 

파일을 연 후에는 다른 응용 프로그램에서 액세스할 수 있도록 닫아야 합니다. 파일을 닫으려면 closed() 메서드를 호출해야 합니다.

 

file_handle_pdf.close()

print(file_handle_pdf.closed)

 

Output:

True

 

Text 파일 읽기

Python으로 텍스트 파일을 읽으려면 먼저 읽기 권한으로 파일을 연 다음 파일 핸들러 객체를 사용하여 read() 메서드를 호출해야 합니다.

 

ex_text.txt 파일을 열어보면 다음과 같습니다.

hello there

Welcome to Python.

You will learn Python.

 

다음 스크립트는 "ex_text.txt"라는 파일을 읽습니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_content = file_handle_text.read()

print(file_content)

 

출력은 파일에 세 줄의 텍스트가 포함되어 있음을 보여줍니다.

hello there

Welcome to Python.

You will learn Python.

 

전체 파일을 읽는 대신 파일을 부분적으로 읽을 수도 있습니다.

예를 들어, 텍스트 파일에서 특정 수의 문자를 읽으려면 아래와 같이 매개변수 값으로 문자 수를 read() 함수에 전달해야 합니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_content = file_handle_text.read(20)

print(file_content)

 

Output:

hello there

Welcome

 

마지막으로 readline() 함수를 사용하여 파일을 한 라인씩 읽을 수도 있습니다. 라인 읽기 함수는 모든 라인을 읽을 때까지 텍스트의 다음 줄을 반환하는 반복기입니다. 다음은 readline() 함수의 예입니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_line1 = file_handle_text.readline()

file_line2 = file_handle_text.readline()

print(file_line1)

print(file_line2)

file_handle_text.close()

 

Output:

hello there

Welcome to Python.

 

명시적으로 close() 함수를 호출하지 않고도 파일을 열고, 일부 작업을 수행하고, 파일을 닫을 수 있는 특별한 코드가 있습니다.

with 키워드 open 함수 as 키워드 파일 개체 이름

with 블록 내에서 파일 개체 이름을 사용하여 파일에 대한 작업을 수행할 수 있습니다.

 

with open("E:/Data/ex_text.txt", "r+") as file_handle_text:

  file_content = file_handle_text.read()

  print(file_content)

 

Output:

hello there

Welcome to Python.

You will learn Python.

 

Text 파일 생성과 쓰기

텍스트 파일을 만들기 전에 기존 파일에 텍스트를 쓰는 방법을 알아보겠습니다.

기존 파일에 추가로 텍스트를 추가하려면 파일 오픈 모드를 'a'로 하고 파일을 열어야 합니다.

다음으로 기존 텍스트 끝에 텍스트를 작성하려면 write() 메서드를 호출하면 됩니다. 추가할 텍스트는 write() 메서드에 매개변수로 전달됩니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "a")

file_handle_text.write("This line is appended to the existing file.")

file_handle_text.close()

 

이제 ex_text.txt 파일의 내용을 출력하면 출력에 새로 추가된 행이 표시됩니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r")

file_content = file_handle_text.read()

print(file_content)

 

Output:

hello there

Welcome to Python.

You will learn Python.

This line is appended to the existing file.

 

마지막으로 새 파일을 생성하려면 파일 경로와 'w' 모드로 open 함수를 호출해야 합니다.

같은 이름의 파일이 존재하지 않으면 새로 파일을 생성하고 동일한 이름의 파일이 존재하면 파일 내용을 덮어씁니다.

 

file_handle_text = open("E:/Data/ex_text2.txt", "w")

file_handle_text.write("This line will overwrite the existing content or will be written in a new file.")

file_handle_text.close()

 

반응형

+ Recent posts