# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Contraste et Luminosit

## mitmal

Bonjour  tous,

Voil, j'aimerai simplement chang le contraste et la luminosit d'une image que j'affiche  l'cran.

Ma premire ide est assez simple, mais elle me semble fausse, je vous explique.
J'ai une srie de valeur (mon image) et je dois la normaliser pour l'afficher  l'cran. Du coup je commence par chercher la valeur max et ensuite je normalise chaque valeur :


```
monImage.setPixel(c, l, qRgb(pValue*255/max, pValue*255/max, pValue*255/max));
```

Et donc pour augmenter le contraste je fais simplement :


```
max = maxDansSerie + changementContraste; //ICI J'AUGMENTE LE MAX D'UNE VALEUR changementContraste QUE L'UTILISATEUR PEUT MODIFIER SELON SON SOUHAIT
```

Et pour la luminosit je fais :


```
pValue = parcoursVec[l*w+c] + changementLuminosite; //ICI J'AUGMENTE LA VALEUR D'UNE VALEUR changementLuminosite QUE L'UTILISATEUR PEUT MODIFIER SELON SON SOUHAIT
```

Seulement j'ai deux questions :
1 - Est-ce correcte ?? Parce que bon, je n'en suis pas du tout certain, mme loin de l au vu du resultat
2 - Si je vais trop loin j'observe une image vraiment moche  l'cran, une image comme si elle tait rogne par moment...Comment viter ca ? S'il me faut fixer un seuil le quel est-ce ??

Merci beaucoup la communaut

----------


## pseudocode

Les oprations de changement de contraste/luminosit se traduisent gnralement par une modification des valeur d'intensit des pixels.

newValue = F( oldValue )

Pour la luminosit, on ajoute/retranche un offset, en prenant bien soin de ne pas dpasser les valeurs min/max permises.

F(x) = max(0, min(255, x+offset) )Pour le contraste, on augmente/diminue les valeurs hautes/basses. Par exemple :

F(x) =  0   , si x < Low
        255 , si x > High
        255*(x-Low)/(High-Low) , si Low <= x <= High(ou d'autres fonctions plus complexes, du genre sigmoide)

----------


## mitmal

Merci beaucoup,

Seulement j'ai encore trois petites questions.

La premire concerne directement ta rponse, quand je diminue l'offset, il arrive un moment o, au lieu d'assombrir l'image, je me retrouve avec des trous blanc...Cela ne me semble pas normal, je me demande bien d'o vient le problme, as tu une ide ? C'est quand l'offset est ngatif en faite... :8O: 

La seconde concerne la normalisation. En faite j'ai une srie d'intensit que je ne modifie pas. Ce que je change c'est uniquement la valeur du pixel qui est affich. Mais dans ce cas, que deviennent tes fonction ? Pour le changement de luminosit, s'agit-il bien toujours de 0 et 255 ou de minSerie et maxSerie (tant les min et max de la srie initiale). Pareil pour le changement de contraste ? Comment dois-je choisir High et Low ? Ce doit etre les valeur minSerie et maxSerie ???

Et enfin j'ai un petit problme encore, je voudrais pouvoir faire un changement de contraste et (+) un changement de luminosit en mme temps. En une seule fonction. Cela est-il possible ?
((Pour le moment je ne peux faire que l'un ou l'autre mais est-ce possible de faire une fonction qui prend en entr ma valeur x, mon offset, mon High et mon Low pour avoir la nouvelle intensit ??))

Merci beaucoup

----------


## mitmal

Voila ce que je comptais faire,
Pour l'affichage de mon image :


```

```

Et la fonction qui s'occupe du changement pour la luminosit et le contraste :


```

```

Mais cela ne fonctionne pas... Je ne comprends pas comment faire.
Pouvez vous m'expliquer ??

----------


## mitmal

> La premire concerne directement ta rponse, quand je diminue l'offset, il arrive un moment o, au lieu d'assombrir l'image, je me retrouve avec des trous blanc...Cela ne me semble pas normal, je me demande bien d'o vient le problme, as tu une ide ? C'est quand l'offset est ngatif en faite...


Pour cette premire question je viens de comprendre. La fonction MIN de C++ (celle de math.h il me semble) ne prend pas en considration le signe...Du coup quand je fais MIN(255, -1) il me retourne 255 lol
J'ai rimplment la fonction et ca fonctionne bien.

Je continue maintenant en essayant de comprendre le contraste et aussi  chercher comment faire en une seule fonction les deux opration  ::ccool::

----------


## mitmal

Pour ce qui est de ma seconde question j'ai dcid de passer le changement d'intensit aprs la normalisation.
Ce qui donne :


```

```

Seulement c'est dans la fonction changerIntensiteFonctionConstrasteLuminosite qu'il y a un problme :


```

```

J'imagine ca un peu comme une fenetre, o le centre serait le paramtre pour dfinir la luminosit et et la largeur de la fentre fixerait le contraste.
Sauf que j'en arrive  ma demander le point suivant. 



> Comment initialiser l'offset et la largeur ?


Pour le moment j'ai initialiser l'offset  0 et la largeur  127...Sauf que ca fonctionne pas  ::aie::

----------


## mitmal

Alors, je viens aux nouvelles.

Voici la fonction maintenant, elle n'est pas encore bonne, mais je crois que je suis sur la voie :


```

```

Avec pour valeurs initiales :



> //IMAGE INITIALE
> int PictureBox::offsetIni = 0;
> int PictureBox::largeurIni = 0;

----------


## mitmal

Alors voila, pour conclure je vous propose mon code qui fonctionne plutt bien.


```

```

Avec le code suivant pour faire appelle aux deux fonctions :


```

```

Il s'agit de code C++ utilisant la librairie Qt.

Merci beaucoup pseudocode, encore une fois, tu m'as beaucoup aid   ::ccool::

----------

