begin process at 2012 02 11 15:21:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > RETOUCHE D'IMAGES (FLOUS, SEUIL, HISTOGRAMMES, OPÉRATIONS ARITHMÉTIQUES)

RETOUCHE D'IMAGES (FLOUS, SEUIL, HISTOGRAMMES, OPÉRATIONS ARITHMÉTIQUES)


 Information sur la source

Note :
9,83 / 10 - par 6 personnes
9,83 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :01/06/2005 Date de mise à jour :07/06/2005 18:48:29 Vu / téléchargé :8 532 / 4 996

Auteur : cedricbi

Ecrire un message privé
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce programme est le début d'un logiciel de traitement d'image.
J'ai mis pas mal de commentaires pour pouvoir s'y retrouver ! et ainsi, donner aux débutant des explications claires.
Ce programme met en avant l'utilisation des Form MDI, et aussi l'utilisation du OnDrawItem du TListBox et bien sur des routines arithmétiques !

Tous les commentaires sont les bienvenue !



Un des avantage de mon programme est qu'il travaille sur les pixels complètement indépendament à l'affichage sur l'écran : c'est à dire qu'un pixel peut avoir une valeur décimale quelconque (utile pour les divisions) !

Liste des fonctions disponibles :
- Addition Image + Image ou Image + Couleur
- SoustractionImage - Image ou Image - Couleur
- Multiplication Image * Image ou Image * Couleur
- Division Image / Image ou Image / Couleur
- AND Image AND Image ou Image AND Couleur
- OR Image OR Image ou Image OR Couleur
- XOR Image XOR Image ou Image XOR Couleur
- Fondu ou Fusion de 2 Images
- NOT
- Valeur Absolue
- Transformation en Niveaux de gris
- Flou Moyenne
- Flou Gaussien
- Flou Min / Max
- Flou Médian
- Seuil
- Seuil Adaptatif (contours)
- Histogrammes
- Modification de l'histogramme
- Pixelisation


 Conclusion

Si quelqu'un remarque un quelconque bug, ajoutez un commentaire.

S'il bous plaît mettez une note et ajouter un petit commentaire !

Je vais refaire complètement "l'architecture" de mon programme. Si quelqu'un à des idées à apporter à propos de nouvelles fonctionnalités ou autre qu'il m'en fasse part (commentaire ou mail : bignon.cedric@wanadoo.fr) pour pouvoir adapter la structure de mon programme à toutes les fonctions !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 juin 2005 12:59:21 :
Ajout des Soutraction, Multiplication, Division, AND, OR, et XOR entre 2 images
01 juin 2005 15:15:37 :
Ajout des Addition, Soustraction, Multiplication, Division, AND, OR, XOR entre une image et une constante.
01 juin 2005 16:41:24 :
Ajout de Niveaux de Gris, NOT, Fusion, Valeur Absolue
01 juin 2005 18:07:58 :
Ajout de Floux Moyenne, Gaussien et Min / Max
01 juin 2005 18:27:28 :
Capture d'écran
03 juin 2005 06:17:01 :
Ajout de la fonction Seuil et Seuil Adaptatif
03 juin 2005 19:11:36 :
Ajout de l'histogramme Correction du bug des divisions par 0 Ajout d'un "masque" de saisie pour les nombres
04 juin 2005 19:03:47 :
Ajout du Flou Médian, changement des titres de images, et correction de la prévisualisation des flous
05 juin 2005 17:46:58 :
Ajout de la Modification de l'Histogramme, de la position du curseur et de la progression
07 juin 2005 18:48:29 :
Ajout de la pixelisation

 Sources du même auteur

Source avec une capture STYLE XP AVEC SANS CODE SUPPLÉMENTAIRE
Source avec Zip SOLUTION POUR LE COMPTE EST BON

 Sources de la même categorie

Source avec Zip Source avec une capture LE CERCLE ENCHANTÉ D'ANDRES GÎT EN NOS MÉMOIRES par Caribensila
Source avec Zip Source avec une capture COMPARATIF ALGO CERCLES par barbichette
Source avec Zip Source avec une capture RAYTRACING EN DELPHI (PROGRESSIVE PATH TRACING) par Bacterius
Source avec Zip Source avec une capture TEXTE SUR COURBE DE BEZIER par pseudo3
Source avec Zip Source avec une capture YEUXROUGES par pseudo3

Commentaires et avis

Commentaire de Renfield le 01/06/2005 15:27:07 administrateur CS

Va voir la source
http://vbfrance.com/code.aspx?id=18759

elle devrais t'interesser.... même si c'est en VB

Commentaire de cedricbi le 01/06/2005 15:49:35

Merci pour la source !
Je pense que je vais utiliser ta source pour le "Emboss", et le "Sharpen".

Merci encore !
Toute autre source et commentaire est le bienvenue !

Commentaire de MAURICIO le 03/06/2005 17:06:03 administrateur CS

Salut Cedricbi,
ça fait un moment que je voulais tester ta source :)

Je la trouve interessante pour apprendre comment on fait les diverses effets graphiques ...

J' en profite pour te signaler une erreur de division par 0 sur la ligne 80 de ton unité untFiltreDivImage_Image laquelle, par sa nature, pourrait exister dans d' autres unités.
a+

Commentaire de cedricbi le 03/06/2005 17:23:14

Merci Maurico ,

J'ai aussi pensé à cette erreur qui pourrais survenir ! C'est pour cela que j'ai mis ce "désagrement" à corriger dans la liste A Faire !
Mais ce qui m'ennui c'est que je ne sais pas par quelle valeur je peut remplacer le résultat !

Commentaire de MAURICIO le 03/06/2005 17:49:10 administrateur CS

Ayant déjà fait des fonctions dans le même genre (j' en ai une postée sur ce site pour redimensionner une image sans perdre la qualité de celle-ci), il faut que tu donnes la valeur la plus logique selon le l' effet voulu. a+

Commentaire de cedricbi le 03/06/2005 19:32:53

Oui, je viens de la faire ! Ce n'est pas tellement la valeur la plus logique mais c'est une valeur ! lol
Sinon j'avais déjà vu ton programme pour redimensionner les images sans perdre trop en qualité. Si tu me le permet, j'essaierai de l'integrer dans mon programme !
a+

Commentaire de oamram le 06/06/2005 07:55:00

Je n'ai pas regardé ton programme, mais voici quelques liens qui pourront te donner des idéees pour compléter ton programme. Ils ne sont malheureusement pas en Delphi !
- http://www.codeproject.com/cs/media/Image_Processing_Lab.asp
- http://www.codeproject.com/script/articles/list_articles.asp?userid=6556 ==> Voir Rubrique Multimedia/GDI+. Il y a 6 articles.

Idéees :
1) Si tu peux (et veux), essaye de construire ton prg de manière à ca que les fonctions de TI soient totalement indépendantes de ton interface, afin qu'on puisse les ré-utiliser dans d'autres programmes
2) Dans le même esprit, qu'on puisse appeler les fonctions directement en passant les paramètres dans la ligne de commande. Cela est très pratique en TI de pouvoir faire des batchs(des macros) pour des traitements répétitifs.

Si tu veux me joindre n'hésite pas j'ai pleins d'autres idées...

Commentaire de MAURICIO le 06/06/2005 10:27:39 administrateur CS

Oui biensûr Cedricbi, tu peux choper ma fonction et l' intégrer dans ton appli. Laisse juste un petit commentaire et le link de ma source :)
A+

Commentaire de cedricbi le 06/06/2005 19:06:12

OAMRAM -> C'est très gentil à toi de me proposer des idées. Voila les réponses à tes "questions" :
1) Merci pour les sources mais le Delphi est plus compréhensible pour moi !
2) Sinon pour les idées j'en ai encore plein mais il me faut le temps de les mettre en forme ! Mais vous pouvez toujours m'en donner d'autre soit en laissant un commentaire ou en m'écrivant un mail (bignon.cedric@wanadoo.fr).
3) Mes fonctions de TI sont déjà partiellement indépendantes de mon programme (grâce à l'objet TCalcImage) mais pas encore à 100% !
4) Par contre, je ne suis pas trop pour l'idée de pouvoir appeler les fonctions directement par la ligne de commande car pour cela il faudrait que je revois toute la structure de mon programme !

MAURICO -> Merci beaucoup ! Je vais voir ce que je peux en faire mais je pense que cela va m'être très utile !

Commentaire de bloom1 le 08/06/2005 18:27:14

c'est quel logiciel que vous utilisez pour faire du Delphi ???
Merci de me répondre et merci d'avance !
Bloom1

Commentaire de cedricbi le 08/06/2005 20:22:24

Euh... Delphi ! pourquoi ?

Commentaire de bloom1 le 09/06/2005 18:03:19

Dans le sens que tu places tes boutons visuellement et non avec du code ?

Commentaire de cedricbi le 09/06/2005 18:38:01

Oui, on place les boutons visuellement mais le code est différent du VB ! Le Delphi est beaucoup plus structuré, beaucoup plus rapide et beaucoup plus "logique". Maintenant je ne programme plus que en Delphi même si le passage VB->Delphi a été difficile !
Par contre je ne sais si tu peux trouver des versions gratuites sur Internet !

Commentaire de MAURICIO le 09/06/2005 18:49:08 administrateur CS

Oui, il me semble que tu peux telecharger Delphi6 en français !
ok, tu vas me demander où? demande dans le forum !!!

Commentaire de jihelb le 10/06/2005 11:38:36

Bravo Cedricbi pour ton travail, et ton enthousiasme est raffraichissant !
Impatient de connaitre la suite !

Commentaire de cedricbi le 10/06/2005 17:41:47

Merci JIHELB !
La suite arrivera surement (j'espère) dimanche !
Nouvelle présentation, nouvelles fonctions, code plus commenté et plus simple.

Commentaire de bloom1 le 10/06/2005 18:05:52

Merci, vous avez répondu vite a ma question !
Vous êtes fin !

Commentaire de cedricbi le 12/06/2005 19:45:44

Ma nouvelle version à prit un peu de retard ! Je vous prie de m'excusez ! Elle arrivera je vais dire... prochainement !
Merci à tous pour votre soutient et vos encouragements !

Commentaire de aymenk le 17/06/2005 12:41:07

Trés intéressant , Merci .
Very Usefull Thanks...

Commentaire de lbensch le 02/05/2006 14:03:12

Bonjour,

Je recherche une fonction graphique qui me permettrais d'extraire les contours d'une image. Maheureusement, étant novice dans le domaine graphique, je ne connais son nom. Tout ce que je cherche, c'est une fonction qui me permet de récupérer une image avev un contour en N/B sans dégradés.

Merci.

Commentaire de cedricbi le 02/05/2006 16:14:40

Bonjour,

Je suis désolé d'avoir suspendu ce projet mais pour le moment je suis sur un autre programme !

LBBENSCH -> voici le site internet duquel j'ai pris le plus d'idée : http://homepages.inf.ed.ac.uk/rbf/HIPR2/featops.htm

Commentaire de bahiatoon le 19/07/2006 16:31:15

Bonjour,
Je veux implémenter un programme qui exécute  les mêmes fonctions que le votre mais en Borland C++ Builder 6, j’ai téléchargé le ZIP mais je n’ai rien compris car je suis nulle en Delphi. Je vous écris pour vous demander l’exécutable du programme, pour voir qu’es que vous avez utilisé dans la Form MDI.
Merci par anticipation

Commentaire de vienbv le 20/12/2007 00:27:24

Bonjour,

Merci pour le code source, c'est ce que je cherche, c'est très gentil.

BVV

Commentaire de malek2008 le 20/12/2010 23:26:14

merci pour le code source et bon chace continuation

Commentaire de pseudo3 le 19/04/2011 16:41:44

Bonjour,

Beau travail ... mais bigrement lent : quelle idée d'utiliser Pixels[] qui rame.
Préférer l'utilisation de Bitmap.Scanline pour la vitesse.
En plus, pour le filtre médian, la vitesse est de surcroît ralantie par le Tri des couleurs par ordre croissant avec la procedure Swap(var X, Y : Double) qui peut être avantageusement remplacée par un tri-par-comptage-d'occurences, sous réserver de remplacer le type double par de l'integer.

A+.

Commentaire de pseudo3 le 22/04/2011 13:45:15

Bonjour,

Voiçi une variante plus rapide utilisant les Scanlines et un tri-par-comptage-d'occurences appliqués au filtre Médian de Cedricbi :

type
  TRGBArray = ARRAY[0..0] OF TRGBTriple;   // élément de bitmap (API windows)
  pRGBArray = ^TRGBArray;                  // type pointeur vers tableau 3 octets 24 bits

var ScanLinesS : array[Word] of pRGBArray; // BmpSource
    ScanLinesD : array[Word] of PRGBArray; // BmpDestination

//        Filtre Médian anti poivre et sel -------------------------------------

function  FiltreMedian2(const BmpSrc : TBitMap; TailleFiltre : Integer) : tBitMap;
type      tAOB = array of byte;
var       X,  Y : Integer;
          X2, Y2 : Integer;
          Rouge,Vert,Bleu : tAOB;
          NombrePixels : Integer;
          NumPixel  : Integer;
          NumPixel2 : Integer;

          procedure TriParOcc( var T : tAOB; sens2tri : boolean);
          //        Tri du tableau T par comptage d'occurences
          //        Si sens2tri=True alors tri en ordre croissant
          var       nbOcc  : array [0..255] of integer; va,i,j,k : integer;
          begin     FillChar(nbOcc,SizeOf(nbOcc),0);  // r.à.z du tableau des occurrences
                    for i := Low(T) to High(T) // recherche des nombres d'occurrences dans le tableau des valeurs :
                    do nbOcc[ T[i] ] := nbOcc[ T[i] ] + 1;

                    k := Low(T);
                    if sens2tri = true  then // restitution en ordre croissant
                    begin for va:=0 to 255
                          do if nbOcc[va] <> 0
                             then for j:=1 to nbOcc[va] do begin T[k]:=va; inc(k); end;
                    end else // restitution en ordre décroissant
                    begin for va := 255 downto 0
                          do if nbOcc[va] <> 0
                             then for j:=1 to nbOcc[va] do begin T[k]:=va; inc(k); end;
                    end;
          end;

begin     Result:=tBitMap.create;
          with Result do begin
               width:=BmpSrc.width; height:=BmpSrc.height; PixelFormat:=pf24bit;
          end;
          for y := 0 to BmpSrc.height-1 do begin
              ScanLinesS[y] := BmpSrc.scanline[y]; // Source
              ScanLinesD[y] := Result.scanline[y]; // Destination
          end;

          TailleFiltre := TailleFiltre div 2;

          SetLength(Rouge, (TailleFiltre * 2 + 1) * (TailleFiltre * 2 + 1));
          SetLength(Vert,  (TailleFiltre * 2 + 1) * (TailleFiltre * 2 + 1));
          SetLength(Bleu,  (TailleFiltre * 2 + 1) * (TailleFiltre * 2 + 1));

          for X := 0 to BmpSrc.Width- 1 do  // Parcourir tous les pixels
          begin //frmFiltres.labX.caption:=intToStr(X); frmFiltres.labX.update;
            for Y := 0 to BmpSrc.Height - 1 do  // de l'image
            begin
              NombrePixels := 0;

              for X2 := -TailleFiltre to TailleFiltre do
                if (X + X2 >= 0) and (X + X2 < BmpSrc.Width) then  // Teste si la colonne X + X2 est sur l'image
                  for Y2 := -TailleFiltre to TailleFiltre do
                    if (Y + Y2 >= 0) and (Y + Y2 < BmpSrc.Height) then  // Teste si la ligne Y + Y2 est sur l'image
                    begin
                      Rouge[NombrePixels]:= ScanLinesS[Y + Y2, X + X2].rgbtRed;   // Mémorisation des valeurs
                      Vert[NombrePixels] := ScanLinesS[Y + Y2, X + X2].rgbtGreen; // des pixels
                      Bleu[NombrePixels] := ScanLinesS[Y + Y2, X + X2].rgbtBlue;  // dans les tableaux

                      Inc(NombrePixels);  // Augmente de 1 le nombre de pixels additionnés
                    end;

              TriParOcc(Rouge, true); // Trier les couleurs par ordre croissant
              TriParOcc(Vert,  true);
              TriParOcc(Bleu,  true);

              if Odd(NombrePixels) then
              begin
                ScanLinesD[Y, X].rgbtRed   := Rouge[NombrePixels div 2]; // Calculer la
                ScanLinesD[Y, X].rgbtGreen := Vert[NombrePixels div 2];  // couleur
                ScanLinesD[Y, X].rgbtBlue  := Bleu[NombrePixels div 2];  // du pixel
              end
              else
              begin
                ScanLinesD[Y, X].rgbtRed  := trunc((Rouge[NombrePixels div 2] + Rouge[NombrePixels div 2 + 1]) / 2); // Calculer la
                ScanLinesD[Y, X].rgbtGreen:= trunc((Vert[NombrePixels div 2]  + Vert[NombrePixels div 2 + 1]) / 2);  // couleur
                ScanLinesD[Y, X].rgbtBlue := trunc((Bleu[NombrePixels div 2]  + Bleu[NombrePixels div 2 + 1]) / 2);  // du pixel
              end;
            end;
          end;
end; // FiltreMedian2

Resultats des tests de vitesses comparatifs pour une image-bitMap de 500x347 pixels et une Taille de filtre égale à 10 :
- avec le code de Cedricbi : Mis 63250 millisecondes (hors durée de la prévisualisation)
- avec le code ci-dessus   : Mis 2687 millisecondes soit 23,5 fois plus rapide.

A+.


 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,342 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales