이미지 편집 프로그램을 통해 간단하게 이미지 수정이 가능한 이유
이미지 소프트웨어 패키지 파헤치기
이미지 프로세싱은 일상생활에 너무 깊이 뿌리박혀 있어서 사람들은 종종 이것이 지난 몇 십 년 동안 얼마나 빨리 발전했는지 잊는다. 오늘날 우리는 사진을 촬영한 다음 편집 기술이나 디지털 이미지 처리에 대한 전문지식 없이도 장치에서 이미지를 직접 회전시키거나, 자르거나, 다양한 필터를 적용할 수 있다. 사용자 인터페이스 뒤에서 이미지 소프트웨어 패키지에서 어떤 일이 일어나고 있는지와 최종 결과물 생성을 위해 이미지가 어떻게 수정되는지 소개한다.
우리는 이미지 소프트웨어 패키지 덕분에 사진을 촬영한 다음 편집 기술이나 디지털 이미지 처리에 대한 전문지식 없이도 장치에서 이미지를 직접 회전시키거나, 자르거나, 다양한 필터를 적용할 수 있다. 항공 매핑, 지능형 보안 혹은 의료 이미징과 같은 전문 수준의 이미지 처리의 경우에도 마찬가지이다.
라이센스와 오픈 소스 소프트웨어 패키지 모두 영상 데이터를 제공해 사용자가 전문 지식 없이도 단순히 정형화된 맵을 생성하거나, 장면의 결합된 합성 뷰를 생성하거나, X선 영상을 향상시킬 수 있게 다양한 기능을 제공한다. 사용자 인터페이스를 파고들어 이미지의 디지털 표현 방식을 탐색하고 이러한 소프트웨어 패키지에서 최종 이미지 결과물을 만들기 위해 수정되는 방법에 대해 소개하고자 한다.
이미지 조합 시스템
영상에서 특정 픽셀을 참조할 때 픽셀이 그리드에 정렬돼 있기 때문에 데카르트(Cartesian) 좌표계를 사용한다. 각 픽셀에는 위치를 설명하기 위해 (x,y) 좌표가 제공된다.
그러나 대부분의 경우 원점(0,0)은 영상 왼쪽 아래에 있지 않다. 영상 프로세싱의 일반적인 규칙은 양수 값을 x로 증가시키고 y는 위쪽에서 아래쪽으로 증가시켜 양의 값을 사용해 영상의 왼쪽 상단 모서리를 원점으로 배치한다.
OpenGL과 같은 일부 예외가 있지만 OpenCV를 포함한 대부분의 이미지 처리 소프트웨어는 왼쪽 상단 모서리를 원점으로 사용하는 관례를 따른다.
이 약속은 CRT 모니터로 거슬러 올라가며 화면상에서 전자 빔을 왼쪽에서 오른쪽으로, 위에서 아래로 쓸어내고 영상이 종종 처리 매트릭스로 저장되기 때문에 데카르트 좌표계가 이 데이터 구조의 인덱싱 규칙에 더 적합하다.
이미지와 매트릭스
- 좌표 vs. 지수
가장 초기 형태에서 이미지는 센서 분해능과 동일한 크기의 매트릭스(혹은 배열)로 저장됐다. 예를 들어, 12메가픽셀 이미지는 4000개의 픽셀 너비만큼 큰 3000개의 픽셀 매트릭스에 저장된다. 매트릭스의 치수를 지정할 때 높이(y 한도)가 먼저 지정되고 그 다음에 너비(x 한도)가 지정된다. 각 요소는 비트 깊이에 따라 특정 픽셀 값을 보고한다. 설명을 위해 ‘A’ 라고 불리는 3×4 매트릭스를 소개한다. 비트 깊이가 8 비트인 12메가픽셀 이미지를 나타내는데 사용됐다.
매트릭스 A를 이미지로 나타내면 다음과 같다.
위에 설명된 데카르트 좌표계를 사용하면 픽셀 (0,0)는 65의 값을 가지고, 픽셀 (3,2) 는 33의 값을 갖는다. 매트릭스 지수를 사용하면 값이 65인 픽셀은 요소 A(1,1)에 포함되고, 값이 33인 픽셀은 요소 A(3,4)에 포함되고, 값이 207인 픽셀은 요소 A(2,4)에 포함된다.
따라서 데카르트 좌표에서 매트릭스 지수로 전환하려면, 데카르트 좌표를 각각 1씩 증가시키고 뒤집어야한다: (x,y)= A(y+1,x+1)
매트릭스 조작
RAW 이미지를 처리한 후, 매트릭스 곱셈을 사용해 이미지 조작의 기본 사항을 이해하는 것이 중요하다. 점 곱(dot product), 합성 곱(convolutional product), 아다마르 곱(Hadamard product) 등 매트릭스를 곱하는 방법을 다양하다. 간단한 회전과 변환에서 보다 복잡한 호모그래피(homography) 변환으로의 이미지 변환은 점 곱 방식을 사용한다. 합성 곱은 이미지를 필터링해 선명하거나, 흐릿하거나, 가장가리 감지 등의 작업을 수행할 때 사용된다. 아다마르 곱은 두 번째 매트릭스에서 각 요소와 일치하는 지수 요소로 곱하기 위해 동일한 크기의 매트릭스 두개가 필요하다. 이 요소별 운영 개념은 NDVI와 같은 식물성 지수를 계산할 때 사용된다.
- 이미지 변환
이미지 변환은 이미지에 포함된 데이터를 크게 변경하지 않고 영상을 이동한다. 조작은 픽셀 자체와 반대로 픽셀의 좌표에 대해 수행된다. 변환 매트릭스와 이미지의 각 (x,y) 좌표 사이의 점 제품은 기존 픽셀이 매핑된 새로운 좌표 세트를 생성한다. 특정 변환에서 정수 이외의 자표가 생성되므로 원본의 평균 픽셀 값의 일부 형식을 대상 좌표에 매핑해야 한다. 다음은 간단한 이미지 변환 매트릭스의 몇 가지 예시이다.
이와 유사한 표기법은 아래와 같이 3×3 매트릭스를 사용하는 것이다. 이미지 좌표에 ‘1’ 을 추가하면 이미지 자체에 영향을 주지 않지만 변환 성분을 변환 매트릭스에 추가할 수 있다.
이러한 개별 매트릭스를 결합해 단일 변환 매트릭스를 형성하며 모든 이미지 변환을 동시에 적용할 수 있다. 매트릭스는 점 곱 방식을 사용해 서로 곱한다. 아래는 회전, 그 다음이 스케일링, 그 다음은 변환의 예시이다.
이 매트릭스 형식은 처음에는 약간 힘들 수 있지만 일단 계산하면 모든 용어는 숫자로 축소된다. 예를 들어, 영상을 60도 회전하고, 원래 크기의 50 퍼센트로 축소되고, 8픽셀은 아래로, 7픽셀은 오른쪽으로 이동하길 원하는 경우, 변환 매트릭스는 다음과 같이 계산된다.
변환 매트릭스는 이미지 프로세싱의 뒤에서 사용된다. 윈도우의 그림판, 어도비(Adobe)의 포토샵과 같은 일반적인 애플리케이션부터 OpenCV 또는 Pix4D와 같은 전문 사진 측량 소프트웨어에 이르기까지 변환 매트릭스는 단순하고 복잡한 변환에 모두 사용된다.
이미지 공정합(coregistration)은 복잡한 변환 매트릭스의 주요 예시이다. 현재 서로 다른 두 카메라에서 동시에 캡처한 두 이미지를 촬영 후 변환 매트릭스를 결정해 각 이미지에 동일한 좌표를 가진 픽셀이 지면의 동일한 지점을 가리키도록 하는 방법이 있다. 공정합은 공중 지도 시스템 혹은 지상의 지능형 보안 시스템에서 캡처한 이미지를 정렬하는데 사용할 수 있다.
- 이미지 필터링
이미지 데이터 필터링은 매트릭스 합성 곱 방식을을 통해 이루어진다. 커널(kernel)이라고 하는 홀수 치수(3×3, 5×5, 7×7 등)의 제곱 매트릭스는 이미지 데이터 매트릭스를 통해 실행된다.
이 프로세스에는 이미지 매트릭스의 데이터를 사용해 커널 매트릭스를 요소별로 곱하는 작업이 포함된다. 각 곱셈의 결과는 합산된 다음 커널 매트릭스의 중심이 이미지 데이터 위에 차지하는 좌표에 저장된다. 기본적으로 각 픽셀에서 가장 가까운 인접 픽셀의 가중 합계이다. 커널 매트릭스의 몇 가지 예시는 다음과 같다.
좌표 vs. 지수 영역의 A(2,2) 요소에 모서리 탐지 매트릭스(녹색으로 강조됨)를 적용하면 다음과 같다.
A′(2,2)의 결과는 1314가 될 것이다. 8비트 이미지이므로 값이 255 혹은 흰색으로 캡처돼 가장자리가 있음을 나타낸다. 이는 노이즈라고 하는 랜덤 데이터이므로 이 상황에서 가장자리 탐지가 실용적이지 않다. 그러나 실제 이미지에 적용하면 매트릭스는 인접 픽셀 간의 값 차이를 강조해 가장자리를 나타낼 수 있다.
다음은 X선 이미지를 개선하는데 사용되는 세 가지 커널 매트릭스의 예시이다. 첫 번째 커널 매트릭스(a)은 평균값을 행하고(노이즈 제거에 돕기위해), 두 번째(b)는 가장자리 강조를 행하고, 세 번째(c)는 가장자리 감지를 행한다. 최상의 결과를 위해 이러한 필터는 연속적으로 사용된다.
- 이미지 계산
이미지 데이터에 대한 계산을 수행하는 것은 이미지를 단수 값(디지털 획득이라고 알려진) 으로 곱하는 것에서부터 이미지를 함께 더하기, 빼기, 곱하기 혹은 나누기와 같이 다양하다. 여기서 픽셀 단위로 작업이 수행되기 때문에 각 이미지의 동일한 좌표에 포함된 정보가 높은 상관관계를 공유하는 것이 중요하다. 따라서 두 대 이상의 카메라에서 이미지를 사용해 이미지 계산을 수행한다면 그 전에 이미지 상호 등록을 수행하는 것이 중요하다.
두 이미지를 매트릭스로 곱하면 아다마르 곱이라고 부르며 다음과 같이 완료된다.
특정 이미지 처리 소프트웨어에서 이러한 유형의 작업을 수행할 때, 저장된 비트 깊이보다 큰 값을 허용하는 이미지 또는 매트릭스 유형과 감산 데이터가 없는 경우 음수 가능성이 있는지 확인하는 것이 중요하다. 이는 농업 데이터 처리에 사용되는 식생지수를 만들기 위해 한 이미지를 다른 이미지에서 빼는 NDVI와 같은 중요한 작업이다.
OPENCV를 사용한 이미지 처리
OPENCV는 여러 애플리케이션 별 솔루션이 부분적으로 포함된 오픈 소스 이미지 처리 플랫폼이다. 사용자는 미리 정의된 기능을 사용해 이미지 변환, 필터링과 계산을 쉽게 구현할 수 있고 위에서 설명한대로 사용자 지정 이미지 조작을 직접 만들 수 있다. 루메네라(Lumenera) 카메라 인터페이스는 특히 윈도우(Windows), 리눅스(Linux), 에이알엠(ARM) 기반 내장 시스템을 위해 개발된 플랫폼별 소프트웨어 개발 키트(software development kit, SDK)를 사용해 OpenCV와 연결된다. 이미지를 OpenCV로 가져오면 이미지 처리가 매우 간단해진다.
플립(Flip)을 사용해 이미지를 미러링하거나 페이즈(phase)를 사용해 이미지를 회전하는 등 영상 변환을 수행하는 여러 가지 단일 행 명령이 있다. 사용자가 자신의 2×2 혹은 3×3 변환 매트릭스를 제공하는 OpenCV 기능뿐만 아니라 위의 이미지 변환 섹션에 설명된 방법을 사용해 보다 수학적인 접근 방식을 취할 수 있다.
필터링은 노이즈를 줄이기 위해 쌍방향 필터를 포함해 이미지 파일을 필터링하는 여러 기능과 가장자리 감지를 위해 라플라시안(Laplacian)을 포함하는 OpenCV에서도 마찬가지로 간단하다. 이미지 필터링은 이 문서의 범위를 벗어나는 더 많은 개념이 필요한 매우 복잡한 주제이다. 그럼에도 불구하고 이것은 이미지 필터를 사용하는 실험으로의 매우 훌륭한 경험이다.
마지막으로 표준 연산자(+ 와 -)를 사용하며 더하기와 빼기에 관한 경우에는 OpenCV에서 이미지 계산을 수행하는 것이 훨씬 더 간단하다. 나누기와 곱셈의 경우 나누기와 곱하기를 사용한다.
결론
영상이 RAW 형식으로 디지털 저장되면 각 요소가 픽셀의 강도 값을 나타내는 매트릭스에 저장된다.
이러한 매트릭스는 A(H,V) 형식으로 인덱싱된다. 여기서 H는 픽셀의 수평 위치이고 V는 수직 위치이다. 데카르트 좌표의 일반적인 원점 위치와 반대로, 이미지 파일의 원점은 이미지의 왼쪽 상단 모서리와 x축을 따라 왼쪽에서 오른쪽으로, 그리고 위에서 아래로 값이 증가된다. 이렇게 하면 데카르트의 이미지 원점이 매트릭스에 사용되는 인덱싱 방법과 일치하는지 확인할 수 있다.
낮은 수준에서 영상을 수정하면 매트릭스 자체 혹은 매트릭스의 구조 자체에 저장된 값에 대해 다양한 수정을 행하며 구성된다. 변환 매트릭스는 이미지 좌표를 재할당해 이미지의 일반 모양, 크기와 방향을 변경하는데 사용된다.
이러한 예시로, 간단하게 시계 방향으로 이미지를 회전하거나 두 이미지를 서로 결합하는 것이 있다. 홀수 치수의 제곱 매트릭스인 커널 매트릭스는 이미지를 필터링하기 위해 매트릭스와 함께 분해된다.
이것은 컴퓨터 비전 검사 애플리케이션에 대한 모서리 감지를 수행하는 방법이다. 마지막으로 동일한 크기의 매트릭스는 요소별 방식으로 더하기, 빼기, 곱하기, 나누기로 정밀 농업과 같은 특정 수학적 모델을 기반으로 데이터를 분석할 수 있다. 이러한 예로 Normalized Difference Vegetation Index(NDVI), Enhanced-NDI(ENDI), 그리고 Enhanced Vegetation Index(EVI)가 있미징을 포함한다.
출처 : Lumenera(www.lumenera.com)























