回答編集履歴
3
誤記修正
test
CHANGED
@@ -10,9 +10,9 @@
|
|
10
10
|
のとき,入力 `(x,y)` に対する出力 `(x',y')` が
|
11
11
|
```
|
12
12
|
x' = a*x + b*y + c
|
13
|
-
y' = d*x + e*y +
|
13
|
+
y' = d*x + e*y + f
|
14
14
|
```
|
15
|
-
となる,という話なのですから,`c` と `
|
15
|
+
となる,という話なのですから,`c` と `f` は単純な並進量なわけですよね.
|
16
16
|
|
17
17
|
---
|
18
18
|
|
2
微修正
test
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
並進変換と回転変換を1つのアフィン変換に合成したい,という話かと見えますので,
|
2
2
|
`getRotationMatrix2D` で得た行列内の並進に対応する要素(一番右の列)に適切な値を加算してやればよいのではないでしょうか.
|
3
3
|
|
4
|
-
「何故そこに加算すれば良いのか?」については行列の使われ方(OpenCVのマニュアルで確認されたし)的に自明と
|
4
|
+
「何故そこに加算すれば良いのか?」については行列の使われ方(OpenCVのマニュアルで確認されたし)的に自明かと思います.
|
5
|
+
(マニュアルとは異なる記号で書きますが)与える 2x3 行列が
|
6
|
+
```
|
7
|
+
a b c
|
8
|
+
d e f
|
9
|
+
```
|
10
|
+
のとき,入力 `(x,y)` に対する出力 `(x',y')` が
|
11
|
+
```
|
12
|
+
x' = a*x + b*y + c
|
13
|
+
y' = d*x + e*y + d
|
14
|
+
```
|
15
|
+
となる,という話なのですから,`c` と `d` は単純な並進量なわけですよね.
|
16
|
+
|
17
|
+
---
|
18
|
+
|
19
|
+
行列の積による「合成」として考えるならば以下のようになると思います:
|
5
20
|
|
6
21
|
`warpAffine` に与える行列のサイズは 縦2x横3 となっていますが,同次座標で 3x3 だと考えてやれば行列の積で合成を考えられます.
|
7
22
|
具体的には `getRotationMatrix2D` で得られた 2x3 行列に3行目 (`0 0 1`)を追加して
|
1
微修正
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
「何故そこに加算すれば良いのか?」については行列の使われ方(OpenCVのマニュアルで確認されたし)的に自明とも思えますが,行列の積による「合成」として考えるならば以下のようになると思います:
|
5
5
|
|
6
6
|
`warpAffine` に与える行列のサイズは 縦2x横3 となっていますが,同次座標で 3x3 だと考えてやれば行列の積で合成を考えられます.
|
7
|
-
具体的には `getRotationMatrix2D` で得られた 2x3 行列に3行目を追加して
|
7
|
+
具体的には `getRotationMatrix2D` で得られた 2x3 行列に3行目 (`0 0 1`)を追加して
|
8
8
|
```
|
9
9
|
a b c
|
10
10
|
d e f
|
@@ -22,4 +22,4 @@
|
|
22
22
|
d e f+ty
|
23
23
|
0 0 1
|
24
24
|
```
|
25
|
-
であり,元々の 2x3 行列の一番右側の列に並進量を加算したものになる,と.
|
25
|
+
であり,元々の 2x3 行列の一番右側の列に並進量 `(tx, ty)` を加算したものになる,と.
|