Accélérer un traitement d'image : par découpe ou non ?
Ulrick
-
Modifié par ucfoutu le 12/03/2016 à 19:13
Whismeril
Messages postés18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024
-
14 mars 2016 à 17:57
bonjour,
débutant je me lance dans le traitement d'image, pour optimiser la vitesse d’exécution du traitement des image, je pence découper l'image en plusieurs blocs pour traiter simultanément chaque bloc en multi-thread puis la ré-assemblé.
Pour cela j'aimerais savoir si pour découper une image il est plus rapide d'utiliser bitmap.clone ou de parcourir chaque pixel en utilisant lockbits ?
A voir également:
Accélérer un traitement d'image : par découpe ou non ?
bien-sur, j'y est même poser la question et il ma était suggéré d'ouvrir une autre discussion.
visiblement il existe plusieurs méthode j'aimerais juste connaitre la plus rapide afin d'optimiser au mieux la rapidité du traitement d'image.
Whismeril
Messages postés18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024654 12 mars 2016 à 18:35
Bonjour,
Je ne crois pas que découper une image, traiter dans des fils distincts les découpes, puis ré-assembler le tout soit une bonne idée.
La découpe elle-même, puis le ré-assemblage vont selon moi, à eux seuls être "gourmands".
Et comment penses-tu, par ailleurs, récupérer les "sous-images" traitées dans des fils distincts ? En passant par un tremplin supplémentaire ?
Je pense (mais cela n'engage que moi) qu'il vaut mieux travailler directement sur un tableau de dibits construit à partir de l'image à traiter. Je ne sais si VB.Net propose mieux, mais sous VB6, on se sert à cet effet de la fonction GetDIBits de la livraire gdi32 de l'Api de Windows.
Tu peux par contre essayer de gagner en vitesse d'exécution en évitant l'affichage pendant toute la durée des modifications et en ne rafraichissant qu'in fine.
Mais ce n'est, une fois encore, que mon avis.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
je pence redessiner les sous image directement après leur traitement dans un bitmap puis l'afficher une fois entièrement reconstitué, pour ce qui est de GetDIBits l’équivalent en vb.net et lockbits que j'utilise déjà.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211
>
Ulrick
12 mars 2016 à 19:17
Oui ? et à quel "coût" de "récupération" (pour les assembler) de tous ces bitmaps ?
As-tu essayé ? Essaye déjà sans découpe : en envoyant ton traitement total dans un fil distinct et en le récupérant.
Reviens ensuite nous "dire" ...
Whismeril
Messages postés18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024654 12 mars 2016 à 18:42
Il existe des bibliothèques de traitement d'image gratuite (j'ai plus le nom en tête).
On les a testées en C++.Net pour soustraite deux images successives, faire un barycentre des différences, zoomer sur le barycentre le tout en fausse couleur pour bien voir les écarts et sortir une image contenant quatre quadrants, l'image brute le résultat du traitement ci dessus, un étalement de l'image brute sur 12 bits, si toute l'amplitude n'était pas utilisée, et tout un tas d'infos en textes dans le dernier.
Tout ça à 75hz, et juste l'incrustation du texte prenait environ 1/3 du temps.
Le faire en C++ a permis de gagner du temps principalement sur le texte
Whismeril
Messages postés18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024654 12 mars 2016 à 22:33
Ce que je voulais dire, c'est que c'est une bibliothèque .Net, donc utilisable avec VB.Net et qu'à part l'incrustation de texte elle fonctionne vite.
Lundi je retrouve le nom
Une autre solution pourrait être de travailler, non sur le bitmap, mais sur un objet stdpicture (on évite ainsi les lenteurs d'affichage) puis d'affecter le résultat au contrôle de destination
EDIT je modifie le titre :
Tu n'en es pas à découper une image, mais à déterminer si une telle découpe est susceptible d'accélérer ton traitement !
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 12 mars 2016 à 20:49
Je ne veux pas aller au dodo sans par ailleurs appeler ton attention sur les "mésaventures" bien évidemment très prévisibles (c'est un euphémisme) d'un traitement par "petits morceaux" dans le cas de certains traitements d'image, parmi lesquels (je vais me contenter de ne citer que les plus évident)s : les contrastes, les flous, les détourages, les ajouts de "bruit", les "adoucissements", des effets divers (postérisation, pshychédélisation, etc ...).
effectivement je perd un peut de temps a travailler en découpe, de plus comme tu me le signal en cas d'ajouts d'effet le résultat risque de ne pas être uniforme