관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

영상 처리 6 - 연습문제 풀기 1 : 문제 1~3번 본문

인공지능/컴퓨터 비전

영상 처리 6 - 연습문제 풀기 1 : 문제 1~3번

huenuri 2024. 11. 9. 14:13

이제 3장을 마무리하는 연습문제를 풀어보려고 한다. 이번 장도 10문제나 되어 3번에 나누어서 문제를 풀어볼 것이다. 3장부터는 정말 어려워서 절반도 이해하지 못했지만 문제를 풀면서 고민하며 감이 좀 잡힐 것 같다.


 

 

 

 

연습문제 풀기

 

문제 1번

그림 3-5는 다양한 형태의 영상을 예시한다. 다음 영상이 차지하는 메모리 양을 바이트 단위로 제시하시오. (1)~(4)에서는 한 채널을 구성하는 화소 하나가 8비트(1바이트)로 표현된다고 가정한다.

(1) 512 x 512 컬러 영상

(2) 30초 분량의 256 x 256 컬러 동영상(30FPS를 가정)

(3) 256 x 256 x 128 CT 영상

(4) 512 x 512 크기의 8채널 다분광 영상

(5) 20,000개 점으로 구성된 점 구름 영상(한 점은 x, y, z는 각각 4바이트 실수로 표현)

 

 

가정

  • 화소 하나가 8비트(1바이트)로 표현된다고 가정
  • 실수(float)는 4바이트로 표현

 

 

1. 512 x 512 컬러 영상
컬러 영상은 RGB 3채널로 구성되므로, 각 화소는 3바이트이다.

512 × 512 × 3 = 786,432 바이트

 

2. 30초 분량의 256 x 256 컬러 동영상 (30FPS)
동영상은 30 FPS로 30초 동안 재생되며, 각 프레임은 256 x 256 해상도에 RGB 3채널로 구성된다.

256 × 256 × 3 × 30 × 30 = 176,947,200 바이트

 

3. 256 x 256 x 128 CT 영상
CT 영상은 256 x 256 해상도에 128개의 깊이 축을 가진 단일 채널 영상이다.

256 × 256 × 128 = 8,388,608 바이트

 

4. 512 x 512 크기의 8채널 다분광 영상
다분광 영상은 8개의 채널을 가지므로, 각 화소는 8바이트이다. 

512 × 512 × 8 = 2,097,152 바이트

 

5. 20,000개 점으로 구성된 점 구름 영상
한 점은 x,  y,  z 3차원 좌표를 가지며, 각 좌표는 4바이트 실수로 표현된다.

20,000 × 3 × 4 = 240,000 바이트


 

 

 

 

문제 2번

그림 3-13 a의 입력 영상에 대해 다음 구조 영상에 대해 다음 구조를 이용해 팽창한 영상과 침식한 영상을 제시하시오.

 

팽창과 침식은 이미지의 형태학적 변환의 기본 연산이다. 이 연산들은 일반적으로 이진 이미지에서 객체의 형태를 조정하는 데 사용되며, 구조 요소라는 작은 커널을 사용하여 이미지를 변환한다.

  • 팽창(Dilation)
    • 팽창은 객체의 경계를 확장한다. 구조 요소의 중심이 이미지 내의 픽셀 위에 위치할 때, 구조 요소 내에 하나라도 1이 포함되면 중심 픽셀 값을 1로 변경한다.
    • 즉, 객체의 크기를 늘리며, 잡음 제거나 객체의 구멍을 메우는 데 유용하다.
  • 침식(Erosion)
    • 침식은 객체의 경계를 축소한다. 구조 요소의 중심이 이미지 내의 픽셀 위에 위치할 때, 구조 요소 내의 모든 위치에 1이 포함되어야 중심 픽셀 값을 1로 유지한다. 그렇지 않으면 0으로 바뀐다.
    • 객체의 크기를 줄이며, 노이즈를 제거하거나 객체의 경계를 깔끔하게 만드는 데 사용된다.

 

문제 풀기

# 구조 요소
0 1 0
1 1 1
0 1 0

 

 

# 입력 이진 영상
0 0 0 0 0 0 0 0 0
0 0 1 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0
1 1 0 1 1 1 0 0 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1 1
1 1 0 1 0 0 0 1 1
0 1 1 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0

 

1은 객체를, 0은 배경을 나타낸다.

 

 

 

# 팽창하기
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0

 

구조 요소가 1인 위치의 주변 픽셀 값이 1로 변하게 된다. 이는 객체가 확장되어 더 넓은 영역을 차지하도록 만든다.

 

 

 

# 침식하기
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0
0 0 0 1 1 0 0 0 0
0 0 1 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

 

구조 요소의 형태대로 1이 포함되어 있는 영역만 남기고, 나머지를 0으로 바꾼다. 이를 통해 객체가 작아진다.


 

 

 

문제 3번

다음 5 x 5 영상에 대해 히스토그램 평활화를 수행하시오. 예시 3-4의 표와 그림 3-15를 제시하시오.

 

 

히스토그램 평활화는 이미지의 명암값 분포를 고르게 만들어 대비를 개선하는 기법이다. 5 x 5 영상에 대해 히스토그램 평활화를 수행하는 절차는 다음과 같다.

  1. 히스토그램 계산 : 주어진 5 x 5 영상에서 각 명암값(0~7)의 빈도를 계산하여 히스토그램을 만든다.
  2. 누적 히스토그램 계산 : 각 명암값에 대해 이전 명암값까지의 빈도를 누적하여 누적 히스토그램을 계산한다.
  3. 정규화된 누적 히스토그램 계산 : 누적 히스토그램 값을 전체 픽셀 수로 나눠 정규화된 값을 얻는다.
  4. 새로운 명암값 결정 : 정규화된 누적 히스토그램 값을 L-1(명암값의 최대 범위)을 곱해 새로운 명암값을 계산한다.
  5. 매핑 테이블 작성 : 원래 명암값을 새로 계산된 명암값으로 매핑하는 테이블을 작성한다.
  6. 평활화 적용 : 이 매핑 테이블을 사용하여 주어진 영상을 변환하여 평활화된 결과를 얻는다.

 

 

 

 

문제 풀기

주어진 5x5 영상에 대해 히스토그램 평활화를 수행해 보겠다.

 

1. 입력 영상

0 0 1 1 3
2 3 3 3 3
3 3 4 4 4
4 3 4 5 7
4 4 4 5 7

 

 

2. 히스토그램 계산

각 명암값의 빈도수를 계산하여 히스토그램을 만든다.

명암값빈도 (h) 빈도(h)
0 2
1 2
2 1
3 7
4 6
5 2
7 2

 

빈도는 명암값의 개수를 세면 된다.

 

3. 누적 히스토그램 (정규화 누적 히스토그램)

빈도를 누적하여 누적 히스토그램을 계산한 후, 각 누적 값을 전체 픽셀 수 (25)로 나누어 정규화한다.

명암값 빈도 (h) 누적 히스토그램 (H) 정규화 누적 히스토그램( h^)
0 2 2 0.08
1 2 4 0.16
2 1 5 0.20
3 7 12 0.48
4 6 18 0.72
5 2 20 0.80
7 2 25 1.00

 

 

4. 새로운 명암값 계산 (L−1을 곱해 새 명암값을 결정)

정규화 누적 히스토그램에 L − 1 = 7을 곱하여 새로운 명암값 I'을 계산한다.

명암값 h^ h^ x 7 새 명암값  (반올림)
0 0.08 0.56 1
1 0.16 1.12 2
2 0.20 1.4 2
3 0.48 3.36 3
4 0.72 5.04 5
5 0.80 5.6 6
7 1.00 7.0 7

 

5. 변환 테이블

원래 명암값을 새 명암값으로 매핑한다.

원래 명암값  새 명암값
0 1
1 2
2 2
3 3
4 5
5 6
7 7

 

6. 변환된 영상

주어진 영상의 각 픽셀 값을 새 명암값으로 치환하여 변환된 영상을 얻는다.

1 1 2 2 3
2 3 3 3 3
3 3 5 5 5
5 3 5 6 7
5 5 5 6 7

 

이게 바로 문제의 답이다.

 


 

 

학습을 마치고

문제가 많이 어려워서 푸는데 한참의 시간이 걸렸다. 2번은 조금 헷갈리기는 했어도 그래도 어느 정도 이해했다. 공부할 때는 하나도 이해하지 못했던 부분인데 문제를 풀며 더 잘 알게 되었다.

하지만 오늘은 공부에 집중이 잘 되지 않는다.