2017-10-08 2 views
0

私はどこかで(ちょっとしたことは覚えていないが)1つの行列(加算と乗算)を適用して画像のピクセルを回転させることができた。sinusとcosinusを使わない画像に回転を適用する

これは、洞および余弦関数なしで行われました。

私は私が夢を持っていたか、これは本当に可能な場合場合は、[はい...

おかげ

答えて

0

を思って、ノーいます。

アフィン変換(https://en.wikipedia.org/wiki/Affine_transformation)であるため、行列を含む回転を適用します。

しかし、回転の振幅が角度で指定されている場合、係数を評価するために三角関数を使用することは避けられません。

最後の発言:これは完全に無害です、なぜ心配ですか?

1

3x3変換マトリックスは、2Dグラフィックス作業の標準的な抽象化です。参照:https://en.m.wikipedia.org/wiki/Transformation_matrix。これがサインとコサインを避けるかどうかは、ある角度から始めると回転行列を構築するために三角関数を使うのが一般的です。

+0

(x',y') = (-y,x) 

か:sin,cosのない唯一の回転が90 degによって回転のですか?私が見つけたすべてのコードはopencvで動作するので、内部でどのように動作するかわかりません。ありがとう – Bob5421

0

グラフィックスでは、通常このような作業にhomogenuous transform matricesを使用しています。だから、ALGOは、このようなものです:

  1. は行列

    保持にあなたが望むすべての変換をトランスフォームを作成します。 2Dについては、3x3ホモ不純変換マトリックスまたは2x2ローテーションマトリックス(翻訳なし)です。

  2. プロセスすべての宛先ピクセル

    は、基本的には、ソースからデスティネーション画像にピクセルをコピーするが、ループは(丸め穴を避けるために)すべての宛先ピクセルをループしています。あなたは2×2を使用する場合、それは問題ではありません

    (x',y') = Matrix2x2 * (x,y) 
    

    または

    (x',y',w) = Matrix3x3 * (x,y,1) 
    

:だから

dst[y][x] = src[y'][x'] 

どこ...ループは(x,y)を通過するので、あなただけのピクセルをコピーしましょうまたは3x3行列またはハードコードされた乗算(例として)を参照してください。

ができますが、行列値(一回あたりの回転)のためsin,cosを使用する必要があります。あなたが手で行列演算を画像に適用んC++サンプルソースコードを持っていますか

(x',y') = (y,-x) 
関連する問題