문제

나을 수행하기 위해 노력하고 왜곡 이미지처럼,하나는 여기에 표시된


(출처: microsoft.com)
.

나의 배열이 있는 픽셀을 나타내는 나의 이미지와르의 것 그들과 함께 할 수 있습니다.

도움이 되었습니까?

해결책

훨씬 더 좋은 방법 이해 역 매핑을 사용합니다.

기본적으로,당신은"warp"이미지,오른쪽?을 의미하는 모든 픽셀 소스 이미지가 미리 정의된 지점-predefinition 변환 매트릭스하는 방법을 알려주는 회전,규모,번역,전단,etc.이미지하는 기본적으로 일부 좌표 (x,y) 에서 당신의 이미지와는 말,"Ok,새로운 위치한 이 픽셀 (f(x),g(y)).

그것이 근본적으로"warping"는 않습니다.

이제에 대한 생각,스케일 이미지...말 열 번 크기입니다.그래서 그 의미,픽셀에서 (1,1) 가 픽셀에서 (10,10) -하고 다음 픽셀, (1,2) 가 픽셀 (10,20) 에 새로운 이미지입니다.하지만 경우에 당신이 일을 계속,당신은 값이 없는 한 픽셀, (13,13) 기 때문에, (1.3,1.3) 에 정의되어 있지 않은 너의 원래 이미지하고 당신은 무리가 있의 구멍에 새로운 이미지-당신이해야 할 것이 보간을 위한 이 값을 사용하여 네 개의 픽셀이 주위에 새로운 이미지,즉 (10,10) , (10,20), (20,10), (200,2) -이 선형 보간.

하지만 여기는 또 다른 문제,가정의 변화지 않은 간단한 스케일링 및 affine(처럼 샘플 이미지를 게시)-다음 (1,1) 가 될 것 같은 뭔가 (2.34,4.21) 다음 당신은 라운드에서 그들을 출력 이미지 (2,4)다음 당신이해야 할 선형 보간에 새로운 이미지를 채우기에 구멍이나 더 복잡한 보간법-지저분하지?

지금,거기에 방법이 없 을 얻을 보간법,그러나 우리는 멀리 얻을 수 있습니다 하는 선형 보간,그냥 .방법?간단한 역 매핑을 사용합니다.

대신 그것을 보는 원본 이미지가 새로운 이미지,생각 의 데이터에 대한 새로운 이미지에서 올 것이 소스 이미지!그래서, (1,1) 에 새로운 이미지에서 올 것이 몇 가지 반전 매핑에서는 원본 이미지,말 (3.4, 2.1) 다음 선형 보간에 소스 이미지의 그 밖으로 해당 값!

변환 매트릭스

그래,그래서 당신은 어떻게 정의 변화 행렬에 대한 affine transformation? 이 웹사이트 하는 방법을 알려줍니다 그것에 의해 합성 다른 변화 행렬에 대한 회전,shearing,etc.

변환:

alt text

합성:

alt text

최종 매트릭스에 의해 달성될 수 있습 합성 각 매트릭스에서 당신 반전 그것을 얻을 역 맵핑을 사용이 계산의 위치에 있는 픽셀 소스 이미지 내삽.

다른 팁

바퀴를 재발행하고 싶지 않다면 OpenCV 라이브러리를 확인하십시오. 관점 변환을 포함하여 많은 유용한 이미지 처리 기능을 구현합니다. 확인하십시오 cvwarpperspective 이 작업을 아주 쉽게 달성하는 데 사용했습니다.

으로 주석에 의 KennyTM 신 affine 변환하는 선형 매핑을 곱하여 얻은 모든 픽셀에 의해 매트릭스 M 추가하는 결과를 벡터 번역 V.그것은 간단한 수학

end_pixel_position = M*start_pixel_position + V

M 은 소재의 변환과 같은 교체 또는 크기 조정과 V 벡터 번역하는 모든 지점의 이미지 추가하여 고정 계수하는 모든 픽셀.

예를 들어,당신은 이미지를 회전할 수 있습 회전 행렬로 정의된다:

    | cos(a) -sin(a) |
M = |                |
    | sin(a)  cos(a) |

a 은 각 당신이 회전하려는 귀하의 이미지합니다.

하는 동안 크기 조절을 사용합 매트릭스의 형태로 되어 있습니다.

    | s1   0 |
M = |        |
    | 0   s2 |

s1s2 은 확인 모두 축입니다.

번역을 위해 당신은 벡터 V:

    | t1 |
V = |    |
    | t2 |

는 추가 t1t2 픽셀 좌표입니다.

당신은 다음을 결합한 행렬에서 하나의 변화,예를 들어,당신은 하나 크기 조절,회전과 번역을 끝날 것을 다음과 같습니다.

| x2 |             | x1 |
|    | = M1 * M2 * |    | + T
| y2 |             | y1 |

위치:

  • x1y1 는 픽셀의 좌표를 적용하기 전에 변환,
  • x2y2 는 픽셀 후 변형,
  • M1M2 는 행렬이 사용을 위한 조정 및 교체(기억하십시오: 조성의 행렬은 commutative!일반적으로 M1 * M2 * Vect != M2 * M1 * Vect),
  • T 번역 벡터을 번역하는 데 사용됩니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top