dj roupe
Messages postés2Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention24 octobre 2004
-
22 oct. 2004 à 16:14
dj roupe
Messages postés2Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention24 octobre 2004
-
24 oct. 2004 à 12:12
Je dispose d'une image définie par un ensemble de pixels et je souhaite appliquer une matrice homogène 3*3 à cette image et je ne sais pas comment faire.
J'accepte tt réponses ou idées sur ce pb.
DJ ROUPE
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 23 oct. 2004 à 09:22
Alors là c'est des opérations matricielles. Matrice 3x3 homogène, c'est à dire en 2D... Voici l'algo pour effectuer une rotation d'un point par une matrice 3x3, en assumant que tes points aient des coordonnées (x, y, z). Ne t'inquiete pas pour le Z en 2D, définis-le juste à 1, c'est pour que les opérations matricielles puissent être exécutées :
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 23 oct. 2004 à 14:41
que veux-tu dire par appliquer ?
faire une rotation, une translation, une homothetie ?
A ce moment la, une matrice 2x2 suffit, ou alors il y a une composante nulle.
Mais ta question me fait plus penser à un filtrage, cherche sur google le mot clé "produit de convolution". Il faut ensuite dicrétiser cette formule pour l'adapter à une image ...
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 23 oct. 2004 à 20:10
Non pour une translation il faut une 3x3, le vecteur déplacement est dans la troisième colonne en haut... Ca sert à ca les coordonnées homogènes... Sinon, c'est vrai, une 2x2 suffirait ;)
Sinon, si tu ne parlais pas de rotations ou de changements d'échelle, j'ai pas compris comme il faut.... :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 23 oct. 2004 à 21:20
pour une translation, en fait c'est ni une 2x2 (méa culpa), ni une 3x3, ni meme un produit matriciel,
c'est une somme vectorielle !
une homothétie, c'est y = Ax + b, avec A matrice de rotation et b le vecteur de translation.
y le nouveau vecteur, x l'ancien.
Mais je ne pense pas que ce soit de ça que dj roupe veuille parler ...
dj roupe
Messages postés2Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention24 octobre 2004 24 oct. 2004 à 12:12
En fait je parle bien de rotations et de changements d'échelle, mais aussi de distortion. En fros une image que l'on voit "de travers, j'aimerai la voir "droite". Mais mon pb n'est pas de trouver la matrice(car ca je l'ai), mais c de l'intégrer en c ds mon programme(qui n'est pas le mien, c ca le pb). Le .cpp ou je souhaite intéger cette matrice et où est définie mon image est mis ci dessous. Si qqc pouvais m'aider ca serait sympa. Merci
CScotome_v3Dlg::CScotome_v3Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CScotome_v3Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CScotome_v3Dlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
SetParam.DoModal();
Horizontal = SetParam.m_Horizontal;
Vertical = SetParam.m_Vertical;
switch (SetParam.m_Zoom)
{
case 0:
Zoom = 0.25;
break;
case 1:
Zoom = 1.0/3.0;
break;
case 2:
Zoom = 0.5;
break;
case 3:
Zoom = 1.0;
break;
case 4:
Zoom = 1.5;
break;
case 5:
Zoom = 2.0;
break;
case 6:
Zoom = 2.5;
break;
default:
Zoom = 1.0;
}
// recuperation de la taille de l'image
SizeX = m_Image1.GetSizeX();
SizeY = m_Image1.GetSizeY();
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CScotome_v3Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CScotome_v3Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CScotome_v3Dlg::OnButtonClose()
{
// Close the dialog box
EndDialog(IDOK);
}
// **************************************************************************
// Fonction principale de traitement de l'image
// **************************************************************************