2009-12-06 4 views
2

수학 포럼이나 프로그래밍 포럼에 참여해야할지 모르겠으나 두 곳에서 게시하고 내가 어디에서 볼지 알아 보겠습니다.이미지 만 사용하여 2D 변형 행렬을 유도하려고 시도합니다.

두 개의 컴퓨터 이미지가 있습니다 ... 그 중 하나는 "원본"이미지 (큰 TIF 파일)입니다. 다른 하나는 원본 이미지의 변형 된 버전입니다 ... 소프트웨어 프로그램에서 회전, 전단 및 번역되었습니다. 변환 된 이미지에 대해 약간의 작업을 수행해야하지만 계산을 완료하려면 원본 이미지에서 각 픽셀의 (x-y) 좌표가 필요합니다.

3x3 변환 매트릭스를 사용하여 이미지가 회전되고 깎인 것을 알고 있습니다. 행렬이 있다면, 첫 번째 (또는 그 반대)에서 두 번째 이미지를 유도 할 수 있습니다. 정확히 회전, 전단 또는 변환 된 양을 정확히 알지 못하기 때문에 알려진 변형 집합에서 행렬을 파생시킬 수는 없습니다. 내가 가지고있는 것은 각 이미지에서 대응하는 점 (모서리 등)의 집합과 해당하는 (x, y) 좌표입니다. 그래서 여기 내 딜레마가 있습니다 :

변환 된 포인트 ((x, y) -> (x ', y')) 중 3 개 이상을 사용하여, 변환하는 데 사용 된 변환 매트릭스를 도출 할 수 있습니까? 하나의 이미지를 다른 이미지로 변환 하시겠습니까? 행렬을 도출 할 수 있다면 모든 픽셀의 원래 좌표 (1800 만 개 모두)를 풀고 계산을 완료해야합니다.

아무도 도와 줄 수 있습니까? 저는 선형 대수학에 익숙합니다. 머리를 긁지 않으면 이걸 파생시킬만큼 친숙하지 않습니다. 아무거나는 평가된다!

  • 마이크
+0

이 문제는 나를 미치게 해왔습니다. 제발 봐 [여기] (http://stackoverflow.com/questions/8959657/order-sequence-of-matrix-transformations-in-2d) 및 [여기] (http://stackoverflow.com/questions/8834070)/행렬 좌표 변환 순서). 당신의 대답을 단순한 프로그래밍으로 번역 할 수만 있다면. –

답변

3

원하는지 확실하지 않은 경우 수동 또는 ...

수동

당신이 당신의 사각형의 네 모서리의 변환 된 좌표를 지정하는 경우, 다음 도출 할 수있는 변환 방정식 :

alt text http://www.praeclarum.org/so/wellner.png

(피에르 Wellner의 Interacting with Paper on the DigitalDesk 및 자세한 내용에서 그의 Thesis에서)

이제 방정식의 계수를 풀면됩니다 . 4 포인트 쌍

네 개의 연립 방정식의 두 세트를 신속 C1-8의 값을 찾기 위해 가우스 소거법에 의해 해결 될 수있다.

마지막으로, 당신은 당신이 원하는 3 × 3 행렬로 그 방정식을 해제 할 수 있습니다. 위의 방정식은 비선형 변환을 수행 할 수있을만큼 강력하며 3x3 affine 전단 행렬로 단순화 할 수 있습니다.

그러나 비평 수식 (위)은 투영 왜곡을 처리 할 수 ​​있기 때문에 위의 방정식을 사용합니다.

자동

같은 방법,하지만 당신은 그 메이크업 사각형을 4 틱 라인의 집합을 찾기 위해 라인 감지 알고리즘 comboined 에지 검출기를 사용할 수 있습니다. 이미지 사각형 정말 (어두운 배경에 whiteish 이미지)에 띄는 경우

, 당신은 OpenCV's Feature Detection 같은 라이브러리 (cvCornerHarris 참조)에서 사용할 수 코너 감지를 사용할 수 있습니다.

네 선을 교차 시켜서 변환 방정식을 사용할 수 있습니다.

+0

나는 마이크가 그 자신을 위해 말하게해야한다. 그러나 나는 하나를 위해 나는 당신의 설명을 이해하는 데 절망적으로 부적합하다고 느낀다. 나는 우리 중 많은 사람들이 수학에 지나치게 친숙하다고 생각합니다. –

+0

오. Well Gaussian Elimination은 "Numerical Algorithms"와 같은 책에서 잘 설명되어 있습니다. 그러나 원근감 왜곡 (비선형 비 아핀 변환)을 처리 할 수 ​​있으므로 3x3 아핀 변환보다 훨씬 우수하다는 점을 강조하고 싶습니다. 관심이 있다면, 나는 나의 대답을 확장 할 수있다. –

+0

댓글 범위.나는이 정확한 방법을 생산 프로젝트에서 탁월한 효과를 내기 위해 사용했다고 덧붙이고 싶다. 내가 정의를 지키지 않았다면 사과드립니다.하지만 제 글귀 설명이 당신을이 강력한 기술에서 벗어나게하지 마십시오. 링크 된 자료를 읽으십시오. –

1

나는, 당신의 목록을 제공하여 시작해야한다고 생각 63 점 X와 (6 미지수)/Y 전과 변환 후 좌표를 말한다.

그러면 나는 누군가를 영리한 방정식 세트로 옮기고 나서 그것을 해결하기 위해 Wolfram Alpha에 피드해야합니다.

[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ] 
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ] 
[ 1 ] [ 0 0 1 ] [ 1 ] [   1   ] 

제거 보풀의 대부분이 잎 : 당신은 그냥 세트를 설정

다음
[ x'] [ m00x + m01y + m02 ] 
[ y'] = [ m10x + m11y + m12 ] 

AffineTransform에 대한 자바의 문서의 상단 행렬이 설정 될 필요가 방법을 보여줍니다 다음과 같은 6 x 2 방정식 :

m00x + m01y + m02 - x' = 0 
m10x + m11y + m12 - y' = 0 

(전에/afte r 쌍)

등식 수식에 던져 넣으십시오.

+0

이것은 c3 및 c7 용어를 간단하게 삭제할 때의 간단한 답변입니다. 그러나, 실제 선형 대수학 철자가 잘 작동합니다. 귀하의 "방정식 해결사"는 제 "가우스 제거"입니다. –

+0

고마워요! 나는 가까이 왔음을 기쁘게 생각합니다. 나는 30 년 전에 나의 마지막 GE를 한 것 같아. 그때부터 나는 프로그램이 그것을하게 해 주어 행복했습니다. Mike가 프로에 의해 돌보아 졌음을 보니 기쁘다. –

1

3x3 변환 행렬을 정의하는 데 3 포인트 만 있으면됩니다. 점 (0,0), (0,1) 및 (1,0)을 가지고 행렬 [abcdef 0 0 1]로 변환하면 (c, f), (b, e) 및 (a, d).

+0

오 ... 우리는 6 개의 미지수를 가지고 있습니다. 그러나 점들의 각 쌍에 대해 2 개의 방정식이 있습니다 ... 그래서 3 쌍은 6 개의 방정식을 줄 것입니다. 영리한! –

관련 문제