Умножение матриц для поворота изображения в C # - PullRequest
2 голосов
/ 28 октября 2009

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

Ответы [ 3 ]

4 голосов
/ 28 октября 2009

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

// 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, поэтому, если лицензирование является проблемой, если вы ссылаетесь на их двоичные файлы, у вас не будет проблем. Есть и другие библиотеки.

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

2 голосов
/ 28 октября 2009

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

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

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

Веселись,

Пол

2 голосов
/ 28 октября 2009

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

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

...