Accueil > Forum > > > > Programme très lent
Programme très lent
jeudi 31 mai 2007 à 13:25:33 |
Programme très lent

jojoduv
|
Bonjour a tous, je suis en projet et je developpe une petite application qui gère les modifications géométrique d'une image. J'utilise une interpolation bilinéaire. Cependant lors de l'éxécution d'une fonction d'agrandissement sur X et Y, la programme met presque une minute à renvoyer l'image agrandie. Quelqu'un pourrait-il m'aider ou me donner des piste pour rendre mon programme plus rapide ? Merci d'avance
|
|
jeudi 31 mai 2007 à 13:48:37 |
Re : Programme très lent

laurent1024
|
Premierement si ce n'est pas deja fait, tu peux mettre ton code en release au lieu qu'il soit de debug. Après faut voir dans ton algo, peut etre que tu peut simplifier les boucles, et essayer de limiter les calculs couteux en temps de mémoire ( par exemple au lieu de faire sqrt(10) tu stocke la valeur dans une variable au lieu d'utiliser a chaque fois la fonction). Sans le code, c'est difficile de dire ce que tu peux modifier d'autre. ++
|
|
vendredi 1 juin 2007 à 08:34:12 |
Re : Programme très lent

rt15
|
Salut, Si ca ne te dérange pas d'utiliser les routines de windoze, tu peux utiliser StretchBlt (Ou StretchDIBits). Pour avoir un beau résultat, il faut utiliser SetStretchBltMode avec HALFTONE en paramètre, sans oublier le SetBrushOrgEx comme précisé.
|
|
vendredi 1 juin 2007 à 08:45:04 |
Re : Programme très lent

jojoduv
|
Tout d'abord merci de prendre un peu de temps pour résoudre mon problème. Mon code est déjà en release. J'ai implémenté mon code de la façon la plus simple à mes yeux. Voici celui-ci:
void CImageBMP::agrandissement(CImageBMP& out, double factorX, double factorY) { int imageType = m_iTypeImage; int HauteurIn = m_iHauteur; int LargeurIn = m_iLargeur; int HauteurOut = (int)ceil((double)HauteurIn * (double)factorY); int LargeurOut = (int)ceil((double)LargeurIn * (double)factorX); out.initialisation( HauteurOut,LargeurOut,imageType,-1);
double iPrim; double jPrim; double x; double y; int flooriPrim; int floorjPrim; int ceiliPrim; int ceiljPrim; //parcour de l'image for (int i=0; i < HauteurOut; i++) { for (int j=0; j < LargeurOut; j++) { iPrim = ( ( i+1.0 ) / factorY ) - 1.0; jPrim = ( ( j+1.0 ) / factorX ) - 1.0; // interpolation bilineaire x = (double)iPrim - (int)iPrim; y = (double)jPrim - (int)jPrim; flooriPrim = (int)(iPrim); floorjPrim = (int)(jPrim); ceiliPrim = (int)(iPrim)+1; ceiljPrim = (int)(jPrim)+1;
//remplissage de l'image et gestion des bords if (((iPrim) <= HauteurIn-2)&&((jPrim) <= LargeurIn-2)) { out (i, j) = (unsigned char) (m_ppucLigne[ flooriPrim ][ floorjPrim ] * ( (1-x) * (1-y) ) + m_ppucLigne[ flooriPrim ][ ceiljPrim ] * ( (1-x) * y ) + m_ppucLigne[ ceiliPrim ][ floorjPrim ] * ( x * (1-y) ) + m_ppucLigne[ ceiliPrim ][ ceiljPrim ] * ( x * y )); } else { out (i, j) = 0; } } }
Cette fonction permet l'agrandissement d'une image par des facteurs X et Y à l'aide d'une interpolation bilinéaire. Mais lorsque je pose deux facteurs de 10, la fonction met presque une minute à me renvoyer la nouvelle image !!! Pour moi, ce code est simplement deux boucles for imbriquée avec un calcul inséré. Je ne vois pas les données que je pourrais stocker.
|
|
vendredi 1 juin 2007 à 08:58:41 |
Re : Programme très lent

laurent1024
|
C'est normal que ce soit long si tu mets des grands facteurs sur des images assez grandes. La quantité d'informations à traiter devient forcément importante. Tu pourrais peut etre essayer d'utiliser des threads qui travaillent chqu'un sur des parties de l'images, mais je ne suis pas sur que cela puisse te faire gagner beaucoup de temps.
++
|
|
vendredi 1 juin 2007 à 09:55:58 |
Re : Programme très lent

BruNews
|
iPrim = ((i + 1.0) / factorY) - 1.0; Pourquoi ce recalcul à chaque tour de j puisqu'il n'en dépend pas ???
jPrim = ((j + 1.0) / factorX) - 1.0;
Pour ces 2 calculs très lourds en cycles, il vaut mieux calculer au départ le pas d'incrémentation et faire une simple addition dans les boucles.
ciao... BruNews, MVP VC++
|
|
vendredi 1 juin 2007 à 10:37:40 |
Re : Programme très lent

luhtor
|
D'utiliser des float au lieu des doubles, ca aiderait aussi.
De plus, quand tu fais ca: // interpolation bilineaire x = (double)iPrim - (int)iPrim; y = (double)jPrim - (int)jPrim; flooriPrim = (int)(iPrim); floorjPrim = (int)(jPrim); ceiliPrim = (int)(iPrim)+1; ceiljPrim = (int)(jPrim)+1;
Tu convertis 3 fois de double en int la meme quantité, alors que tu pourrais le faire une seule fois: // interpolation bilineaire
flooriPrim = (int)(iPrim);
floorjPrim = (int)(jPrim);
ceiliPrim = flooriPrim +1;
ceiljPrim = floorjPrim +1;
x = (double)iPrim - flooriPrim ;
y = (double)jPrim - floorjPrim ;
Mais c'est en passant en float, que tu vas gagner le plus. Le float te permettrait aussi d'utiliser le GPU pour faire ca. Il serait content de pouvoir t'aider :) il est spécialiser la dedans. Il te le ferait en 1/10sec ce calcul pour peu que ton image ne soit pas trop grande. Dans le cas contraire, il faudrait la découper et l'envoyer a la carte video par morceau.
|
|
vendredi 1 juin 2007 à 11:30:09 |
Re : Programme très lent

jojoduv
|
Merci beeaucoup de tous ces renseignements  je fais un essai et vous tiens au courant !!!
|
|
Cette discussion est classée dans : programme, image, lent
Répondre à ce message
Sujets en rapport avec ce message
Enregistrer toutes les 5 minutes [ par neofred ]
Bonjour à tousVoila mon problème. J'ai un programme qui effectue un traitement d'image et j'aimerais que toutes les 5 minutes une image soit copié dan
Sauvegarde d'une image tif sur le disque. [ par pac2 ]
Salut,Je programme en cpp. Mon programme charge les bytes d'une image tif en mémoire. Comment dès lors sauvegarder sur disque en connaissant les point
Ajouter une ressource avec un bouton [ par aujeanfr ]
bonjour à tous,je souhaite ajouter une ressource avec un bouton de telle sorte qu'aux exécutions suivantes de mon programme les ressources ajoutées so
comment integrer une image en 3D dans mon programme [ par benzarty ]
Criss
image gif dans un programme MFC [ par ventreapatte ]
don't worry be happyJe réalise un programme MFC.Je voudrais parcourir une image au format Gif pixels par pixels et récupérer les coordonnées et 3 comp
probleme alors l'execution du programme [ par anonyme_man_in_this_world ]
salut !! j'ai un programme : lors le building le compilateur genetre la warning suivant ********************************************************
Problème SDL [ par MATHIS49 ]
Bonjour ! Je débute en C++ et en SDL , j'ai donc décortiqué un petit programme fait en SDL qui avait pour l'avantage d'être accessible au débutant :
Programme réalisant image en niveau de gis avec Coordonnées (x,y,z) [ par raftanelle ]
Je cherche un programme en C++, VB, ou autres me permettant de créer des images en niveau de gris. Le niveau de gris dépend de la hauteur Z. Les coord
Intégrer une image dans un programme [Dev-cpp] [ par by_rabbit_08 ]
Salut!! Je me demandais si quelqu'un savait comment intégrer une image dans un exécutable, et pouvoir l'utiliser ensuite... Est-ce que quelqu'un peut
[C] charger plusieurs images [ par elo29 ]
Bonjour! Je travaille avec visual C++ mais mon programme est écrit en C. Le but de mon programme est de charger une image , d'en extraire une certain
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|