4

私が現在取り組んでいるアプリケーションには、Perspective Image Distortion の機能が必要です。基本的に私がやりたいことは、ユーザーがアプリケーションに画像をロードし、指定できる 4 つのコーナー ポイントに基づいてその透視図のプロパティを調整できるようにすることです。

ImageMagic を見てみました。遠近法による調整を伴う歪み機能がいくつかありますが、非常に遅く、特定の入力が正しくない出力を出していることがあります。

皆さんは他のライブラリやアルゴリズムを使用していました。C#でコーディングしています。

どんなポインタでも大歓迎です。

ありがとう

4

5 に答える 5

2

Paint .NETはこれを行うことができ、効果のカスタム実装もあります。ソース コードを要求するか、Reflector を使用してそれを読み、コーディング方法のアイデアを得ることができます。

于 2011-04-17T10:44:02.717 に答える
2

透視変換の場合は、四隅に一致する 4x4 変換マトリックスを指定できるはずです。

そのマトリックスを計算し、マトリックス上の結果の画像に各ピクセルを適用して、「マッピングされた」ピクセルを生成します。この「マッピングされた」ピクセルは、 2 つまたは 4 つのピクセルの間にある可能性が非常に高いことに注意してください。この場合、好みの補間アルゴリズム (バイリニア、バイキュービックなど) を使用して、補間された色を取得します。

これが実際に実行する唯一の方法であり、より速く実行することはできません. この機能が重要であり、絶対に高速である必要がある場合は、タスクを GPU にオフロードする必要があります。たとえば、DirectX ライブラリを呼び出して、テクスチャに透視変換を適用できます。DirectX ライブラリは SIMD 命令を使用して行列計算と色補間を高速化するため、GPU がない場合でも非常に高速になります。

于 2011-04-17T11:20:04.103 に答える
1

YLScsFreeTransform が期待どおりに動作しません。もっと良い解決策はImageMagicです

C# での使用方法は次のとおりです。

using(MagickImage image = new MagickImage("test.jpg"))
{
    image.Distort(DistortMethod.Perspective, new double[] { x0,y0, newX0,newY0, x1,y1,newX1,newY1, x2,y2,newX2,newY2, x3,y3,newX3,newY3 });
    control.Image = image.ToBitmap();
}
于 2015-04-03T04:23:26.687 に答える
1

同じ問題がありました。gimpからソースを移植したデモコードを次に示します。

于 2014-11-19T10:04:49.423 に答える