영상의 크기 변환
크기 변환(scale transform)
영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환
x축과 y축 방향으로의 스케일 비율(scale factor)를 지정
{x′=sxxy′=syy
{sx=w′/wsy=h′/h
[x′y′]=[sx00sy00]⎣⎢⎡xy1⎦⎥⎤
가로, 세로 4배 확대
역방향 매핑(backward mapping)
보간법(interpolation)
실수 좌표 상에서의 픽셀 값을 결정하기 위해 주변 픽셀 값을 이용하여 값을 추정하는 방법
주요 보간법
- 최근방 이웃 보간법(nearest neighbor interpolation)
가장 가까운 위치에 있는 픽셀의 값을 참조하는 방법
빠르고 구현하기 쉬움
계단 현상 발생
- 양선형 보간법(bilinear interpolation)
실수 좌표를 둘러싸고 있는 네 개의 픽셀 값에 가중치를 곱한 값들의 선형 합으로 결과 영상의 픽셀 값을 구하는 방법
x=(1−p)a+pb
y=(1−p)c+pd
z=(1−q)x+qy=(1−p)(1−q)a+p(1−q)b+(1−p)qc+pqd
최근방 이웃 보간법에 대해서는 느린 편이지만 비교적 빠르며 계단 현상이 크게 감소
- 3차 보간법(cubic interpolation)
실수 좌표를 둘러싸고 있는 16개의 픽셀 값에 3차 함수를 이용한 가중치를 부여하여 결과 영상 픽셀의 값을 계산
- 스플라인 보간법(spline interpolation)
- 란쵸스 보간법(lanczos interpolation)
양선형 보간법
resize() 함수 사용
src : 입력 영상
dst : 출력 영상
dsize : 결과 영상 크기 (Size()로 지정 시 fx, fy 사용)
fx, fy : x와 y방향 scale factor (dsize 값이 0일 때 유효)
interpolation : 보간법 지정 상수
영상 축소 시 고려사항
- 한 픽셀로 구성된 선분들은 영상을 축소할 때 사라지는 경우 발생
- 입력 영상을 부드럽게 필터링한 후 축소하거나 다단계 축소 권장
- OpenCV의 resize() 함수에서는 INTER_AREA 플래그를 사용
| |
---|
INTER_NEAREST | 최근방 이웃 보간법 |
INTER_LINEAR | 양선형 보간법(2x2 이웃 픽셀 참조) |
INTER_CUBIC | 3차회선 보간법(4x4 이웃 픽셀 참조) |
INTER_LANCZOS4 | Lanczos 보간법(8x8 이웃 픽셀 참조) |
INTER_AREA | 영상 축소 시 효과적 |
void resize(InputArray src,
OutputArray dst,
Size dsize,
double fx = 0, double fy = 0,
int interpolation = INTER_LINEAR);