Upsampling과 DownSampling
- 영상 2배 확대
- 입력 영상의 픽셀을 출력 영상의 좌표가 짝수인 위치(파란색)에 복사
- 빈자리(흰색)는 어떻게 채울까?
- 영상 2배 확대 : 빈자리 채우기
- 주변 픽셀 단순 복사하여 채우기
- 영상 2배 확대 : 빈자리 채우기
- 주변 픽셀의 평균으로 채우기
- 영상 1/2배 축소
- (x, y) 좌표가 짝수인 위치 픽셀만 모아 ½로 줄임
- 2배 확대 실행 결과
- 1/2배 축소 실행 결과
샘플링과 스펙트럼
- Aliasing의 주파수 영역에서의 관찰
- 샘플링 : 아나로그신호를 이산신호(discrete-time signal)로 변경
- 이산신호의 스펙트럼
- 아나로그신호의 스펙트럼이 샘플링 주파수 간격으로 주기적 반복
- 최대 주파수(10)의 두배 이상으로 샘플링하는 경우 간섭(aliasing) X
- 최대 주파수(10) 미만으로 샘플링하는 경우 간섭 발생
- Aliasing의 주파수 영역에서의 관찰(downsampling)
- 영상 크기를 ½로 줄인다는 것은 샘플링 주파수를 ½배 줄인다는 의미
- Aliasing 발생을 방지 하는 방법 : LPF 필터링 후 downsampling
- Aliasing의 주파수 영역에서의 관찰(upsampling)
- 영상 크기를 2배 크게 한다는 것은 샘플링 주파수를 2배로 한다는 의미
쌍선형 보간
- 2의 승수 배 확대 및 축소가 아닌 경우
- (예) 아래 그림에서 100과 200사이에 있는 3개의 픽셀값을 직관적으로 채우자 → 0.25, 0.5, 0.75에 각각 125, 150, 175 → 100과 200을 직선으로 이어 이 직선상의 밝기값임 → 선형보간이라고 함
- 선형 보간(linear interpolation) : 1차원 신호 대상
- 보간(interpolation) 방법 : 거리에 반비례하도록 가중치 설정
- 쌍선형 보간(bi-linear interpolation) : 2차원 신호 대상
- 쌍선형 보간 함수를 이용한 영상 alpha배 확대
int BilinearInterpolation(double y, double x, int** image, int height, int width);
void main()
{
int height, width;
int** img = (int**)ReadImage("s_lena.png", &height, &width);
float alpha = 1.3;
int height_out = (int)(alpha * height);
int width_out = (int)(alpha * width);
int** img_out = (int**)IntAlloc2(height_out, width_out);
printf("\n img_out size : h = %d, w = %d", height_out, width_out);
for (int y = 0; y < height_out; y++) {
for (int x = 0; x < width_out; x++) {
img_out[y][x] = BilinearInterpolation(y / alpha, x / alpha, img, height, width);
}
}
ImageShow("입력영상보기", img, height, width);
ImageShow("출력영상보기", img_out, height_out, width_out);
}
- 쌍선형 보간 실행 결과 (alpha = 1.3)
'Theory > Image Processing' 카테고리의 다른 글
13 기하학적 변환 (22.11.25) (0) | 2023.06.22 |
---|---|
11 중간값 필터 (22.11.11) (0) | 2023.06.22 |
10 선명화 처리 (22.11.04) (0) | 2023.06.22 |
09 에지 검출 (라플라시안 & 기타 연산자) (22.10.28) (0) | 2023.06.21 |
08 에지 검출 (미분 연산자) (22.10.28) (0) | 2023.06.21 |
댓글