2009-10-28 6 views
2

Je dois écrire un programme qui utilise la multiplication matricielle pour faire pivoter une image (un simple carré), basé sur le centre du carré, une certaine quantité de degré en fonction de ce dont j'ai besoin. Toute aide à ce sujet serait grandement appréciée. Je n'ai presque aucune idée de ce que je fais parce que je n'ai pas pris un seul coup d'œil à Calculus.Multiplication de matrice pour faire pivoter une image en C#

+2

Il est en fait l'algèbre linéaire que vous avez besoin, et non pas le calcul;) – mpen

+0

Ah merci;) 15char – Cistoran

Répondre

4

Jetez un oeil à http://www.aforgenet.com/framework/. C'est un framework de traitement d'image complet en C# que j'utilise sur un projet. Je viens de vérifier leur aide et ils ont une fonction qui fait ce que vous voulez -

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

Il est une bibliothèque LGPL, donc si licence est un problème, si vous établissez un lien contre leurs binaires, vous aurez aucun problème. Leurs sont également d'autres bibliothèques.

Si vous décidez de l'écrire vous-même, faites attention à la vitesse car C# faire des calculs n'est pas très bon. Mais il existe des moyens de contourner ce problème.

+0

Merci, cela pourrait être ce que je dois. C'est une petite partie d'un très grand projet d'école donc il n'y a pas de problèmes :) – Cistoran

+0

C# peut être très efficace au nombre croquant s'il est bien fait. Dans les applications de calcul numériques, c'est souvent la copie de vecteurs et de matrices en C# qui nuit aux performances, et pas de problème sous-jacent à C#. – Paul

2

La rotation d'une image numérique dans le plan se résume à un grand nombre de multiplications matricielles 2X2. Il n'y a pas de calcul impliqué ici! Vous n'avez pas besoin d'un cadre de traitement d'image complet pour faire pivoter une image carrée - à moins que cela ne soit vraiment sensible aux performances en termes de qualité d'image et de vitesse.

Allez lire la première moitié du article de Wikipedia sur la matrice de rotation et cela devrait vous permettre de bien commencer. En un mot, établissez votre origine (peut-être le centre de l'image si vous voulez tourner autour), puis calculez dans l'espace pixel la coordonnée d'un pixel que vous souhaitez faire pivoter, et multipliez par votre rotation matrice (voir l'article.). Une fois que vous avez fait la multiplication, vous aurez vos nouvelles coordonnées du pixel dans l'espace des pixels. Ecrivez ce pixel dans un autre tampon d'image et vous serez hors tension et en rotation. Répéter. Notez qu'une fois que vous connaissez votre angle de rotation, il vous suffit de calculer votre matrice de rotation une fois!

Amusez-vous,

Paul

Questions connexes