영상 처리란 사진이나 동영상을 다루는 기술로, 여러 가지 방식이 존재한다. 그 중에서도 픽셀 기반 처리, 영역 기반 처리, 기하학적 처리 등이 있다. 특히 영역 기반 처리는 회선(convolution) 기법을 사용하여 영상 흐리게 하기, 선명화, 경계선 검출, 잡음제거, 컬러 영상 처리 등을 수행할 수 있게 해준다.
이번 포스터에서는 이러한 영역 기반 처리의 핵심 개념인 회선이 무엇인지 자세히 설명하고, 영상의 경계 처리 방법에 대해서도 알아보도록 하다.
1. 회선(convolution)
회선(convolution)은 영역 기반 처리에서 매우 중요한 개념으로, 입력 픽셀과 그 주변 픽셀들을 함께 고려하여 출력 픽셀 값을 결정하는 방법이다. 이 기법은 이미지의 다양한 특징을 추출하고 필터링하는 데 매우 효과적이며, 에지 검출, 블러링, 샤프닝 등 다양한 작업에서 중요한 역할을 한다. 흥미롭게도, 회선 기법은 딥러닝에서도 널리 사용되며, 특히 CNN(Convolutional Neural Networks)에서 특징을 추출하고 성능을 향상시키는 데 기여한다.
출력 픽셀값
출력 픽셀값은 입력 픽셀과 그 주변 픽셀들의 값에 회선 마스크(convolution mask) 값을 곱한 후, 이 곱한 값들을 모두 더해 계산된다.
회선 마스크는 일정한 크기의 행렬로, 각 위치에 해당하는 픽셀 값과 마스크 값을 곱한 후 그 결과를 합산하여 최종적인 출력 픽셀 값을 결정한다. 이러한 과정은 이미지의 특정 특징을 추출하거나 변형하는 데 사용되며, 다양한 필터링 작업에 핵심적인 역할을 한다.
그 자세한 설명은 위 사진과 같이 표현할 수 있다.
2. 회선 수행 방법
회선 수행 방법은 간단하다. 좌측 상단의 픽셀부터 우측 방향으로 한 픽셀 씩 차례로 수행하는 방식으로 진행된다. 한 줄이 끝나면 아래 줄로 이동해서 계산하고 그뒤 이를 반복해서 계산하면 된다.
3. 회선 마스크의 특성
회선을 사용할 때는 회선 마스크(또는 커널)가 사용된다. 마스크는 아무렇게나 설정되는 것이 아니라, 특정한 규칙을 따른다.
홀수 크기 사용: 회선 마스크의 크기는 일반적으로 홀수를 사용해야 한다. 이는 중심 픽셀을 기준으로 주위 픽셀 값을 대칭적으로 고려하기 위해서다. 짝수 크기의 마스크는 중심을 명확히 정의할 수 없어 대칭적인 연산이 어려워진다.
이 말이 이해가 가지 않는다면 다음의 표를 보고 생각을 해보자.
0 | 0 | 0 | ||
0 | 0 | 0 | ||
0 | 0 | 0 | ||
0 | 0 | |||
0 | 0 | |||
두 개의 표를 보았을 때 중심을 명확히 알 수 없어, 대칭적인 연산이 불가능한 것이 보인다.
계수의 합이 1: 대부분의 회선 마스크는 계수의 합이 1이 되도록 설계되어야 한다. 이를 어기면 영상의 평균 밝기가 변하게 되어 영상 처리의 목적이 사라질 수 있다.
- 계수 합이 1일 경우: 회선 마스크가 특정 부분에 적용될 때, 해당 부분의 밝기 값들이 변하지 않도록 설계된 것. 이 경우, 회선된 영상의 각 픽셀 값은 원본 영상에서의 픽셀 값과 같은 범위를 유지한다.
- 계수 합이 1이 아닐 경우: 예를 들어 계수 합이 2라면, 각 픽셀의 값이 원본 값의 두 배로 증가하게 되어 영상 전체의 밝기가 더 밝아진다. 반대로, 계수 합이 0.5라면 영상이 더 어둡게 보인다.
따라서, 계수의 합을 1을 유지하는 것이 필요하다.
픽셀값이 음수가 되면 안됨: 경계선 검출 등의 특정 회선 마스크에서는 음수 계수를 포함하며, 계수의 합이 0이 되도록 설계된다. 이 경우, 이미지 처리 과정에서 음수 픽셀 값이 생성될 수 있으므로, 이를 조정하기 위해 최대 밝기의 절반과 같은 일정한 상수를 더해 결과 값을 조정한다.
이 규칙들은 필수적이지는 않지만, 영상 처리에서 지켜지지 않으면 품질에 문제가 생기므로 중요하다.
4. 영상의 경계처리
영상의 경계 처리는 필수적이다. 회선 마스크가 홀수인 경우, 경계 부분의 픽셀 처리 방법이 문제가 되기 때문이다. 이에 대한 설명이 이해가 가지 않는다면 다음 표를 살펴보자.
X(아무것도 없음) | X | X | X | X |
X | (1,1) | (1,2) | (1,3) | X |
X | (2,1) | (2,2) | (2,3) | X |
X | (3,1) | (3,2) | (3,3) | X |
X | X | X | X | X |
위 그림에서 X는 실제로 존재하지 않는 픽셀을 나타낸다.
우리가 필터링을 시작하고자 하는 좌표는 (1,1)이다. 하지만 필터 크기가 3x3과 같은 경우, 중앙 픽셀을 기준으로 필터링을 해야 하는데, 이 중앙값을 계산하려면 주변의 값도 필요하다. 경계 부분에는 픽셀이 존재하지 않기 때문에, 이 값을 어떻게 처리할 것인지가 문제가 된다. 단순히 없는 값을 무시할 수는 없기 때문에, 경계 처리는 마스크 연산을 정상적으로 수행하기 위해 매우 중요한 과정이다.
경계 처리 없이 계산을 진행하면 원하는 결과를 얻을 수 없으며, 이를 위해 적절한 경계 처리 방법이 필요하다. 이를 처리하기 위한 방법은 여러가지가 있다.
(1) 0 삽입
가장 많이 사용되는 방법으로, 값이 없는 경우를 0으로 가정하여 계산한다. 이 방법을 사용하면 어떤 값을 곱하더라도 결과는 0이 되므로 경계 처리가 간단해진다.
(2) 주위 픽셀 값이 모두 존재하는 위치에서 회선 적용
이 방법은 (1,1)부터 시작하는 것이 아니라 (2,2)와 같이 모든 주위 픽셀 값이 존재하는 위치에서 시작하자는 의미다.
(3) 반대편 경계부분의 화소들을 복사
거의 사용되지 않는 방법으로, 경계 부분의 값을 반대편에 있는 값을 사용하여 계산하는 방법이다. 예로 들면 다음 그림처럼 설명할 수 있다.
X => (3,3) | X => 반대쪽에 있는(3,1)로 교체하여 계산 | X => (3,2) | X | X |
X => (1,3) | (1,1) | (1,2) | (1,3) | X |
X => (2,3) | (2,1) | (2,2) | (2,3) | X |
X | (3,1) | (3,2) | (3,3) | X |
X | X | X | X | X |
결국 처리하는 것은
X | X | X | X | X |
X | (1,1) | (1,2) | (1,3) | X |
X | (2,1) | (2,2) | (2,3) | X |
X | (3,1) | (3,2) | (3,3) | X |
X | X | X | X | X |
이런 방식으로 처리가 된다. 물론 이런 복사 방법 말고 다른 방법도 생각할 수 있다.
이제 영역 처리 기반에 기초를 배워보았다. 다음 포스터에서는 이에 대한 기초이론을 토대로 영상 흐리게 하기, 선명화, 경계선 검출, 잡음제거, 컬러 영상 처리에 대해서 자세히 이야기해보도록 하겠다.
'Computer Science(컴퓨터 과학) > 영상처리' 카테고리의 다른 글
영상처리 - 영역기반 처리3 (잡음 제거, 컬러영상에서 영역 기반 처리) (0) | 2024.10.10 |
---|---|
영상처리 - 영역기반 처리2 (영상 흐리게 하기, 선명화, 경계선 검출) (0) | 2024.10.10 |
영상처리 - 픽셀 기반 처리2 (이진화, 역상, 영상사이에 픽셀 기반 처리) (0) | 2024.10.09 |
영상처리 - 픽셀 기반 처리1 (산술 연산, 히스토그램 평활화, 명암대비 스트레칭) (2) | 2024.10.09 |
기본적인 영상처리 알고리즘의 분류 (0) | 2024.10.09 |