Ma boucle interne contient un calcul que le profilage montre être problématique.Formule rapide pour une courbe "à contraste élevé"
L'idée est de prendre un pixel en niveaux de gris x (0 < = x < = 1), et "augmenter son contraste". Mes exigences sont assez lâche, il suffit de ce qui suit:
- pour x < 0,5, 0 < = f (x) x <
- pour x> 0,5, x < f (x) = 1 <
- f (0) = 0
- f (x) = 1 - f (1 - x), soit il doit être "symétrique"
- De préférence, la fonction doit être lisse.
Ainsi, le graphique doit ressembler à ceci:
.
J'ai deux implémentations (leurs résultats diffèrent, mais les deux sont): conforme
float cosContrastize(float i) {
return .5 - cos(x * pi)/2;
}
float mulContrastize(float i) {
if (i < .5) return i * i * 2;
i = 1 - i;
return 1 - i * i * 2;
}
Je demande, soit un microoptimization pour l'une de ces mises en œuvre, ou un original, plus rapide de votre formule.
Peut-être que l'un d'entre vous peut même tourner les bits;)
Peut-être pourrions-nous vous aider à mieux nous dire quelle langue vous utilisez (je suppose Java) et quel est le compilateur/temps d'exécution impliqué. –
C# avec un compilateur MS et l'exécution, mais je suis prêt à réécrire l'algo critique en C++ si je trouve que j'ai besoin de ... –
C# avec les noms de méthodes camelCased? :( – Joren