Partage
  • Partager sur Facebook
  • Partager sur Twitter

Intensité lumineuse d'un pixel [C#]

Sujet résolu
23 mai 2016 à 9:54:23

Bonjour à tous,

J'aimerai pouvoir récupérer l'intensité lumineuse de chaque pixel d'une photo/vidéo d'une pictureBox. Je souhaiterai ensuite tracer un graphe à partir de ces données.
Quelqu'un saurait comment récupérer cette intensité ? Il faut que je récupère l'intensité de chaque pixel et que je les stocke dans un tableau pour pouvoir ensuite tracer le graphe, c'est bien ça ?

Je vous remercie d'avance ,

Sebbur
  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2016 à 10:42:21

Salut,

Voici la succession d'étapes à réaliser :

  • Créer un tableau d'entiers d'une taille de 256 éléments (qui contiendra le nombre de pixels de chaque luminosité).
  • Lire la couleur RGB de chaque pixel de l'image. Si tu cherches la simplicité, utilise la méthode GetPixel(x, y). Si tu cherches la performances, regarde du côté de Bitmap.LockBits.
  • Récupère la luminosité de ta couleur : (Max(R, G, B) + Min(R, G, B)) / 2
  • Incrémente la valeur de l'indice en question dans ton tableau.
  • Partager sur Facebook
  • Partager sur Twitter
Il y a 2 types de personnes : celles qui sont capables d'extrapoler à partir de données incomplètes.
23 mai 2016 à 10:57:17

Je te remercie de ta réponse !

Je vais tenter de réaliser tout ça alors. Mais si j'ai une photo en Noir et Blanc, la méthode fonctionne quand même ? Il ne faudrait pas plutôt afficher les nuances de gris dans ce cas là ?

Et pour illustrer mon message, voici un exemple qui peut servir à la compréhension de mon objectif :
Si on prend une photo d'une source lumineuse en fonctionnement (Ampoule par exemple), la résultat attendu aurait l'allure d'une gaussienne.

Merci encore,

Sebbur

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2016 à 11:18:28

Si ton image est en noir et blanc, la méthode GetPixel te donnera toujours une couleur RGB. Donc la formule marchera quand même.

sebbur a écrit:

Et pour illustrer mon message, voici un exemple qui peut servir à la compréhension de mon objectif :

Si on prend une photo d'une source lumineuse en fonctionnement (Ampoule par exemple), la résultat attendu aurait l'allure d'une gaussienne.

Là, on n'est pas d'accord. Soit tu te trompes dans le résultat d'une telle image, soit je n'ai pas compris ce que tu recherches. Pour moi, si tu prends en photo une ampoule (genre cette image : http://img0.mxstatic.com/wallpapers/2c002df3e4013319e41063193b3f0fb6_large.jpeg), et que ton graphe a, en abscisse, la luminosité et en ordonnée le nombre de pixels, tu as énormément de points noirs (donc à 0 d'abscisse, l'ordonnée est très haute), très peu de points "moyens", et pas mal de points blancs. Un peu du genre https://nces.ed.gov/nceskids/createagraph/graphwrite.aspx?ID=09c5410ef6104d0a9b2677ef116ac23e&r=19085.5198814&file=png

  • Partager sur Facebook
  • Partager sur Twitter
Il y a 2 types de personnes : celles qui sont capables d'extrapoler à partir de données incomplètes.
23 mai 2016 à 11:35:14

Merci pour ta réponse sur le noir et blanc.

Je suis d'accord avec ton raisonnement. En effet ce que tu me dis est juste.

En revanche, je souhaiterai avoir en ordonnée l'intensité lumineuse et en abscisse une distance (celle qui correspond en fait à la largeur de la photo).

Donc vu que l'ampoule est située au milieu de la photo et que l'intensité est plus forte, le graphe aurait l'allure d'une gaussienne.

Merci encore pour tes réponses,

Sebbur

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2016 à 11:50:46

Ah, donc tu veux la luminosité moyenne de chaque colonne de pixels. Donc au lieu de faire un tableau de 256 éléments, tu en fais un de la largeur de ton image, puis quand tu calcules la luminosité d'un pixel, tu l'ajoutes dans la bonne case de ton tableau (la colonne de ton pixel).

Une fois que tout est fait, tu peux, si tu veux, diviser chaque élément de ton tableau par la hauteur de ton image pour avoir la valeur moyenne et non la somme (ce qui ne changera rien à ton graphe).

  • Partager sur Facebook
  • Partager sur Twitter
Il y a 2 types de personnes : celles qui sont capables d'extrapoler à partir de données incomplètes.
23 mai 2016 à 14:11:42

Oui c'est exact, c'est bien ça mon idée.
Mais je dois quand même relever l'intensité lumineuse de chaque pixel pour pouvoir ensuite calculer la moyenne. Et c'est justement pour récupérer l'intensité lumineuse de chaque pixel que je bloque, et ensuite également pour stocker les données dans un tableau et tracer le graphe.

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2016 à 15:16:13

Tu fais une double boucle (une sur chaque ligne, une sur chaque colonne), et tu appelles la méthode GetPixel. Et pour obtenir la luminosité, je t'ai donné la formule.
  • Partager sur Facebook
  • Partager sur Twitter
Il y a 2 types de personnes : celles qui sont capables d'extrapoler à partir de données incomplètes.
23 mai 2016 à 15:23:16

D'accord, je te remercie pour tes réponses et ton aide !
Je vais essayer tout ça !

Encore une fois merci d'avoir prit le temps de m'aider :)

Sebbur

  • Partager sur Facebook
  • Partager sur Twitter
12 juin 2018 à 13:39:57

Ceci n'est pas tout a fait juste, car la somme des composant de chaque couleur (soit rouge vert bleu) comme vous l'indiquer ne donne pas tout a fait un reflet de la luminosité de ce pixel, une formule comme ceci (qui viens du livre de Charles Petzold programmer Window édition microsoft presse) nous apprend, qu'il faut effectuer 2 fois le rouge, 5 fois le vert, et une fois le bleu. on obtient une somme pondérée par ces facteurs.
  • Partager sur Facebook
  • Partager sur Twitter
12 juin 2018 à 16:03:39

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.

Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pouce en haut pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre. Si vous avez une question similaire, créez plutôt votre propre sujet en détaillant votre contexte

Je ferme ce sujet. Me contacter par MP si besoin.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL