Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

:)

크기변환과 보간법 본문

컴퓨터비전

크기변환과 보간법

mihee 2022. 3. 22. 15:02

2X3행렬(affine transformation matrix)

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);
        }
    }

    // 순방향 매핑 --> 영상 확대 시 빈 공간이 발생

순방향 매핑  -> dst 영상에 빈공간이 생김.

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