- ベストアンサー
アフィン変換と領域分割の方法について
- 大きな画像を小さな画像に領域分割してアフィン変換による拡大・回転処理を行いたいと考えています。
- しかし、2倍の拡大処理を行う際にマッピングされない箇所ができてしまう問題があります。
- 大きな画像を小さな画像に分割してアフィン変換を行うことは可能なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
※すみません。Web上では、複数の半角空白は1個の空白に置き換えられてしまうので、メモ帳にコピーしても駄目なようです。全角空白に置き換えた内容を再度投稿します。 アフィン変換やCGに詳しい者ではありませんが、誤りは指摘できると思います。 画素(■)を座標点上にある点と捉えるモデルで分割拡大すると、隙間(・)が生じます。 0 1 2 3 0 1 2 3 4 5 6 0■━■│■━■ 0■━■━■ ・ ■━■━■ ┃ ┃│┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ 1■━■│■━■ 1■━■━■ ・ ■━■━■ ───┼─── ─拡大→ ┃ ┃ ┃ ┃ ┃ ┃ 2■━■│■━■ 2■━■━■ ・ ■━■━■ ┃ ┃│┃ ┃ 3■━■│■━■ 3・ ・ ・ ・ ・ ・ ・ 4■━■━■ ・ ■━■━■ ┃ ┃ ┃ ┃ ┃ ┃ 5■━■━■ ・ ■━■━■ ┃ ┃ ┃ ┃ ┃ ┃ 6■━■━■ ・ ■━■━■ 画素(■)を座標点に囲まれた面と捉えるモデルなら、隙間は生じません。 0 1 2 3 4 0 1 2 3 4 5 6 7 8 0┏━┳━│━┳━┓ 0┏━┳━┳━┳━│━┳━┳━┳━┓ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 1┣━╋━│━╋━┫ 1┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 2────┼──── ─拡大→ 2┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 3┣━╋━│━╋━┫ 3┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ ┗━┻━│━┻━┛ 4────────┼──────── ┃■┃■┃■┃■│■┃■┃■┃■┃ 5┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 6┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 7┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 8┗━┻━┻━┻━│━┻━┻━┻━┛ 「回答への補足」で、『画像Aの左下の頂点を(x,y)=(1,1)とし、画像Bの左上の頂点を(x,y)=(1,2)とします』という記述がありますが、そもそもこの2つの座標が、同じにならないといけないのです。
その他の回答 (2)
- tatsu-o
- ベストアンサー率100% (1/1)
アフィン変換やCGに詳しい者ではありませんが、誤りは指摘できると思います。※下の図は、メモ帳等にコピーしてご覧ください。 画素(■)を座標点上にある点と捉えるモデルで分割拡大すると、隙間(・)が生じます。 0 1 2 3 0 1 2 3 4 5 6 0 ■━■│■━■ 0 ■━■━■ ・ ■━■━■ ┃ ┃│┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ 1 ■━■│■━■ 1 ■━■━■ ・ ■━■━■ ───┼─── ─拡大→ ┃ ┃ ┃ ┃ ┃ ┃ 2 ■━■│■━■ 2 ■━■━■ ・ ■━■━■ ┃ ┃│┃ ┃ 3 ■━■│■━■ 3 ・ ・ ・ ・ ・ ・ ・ 4 ■━■━■ ・ ■━■━■ ┃ ┃ ┃ ┃ ┃ ┃ 5 ■━■━■ ・ ■━■━■ ┃ ┃ ┃ ┃ ┃ ┃ 6 ■━■━■ ・ ■━■━■ 画素(■)を座標点に囲まれた面と捉えるモデルなら、隙間は生じません。 0 1 2 3 4 0 1 2 3 4 5 6 7 8 0 ┏━┳━│━┳━┓ 0 ┏━┳━┳━┳━│━┳━┳━┳━┓ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 1 ┣━╋━│━╋━┫ 1 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 2 ────┼──── ─拡大→ 2 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ 3 ┣━╋━│━╋━┫ 3 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■│■┃■┃ ┃■┃■┃■┃■│■┃■┃■┃■┃ ┗━┻━│━┻━┛ 4 ────────┼──────── ┃■┃■┃■┃■│■┃■┃■┃■┃ 5 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 6 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 7 ┣━╋━╋━╋━│━╋━╋━╋━┫ ┃■┃■┃■┃■│■┃■┃■┃■┃ 8 ┗━┻━┻━┻━│━┻━┻━┻━┛ 「回答への補足」で、『画像Aの左下の頂点を(x,y)=(1,1)とし、画像Bの左上の頂点を(x,y)=(1,2)とします』という記述がありますが、そもそもこの2つの座標が、同じにならないといけないのです。
- rabbit_cat
- ベストアンサー率40% (829/2062)
質問がよくわからないので、もう少し文章を整理してください。 >2倍の拡大処理を行う場合、出力画像から入力画像の座標位置を算出しないとマッピングされない画素ができてしまう為、画像Aをアフィン変換する際に入力画像の4頂点よりアフィン変換で出力画像の4頂点を算出してその算出点より逆変換を開始してしまうと、画像Aと画像Bとの間にマッピングされない箇所ができてしまうと考えております。 Aの頂点の座標をアフィン変換したあと、それを逆変換すれば、(計算誤差を無視すれば)、元のAの頂点の座標に戻るだけでは?当然、となりの画像Bとの間に隙間ができることはないですけど。
お礼
画素を座標に囲まれる面としてとられる事で 隙間がなくなるという事で理解致しました。 ありがとうございました。
補足
画像Aと画像Bの関係は上下の関係になるのですが 画像Aの左下の頂点を(x,y)=(1,1)とし、画像Bの左上の頂点を(x,y)=(1,2)とします。 ※下方向をy軸の+方向、右方向をx軸の+方向と考えます。 画像Aの左下頂点(1,1)は2倍しますと(2,2)、画像Bの左上頂点(1,2)は2倍しますと(2,4)となります。つまり(2,3)にはマッピングされない事になり、画像Bの逆変換を(2,4)座標から開始すると(2,3)に抜けができてしまいます。 これは入力画像から出力画像の頂点をアフィン変換で算出している為に起こると考えています。(前方マッピングの為) 画像Bの逆変換開始位置を(2,3)からできればいいのですが、これを入力画像の頂点からアフィン変換で求める事は難しいと考えていたのですが、いかがでしょうか?
お礼
座標=画素と考えていました。 画素を座標点に囲まれる面として考えるという事ですね。 ご回答ありがとうございました。
補足
お礼をつけてから、疑問がでてきたのですが 出力画像の(x,y)=(0,3)、(0,4)、(1,3)、(1,4)に囲まれた出力画素を入力画素から求める場合、逆変換を使用して求めると思うのですが、画素=座標点でない場合どのようにして求めるのでしょうか? イメージができなくて悩んでおります。 お礼をつけてからの疑問で失礼いたします。