Неаффинные преобразования изображений в .NET - PullRequest
7 голосов
/ 11 февраля 2009

Есть ли какие-либо классы, методы в библиотеке .NET или какие-либо алгоритмы в целом для выполнения не аффинных преобразований? (то есть преобразования, которые включают в себя не только вращение, масштабирование, перемещение и сдвиг)

например:.

alt text

alt text
(источник: last100.com )


Есть ли еще термин для неаффинного преобразования с?

Ответы [ 3 ]

9 голосов
/ 11 февраля 2009

Я не знаю, чтобы что-нибудь интегрированное в .Net позволяло вам делать неаффинные преобразования.

Полагаю, вы пытаетесь создать какое-то трехмерное наложение текстуры? Если это так, вам нужно однородное аффинное преобразование, которое недоступно в .Net. Я также не знаю ни одного интегрированного способа преобразования пикселей в .Net.

Тем не менее, решение, за которое проголосовали в настоящее время, может быть полезным для того, что вы пытаетесь сделать, просто имейте в виду, что оно не будет выполнять коррекцию перспективы из коробки.

Например:

alt text

Изображение слева было сгенерировано с использованием библиотеки искажений с одним квадром, предоставленной Нилом Н. Изображение справа сгенерировано с использованием одного квадратора (фактически, двух треугольников) в DirectX.

Это может не иметь никакого влияния на то, что вы пытаетесь сделать, но об этом нужно помнить, если вы хотите делать 3D-вещи, это будет выглядеть очень странно без правильного отображения перспективы.

8 голосов
/ 11 февраля 2009

Все примеры изображений, которые вы разместили, могут быть сделаны с четырехугольным искажением. Хотя я не могу с уверенностью сказать, что четырехкратное искажение охватит ВСЕ неаффинные преобразования.

Вот ссылка на не очень хорошую реализацию этого в C # ... это работает, но медленно. Поищите в Википедии множество различных оптимизаций, доступных для таких вычислений

http://www.vcskicks.com/image-distortion.html

-Neil

1 голос
/ 27 января 2010

Вы можете сделать это в wpf, используя элемент управления Viewport3d и матрицу неаффинного преобразования. Может быть интересно снова отобразить это в растровое изображение .... Что я "исправил", добавив невидимый элемент управления с тем же изображением, что и на моей текстурированной плоскости ... (Кроме того, мне пришлось работать над максимумом Проблемы с размером текстур из-за разбиения плоскости и обрезки изображений ...)

http://www.charlespetzold.com/blog/2007/08/060605.html

В моем случае я хотел обратного (трансформировать так, чтобы произвольные точки на деформированном уголке стали углами моего прямоугольного окна), а это инверсия матрицы, чтобы сделать обратное.

...