回答編集履歴

3

誤記修正

2024/05/14 01:32

投稿

fana
fana

スコア11894

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 + d
13
+ y' = d*x + e*y + f
14
14
  ```
15
- となる,という話なのですから,`c` と `d` は単純な並進量なわけですよね.
15
+ となる,という話なのですから,`c` と `f` は単純な並進量なわけですよね.
16
16
 
17
17
  ---
18
18
 

2

微修正

2024/05/14 01:31

投稿

fana
fana

スコア11894

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

微修正

2024/05/14 01:24

投稿

fana
fana

スコア11894

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)` を加算したものになる,と.