Умножение матриц для поворота изображения в C #

2

Мне нужно написать программу, которая использует умножение матрицы для поворота изображения (простого квадрата), основанного на центре квадрата, определенной степени, основанной на том, что мне нужно. Любая помощь по этому вопросу будет принята с благодарностью. Я почти не имею понятия, что я делаю, потому что я не сделал так много, как взглянуть на Исчисление.

  • 2
    На самом деле вам нужна линейная алгебра, а не исчисление;)
  • 0
    Ах спасибо;) 15чар
Теги:
matrix
rotation
multiplication
calculus

3 ответа

4
Лучший ответ

Посмотрите http://www.aforgenet.com/framework/. Это полная структура обработки изображений в С#, которую я использую в проекте. Я просто проверил их помощь, и у них есть функция, которая делает то, что вы хотите -

// create filter - rotate for 30 degrees keeping original image size
RotateBicubic filter = new RotateBicubic( 30, true );
// apply the filter
Bitmap newImage = filter.Apply( image );

Это библиотека LGPL, поэтому, если лицензирование является проблемой, если вы ссылаетесь на их двоичные файлы, у вас не будет проблем. Их также есть и другие библиотеки.

Если вы решите написать его самостоятельно, будьте осторожны с скоростью, так как С# делает хруст числа невелика. Но есть способы обойти это.

  • 0
    Спасибо, это может быть то, что мне нужно. Это небольшая часть очень большого школьного проекта, поэтому никаких проблем нет :)
  • 0
    C # может быть очень эффективным при сокращении числа, если все сделано правильно. В численных вычислительных приложениях копирование векторов и матриц в C # часто наносит ущерб производительности, а не какой-либо основной проблеме с C #.
2

Вращение цифрового изображения в плоскости сводится к множеству матричных умножений 2X2. Здесь нет исчисления! Для поворота квадратного изображения вам не нужна вся инфраструктура обработки изображений, если только это не очень чувствительно к производительности изображения с точки зрения качества и скорости изображения.

Идите и прочитайте первую половину Wikipedia статью о матрице вращения, и это должно привести вас к хорошему началу.

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

Удачи,

Пол

2

Здесь хорошая статья проекта кода, обсуждающая только то, что вы хотите:

http://www.codeproject.com/KB/GDI-plus/matrix_transformation.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню