행복한 하루

[edx.org] Computer Vision and Image Processing Fundamentals - What is digital image (Week 2-1.1 내용) 본문

Artificial Intelligence

[edx.org] Computer Vision and Image Processing Fundamentals - What is digital image (Week 2-1.1 내용)

변화의 물결 2021. 12. 14. 00:11

 

 

안녕하세요.

 

 이제 실제적인 디지털 이미지 프로세싱을 하기 위한 사전 준비를 합니다.

첫 번째로는 What is A Digital Image에 대해서 설명을 해줍니다.

그리고 두 번째는 Processing Digital Images In Python 대해 설명해주고 실습을 진행합니다.

간단하게 들으면서 음~ 그렇군 하면서 들을 수 있습니다. 그래도 이미지 처리에 대해 처음 접하시는 분이라면 천천히 들으시면 도움이 될 것으로 생각됩니다. 


 1. 이론 학습하기

  Digital Image에 대한 설명은 동영상으로 진행합니다.

디지털 이미지를 쉽게 설명하기 위해서 일반 컬러 사진을 흑백사진으로 바꾼 후 한 부분을 보면 줌(Zoom)해서 보면 디지털 그림들은 하나의 사각형 점들로 되어 있고 그것은 선명도(Intensity)라는 값으로 표현할 수 있습니다. 이 점은 0(검정)에서 255(흰색) 값으로 표시할 수 있으며 행(row), 열(col)로 값을 표시할 수 있습니다.

 

 컬러 이미지 같은 경우 RGB 채널(3차원 배열)로 보면 3층으로 Red, Green, Blue 겹으로 선명도를 볼 수 있습니다. 그리고 이 RGB 채널들을 다시 더해서 보면 우리가 볼 수 있는 컬러 사진이 되는 것입니다.

 

파이썬에서 이미지를 불러오고 위의 내용들을 확인하는 파이썬 소스에 대해 간략하게 먼저 설명해줍니다. 이후 페이지에서 실습을 합니다.

우선 pilow(PIL)이라는 유명한 이미지 작업 라이브러리에 대해서 설명합니다.

 

이미지 포맷이 어떤 것인지, 사이즈는 얼마로 보여주게 할지, 어떤 모드로 할지 등을 설정할 수 있는 라이브러리입니다. 또한 image를 gray 이미지로 변환하여 저장합니다.

 

그리고 컬러 이미지를 RGB로 채널로 나누어 보면 저장한 후 Gray 이미지로 변환해서 보면 각 채널 별로 선명도(Intensity) 다르게 나타나는 것을 알 수 있습니다. 예를 들어, Red 채널에서 빨간색 부분이 255(흰색)로 선명도가 높게 나옵니다.

 

PIL을 이용한 이미지를 배열로 변환하기 위한 numpy array 라이브러리를 설명합니다.

 

끝으로 위의 라이브러리를 사용하는 것이 아니라 OpenCV이라는 컴퓨터 비전 라이브러리를 통해 좀 더 쉽게 처리하는 방법을 알려줍니다. 어느 것을 사용해도 문제는 없지만, OpenCV를 사용할 경우 주의할 점은 일반 영상처리에서는 RGB로 하지만 OpenCV에서 컬러 채널 배열은 BGR라고 합니다. 그래서 사진을 불러와서 변환 작업을 거쳐야 한다는 것입니다.

 

다음 챕터로 넘어가면 Skills Network Labs라고 해서 웹상에서 Pillow Library code 설명을 보면서 타이핑하지 않고 간단하게 따라 해 보면서 실험 결과를 볼 수 있습니다. (이것을 무료해도 되나 할 정도로 잘 만들어져 있습니다. 단, 수업 기간 동안 사용 가능합니다.)

  

2. 파이썬 실습하기

 - 앞에서 설명해주었던 내용들을 실습해볼  있도록 되어 있으므로 실행 버튼을 누르면서 테스트할  있습니다.

 

 

- 실제 실습공간에서 이미지를 다운로드가 가능하고 wget으로 알려준 자료 링크를 일반 리눅스(라즈베리파이 셀(shell))에서 입력해도 다운로드가 되는 것을 확인할 수 있습니다.

 

 

 - 이후부터는 파이썬(Python) 소스를 설명해가며 단계별로 진행합니다. 만약 edx에서 제공해주는 가상의 공간에서 소스를 실행시키지 않고 개별적으로 환경을 구축해서 Python을 해보려면 Python 개발 툴( Pycharm, atom, jupyter notebook) 설치하신 후에 아래의 명령어를 실행하셔야 동작을 확인할 수 있습니다.

  

# 아래 소스를 위한 기본이 되는 3개의 사진 자료입니다. 영상처리를 하시면 많이 보게 되는 사진으로 생각됩니다. (edx에서 제공해주고 있는 링크라 링크는 언제든 끊어질 수 있습니다.)

   

!wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-CV0101EN-SkillsNetwork/images%20/images_part_1/lenna.png -O lenna.png
!wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-CV0101EN-SkillsNetwork/images%20/images_part_1/baboon.png -O baboon.png
!wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-CV0101EN-SkillsNetwork/images%20/images_part_1/barbara.png -O barbara.png

my_image = "lenna.png"

 

#현재 경로를 읽어와서 다운로드한 이미지를 경로를 만들어 준다든지

  

import os
cwd = os.getcwd()
cwd

image_path = os.path.join(cwd, my_image)
image_path

 

# 이미지를 사용하기 위해서 PIL 라이브러리를 불러와서 이미지가 어떤 형식인지 확인하게 해 줍니다. 그리고 이미지를 불러옵니다.

 

from PIL import Image
image = Image.open(my_image)
type(image)
image

 

#이미지를 화면에 불러올 수 있는 방법이 있는데 설정된 환경에 따라 나타날 수 있고 아닐 수도 있다고 합니다. 

image.show()

#혹은 (plot 가 추가되어 불러옵니다.) 

import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
plt.imshow(image)
plt.show()

 

#이미지의 오브젝트를 가져와서 여러 정보를 확인합니다. 

image = Image.open(image_path)
print(image.size)
print(image.mode)

 

#image.open으로 이미지 경로를 불러올 경우 이미지 데이터를 메모리에 올리지 않습니다. 그래서 image.load() 호출할 때 실제 메모리로 데이터가 올라갑니다. 그리고 픽셀의 0,1의 점의 선명도를 확인해봅니다. 그러면 lenna.png 경우 (226,137, 125) 값을 얻을 수 있습니다. 

x = 0
y = 1
im[y,x]

 

# png 파일이었던 것을 jpg 포맷으로도 저장할 수 있습니다. 

image.save("lenna.jpg")

  

글이 길어지는 것 같아서 끊어서 다음에 Grayscale Images 등 실습한 내용을 올리도록 하겠습니다.

 

감사합니다.

 

 

 

<참고 사이트>

1. edx.org - Computer Vision and Image Processing Fundamentals

https://www.edx.org/course/computer-vision-and-image-processing-fundamentals

 

 

Comments