반갑습니다, 여러분
넘파이와 이미지에 대해 충분히 배웠으니
지난 강의들에서 다뤘던 핵심 개념들을 이해하고 있는지
짧은 복습 및 평가를 해보겠습니다
노트북을 열어 봅시다
'Numpy 및 이미지 평가 테스트'라고 합니다
이후에는 평가 솔루션 및 솔루션 노트북도 살펴보겠습니다
여러분 스스로 평가를 진행하고 솔루션과 비교하는 방법
진행 하겠습니다.
이제 평가지를 살펴보겠습니다
[Numpy 및 이미지 평가 테스트.ipynb]입니다
주피터 노트북 파일이죠
여러분이 할 일은 질문에 적힌 작업들을 완성하는 것입니다
정답은 아래에 있습니다.
numpy를 불러옵니다
상당히 쉬워요
그냥 {import numpy}라고 입력하면 되는데 보통은 {import numpy as np}라고 입력합니다
이렇게 하면 매번 numpy라고 할 필요 없이 np만 호출할 수 있어요
다음은 모든 숫자가 10인 5행 5열 배열을 생성하는 거였습니다
이걸 할 방법은 많은데, 한 가지 쉬운 방법은 {arr = np.ones((5,5))}를 입력하는 겁니다
이렇게 하면, 이 배열은 숫자 1로만 만들어지죠 배열을 만들어보면, 5행 5열이 전부 1입니다
여기서 할 수 있는 것은 이 배열의 기본 요소 하나하나를
10으로 곱하는 거예요
배열 속 각 요소마다 모두 작업을 하면 됩니다
어떻게 하는지는 강의에서 명확히 설명하지는 않았지만
이전 강의에서 힌트를 주기는 했어요
이건 어디에든 적용할 수 있습니다
배열을 2로 나눈다고 한다면, 전부 0.5가 되겠죠
1로만 이루어져 있으므로 2로 나눌 수 있습니다
특정 숫자의 배열을 빨리 만들어 내기 위해 이런 작업을 가끔 하게 될 거예요
모든 색을 최대치로 올리는 방법을 자주 사용하게 될 건데
이건 {arr*255}를 입력하면 되고, 그 반대의 경우는 0을 사용하면 됩니다
좋아요, 5행 5열의 배열을 만들어 봤습니다
다음, 아래 셀에 임의의 숫자들의 배열을 만들고 어떻게 작동하는지 알아내 보세요
이전 넘파이 강의에서 언급한 적 있지만 그때 여러분이 이해하지 못했을 수도 있으니
이건 랜덤 시드 설정을 하는 거고 이 101이라는 숫자는 임의로 넣은 겁니다
아무 숫자나 고르세요
여러분이 선택한 숫자만 그대로 계속 사용하면 됩니다
그래야만 임의의 숫자를 생성했을 때 주어진 시드가 제공하는 것과 동일한 값을
생성하게 될 것입니다
그리고 이 줄은 임의의 숫자들의 배열을 만듭니다
넘파이에서 임의의 라이브러리를 불러오고 그다음 randint 함수로 임의의 정수를 불러오는 것이죠
여기서 [shift+tab]을 누르면, low, high, 그리고 size를 지정해야 한다고 할 거예요
이게 뭘 하는 거냐면, 0부터 시작해서 100을 포함하지 않는 범위 안에서 임의의 숫자를 선택하여 반환하고
그 숫자들을 5행 5열로 만드는 것입니다
이걸 실행하고 배열을 확인해 보면, 임의의 숫자들이 5행 5열로 배열됩니다
만약 여러분이 시드를 101로 입력하면 이 임의의 배열을 만들어 낼 때마다
같은 임의의 숫자들이 나오게 될 거예요
42와 같이 다른 값으로 바꿔보면, 다른 숫자 배열이 나옵니다
하지만 실행할 때마다 같은 임의의 숫자들이 나오게 되죠
'in' 셀의 숫자가 바뀌면 'out'의 숫자들이 바뀌는 걸 보세요
이게 시드의 역할입니다
우리는 기본값을 고를 건데, 제 값과 똑같은 값이 나오도록
101로 하겠습니다
다음 질문은, 배열에서 가장 큰 값과 작은 값을 구하는 거였습니다
이 경우, 우리가 사용할 것은
{arr.max()}와 {arr.min()} 입니다
좋아요, 다음은 강아지 사진을 읽고 출력하기 위해 파이선 이미징 라이브러리와 맷플롯립을 사용합니다
강의에서 했던 것과 완전히 똑같죠
우리가 할 수 있는 두 가지 방법 중 하나, {import matplotlib}을 입력합니다
{import matplotlib.pyplot as plt}
이렇게 입력하면 함수 구현 기능이 가능합니다 노트북에 한 줄로 이것을 입력해야 하니
{%matplotlib inline}을 입력합니다
이전에 언급했듯이, 최신 버전의 주피터 랩은 이게
기본값으로 설정되어 있습니다
그래서 이 줄을 추가로 쓰지 않아도 작동하게 되어있죠
하지만 구 버전의 주피터를 쓰고 있다면 이 줄을 추가하는 것이 좋을 겁니다
다음은 {from PIL import Image}를 입력합니다
이 이미지 함수로는 JPEG와 PNG를 직접 불러올 수 있다는 점 기억하세요
이제 데이터 폴더에서
데이터 폴더가 어디 있느냐에 따라서 여러분이 열고자 하는 이미지 파일의
경로가 달라지겠죠 {pic = Image.open(' ')}에 파일 경로를 입력하세요
탭 키를 눌러 자동완성이 가능합니다
자동 완성을 사용할 수 없다는 건 여러분이 같은 디렉토리나
올바른 디렉토리를 입력하지 않았다는 말이 되겠네요
그런 다음 실행하려면, pic을 입력하면 주피터 랩이나 주피터 노트북이
자동으로 강아지 사진을 보여줍니다
좋아요, 이건 사실 특수화된 이미지 파일이라는 점을 기억하세요
사진을 확인해 보면, JPEG 이미지 파일이네요
이제 이 이미지를 넘파이 배열로 변환하겠습니다 그러면 우리는 이 shape가
실제로도 넘파이 배열인지 확인할 수 있겠죠
단순해요
{array=np.asarray(pic)}을 입력하면 됩니다
배열의 유형을 확인하면 'numpy.ndarray'가 나오고
shape도 확인할 수 있는데, 1300x1950 크기에 3가지 색상 채널을 사용합니다
마지막 작업은, 슬라이싱을 사용해 빨간색과 초록색 채널을 0으로 맞춰준 다음
imshow를 사용해서 파란색 채널만 보여주는 겁니다 {plt.imshow(arr)}를 입력하면
세 채널 모두 사용한 강아지 사진이 나타납니다
이제 복사본을 만들어 보겠습니다
{mycopy = arr.copy()}를 입력하면
복사본을 수정해도 여전히
원본과 비교해 볼 수 있습니다
우리가 해야 할 작업은 뭐죠?
빨간색과 초록색을 0으로 하고자 합니다
넘파이와 파이썬 이미지 라이브러리의 방식으로 읽어온 이 이미지들이
명령대로 작동했습니다
빨간색이 첫 번째 레이어, 초록색이 두 번째, 파란색이 세 번째 레이어입니다
0번 인덱스 레이어와 1번 인덱스 레이어를 모두 0으로 하려고 합니다
{mycopy[:,:,0]}를 입력하여 0번 레이어, 즉 첫 번째 채널의 X축과 Y축 혹은 너비와 높이의 모든 픽셀을
잡아줍니다
그리고 전부 0으로 맞춥니다
계속해서 {plt.imshow (mycopy)}를 입력하면 이렇게 나타납니다
보세요
파란색만 남았습니다
이 이미지에서 파란색은 많지 않다는 걸 볼 수 있는데, 특히 강아지의 귀 부분이 그렇죠
전에 언급했듯이, 원본을 보면 귀 부분이 꽤 붉은색입니다
이 이미지에는 파란색이 많지 않죠 그래서 파란색 채널만 남겼을 때
이미지가 상당히 어두운 값을 나타내는 것입니다
이 강의의 이번 섹션에 오기까지 여러분이 이해해야 할 주요 내용은
하나의 값으로 배열을 만드는 것입니다
남은 과정 동안은 임의의 배열은 다루지 않을 거예요
하지만 여러분은 np.ones, 특히 np.zeroes를 만드는 데에 불편함이 없어야 합니다
어떻게든 여러분이 np.ones와 np.zeroes를 이해하셨다면 그걸로 충분합니다
PIL을 이해하는 것과 이 방법으로 이미지를 여는 것에 대해서는 너무 걱정하지 마세요
오픈 CV로 가면 이 두 줄의 코드는 더 이상 쓰지 않을 거니까요
대신 오픈 CV의 특별한 함수를 사용할 겁니다
하지만 여러분이 JPEG에서 넘파이 배열로 직접 변환할 수 있도록 이걸 보여드리고 싶었습니다
그리고 마지막으로, 여러분이 여기서 이해해야 할 건 컬러 이미지들은
빨간색, 초록색, 파란색의 세 가지 채널로 변환될 수 있다는 것입니다
조금 더 나아가서는 빨간색, 초록색, 파란색 색상 너머의
다른 색상에 대해 이야기하겠습니다
다음번에는 오픈 CV, 오픈 컴퓨터 비전 라이브러리에 대해 이야기하겠습니다
'딥러닝' 카테고리의 다른 글
8강-OpenCV와 함께하는 이미지 기초-노트북에서 이미지 파일 열기 (0) | 2023.06.25 |
---|---|
7강-OpenCV와 함께하는 이미지 기초-이미지 및 OpenCV 기본 소개 (0) | 2023.06.24 |
5강 NumPy 및 image basics - 이미지와 NumPy (1) | 2023.06.18 |
4강 NumPy 및 image basics - 이미지란? (1) | 2023.06.17 |
3강 NumPy 및 image basics - NumPy 배열 (0) | 2023.06.17 |