:)
크기변환과 보간법 본문
Mat dst = Mat::zeros(src.rows * 2, src.cols * 2, CV_8UC1);
for (int y = 0; y < src.rows; y++) {
for (int x = 0; x < src.cols; x++) {
int x_ = 2 * x;
int y_ = 2 * y;
dst.at<uchar>(y_, x_) = src.at<uchar>(y, x);
}
}
// 순방향 매핑 --> 영상 확대 시 빈 공간이 발생
Mat dst = Mat::zeros(src.rows * 2, src.cols * 2, src.type());
for (int y_ = 0; y_ < dst.rows; y_++) {
for (int x_ = 0; x_ < dst.cols; x_++) {
int x = x_ / 2;
int y = y_ / 2;
dst.at<uchar>(y_, x_) = src.at<uchar>(y, x);
}
}
최근방 이웃 보간법
- 가장 가까운 위치에 있는 픽셀의 값을 참조하는 방법 ex) int x_ = x / 2;
- 빠르고 구현하기 쉽지만 계단 현상이 나타남(블록 현상
양선형 보간법
- 실수 좌표를 둘러싸고 있는 네 개의 픽셀 값에 가중치를 곱한 값들의 선형 합으로 결과 영상의 픽셀 값을 구하는 방법
- 최근방 이웃 보간법에 비해 느리지만 비교적 빠르며 계단 현상 감소
각 행에서 같은 x 좌표 픽셀 값을 추정 -> 네개의 픽셀값을 이용해 처음 픽셀값을 예측
resize() 함수 사용하기
void resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
- dsize : 결과 영상의 크기. Size()로 지정하면 fx,fy에 의해 자동 결정
- fx,fy : x와 y방향 스케일 비율.
- interpolation : 보간법 지정 상수
- INTER_NEAREST : 최근방 이웃 보간법
- INTER_LINEAR : 양선형 보간법 (2X2 이웃 픽셀 참조)
- INTER_CUBIC : 3차회선 보간법 (4X4 이웃 픽셀 참조)
- INTER_LANCZOS4 : Lanczos 보간법(8X8)
- INTER_AREA : 영상 축소 시 효과적
영상의 축소 시 고려할 사항
- 한 픽셀로 구성된 선분들은 영상을 축소할 때 사라지는 경우가 발생
- 입력 영상을 부드럽게 필터링한(blur) 후 축소하거나 다단계 축소 권장
- OpenCV의 rezie() 함수에서는 INTER_AREA 플래그를 사용
'컴퓨터비전' 카테고리의 다른 글
어파인 변환과 투시 변환 (0) | 2022.03.22 |
---|---|
회전 변환과 기하학적 변환의 조합 (0) | 2022.03.22 |
이동 변환과 전단 변환 (0) | 2022.03.22 |
영상처리_필터링 (0) | 2022.03.21 |
OpenCV 함수 (0) | 2022.03.20 |
Comments