Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Noiembrie 22, 2008, 04:54:36 pm
Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
Noutăţi: SmLex DeviantART
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: Picture Compare[Algoritm][C#]  (Citit de 262 ori)
0Utilizatori şi 1 Vizitatori
AnDrEwBoY
Newbie
*
Deconectat Deconectat

Mesaje: 16


Picture Compare[Algoritm][C#], Iulie 05, 2008, 11:18:22 am

Cod:
/*
         * Aceasta este una din metodele de comparare a doua imagini!Mai exact functia detecteaza diferentele dintre acestea!
         * Metoda poate fi imbunatatita ajungandu`se chiar la detectarea miscarii in timpul rularii unui webcam
         * sau al unui alt aparat de filmat ,comparandu`se imaginea curenta luata de la webcam cu ultima
         *
         */
        private static Bitmap Compare_Picture(Bitmap picOriginal, Bitmap picCompare)
        {            
            int Inten = 5; // intensitatea scanarii(pentru a nu dura prea mult scanarea sugerez 5)
            int Tolerance = 100; // toleranta reprezinta valoarea pe care o accepti ca eroare(erorile imaginii pot fi cauzate de aparatul slab cu care au fost facute pozele dar exista si alte motive)
            Color OldColor = new Color(); // aceasta variabila va tine RGB`ul pentru picCompare la pixelul curent(i,j)
            Color NewColor = new Color(); // aceasta variabila va tine RGB`ul pentru picCompare la pixelul curent(i,j)
            bool[,] PSt = new bool[picOriginal.Width, picOriginal.Height]; // un array boolean care ne va zice starea pixelilor(true = pixelul a ramas acelasi / false = pixelul e diferit)
           

            for (int i = 1; i < picOriginal.Width / Inten; i++)
            {
                for (int j = 1; j < picOriginal.Height / Inten; j++)
                {                                
                    NewColor = picCompare.GetPixel(i * Inten, j * Inten); //luam RGB`ul pixelului curent(i,j) din imaginea originala
                    OldColor = picOriginal.GetPixel(i * Inten, j * Inten); //luam RGB`ul pixelului curent(i,j) din imaginea ce va fi comparata cu cea originala
                   
                    /*
                     * Daca R1 - R2 < Tolerance(daca diferenta dintre valoarea culorii rosu din imaginea originala si cea din a 2a este mai mica decat "Tolerance"
                     * && si acelasi lucru pentru culoarea verde
                     * && si acelasi lucru pentru culoarea albastru                    
                     */
                    if (Math.Abs((int)NewColor.R - (int)OldColor.R) < Tolerance && Math.Abs((int)NewColor.G - (int)OldColor.G) < Tolerance && Math.Abs((int)NewColor.B - (int)OldColor.B) < Tolerance)
                    {
                        // pixelul a ramas acelasi
                        PSt[i, j] = true;                        
                    }
                    /*
                     * daca nu atunci verificam daca exista miscare adevarata
                     * 1. i,j este diferit de cat cel din imaginea originala
                     * 2. i,j-1 este diferit de cat cel din imaginea originala
                     * 3. i,j+1 este diferit de cat cel din imaginea originala
                     * 4. i-1,j este diferit de cat cel din imaginea originala
                     * 5. i+1,j este diferit de cat cel din imaginea originala
                     */
                    else
                    {
                        PSt[i, j] = false;
                        //setam pixelul rosu(adik exista miscare dar nu reala)
                        picCompare.SetPixel(i * Inten, j * Inten, Color.Red);
                        if (PSt[i, j] == false)
                            if (PSt[i, j + 1] == false)
                                if (PSt[i, j - 1] == false)
                                    if (PSt[i + 1, j] == false)
                                        if (PSt[i - 1, j] == false)// avem miscare reala
                                        {                                            
                                            picCompare.SetPixel(i * Inten, j * Inten, Color.Green);
                                        }                      
                    }                    
                   
                }                
            }
            return picCompare; //returnam imaginea ce trebuie comparata dar cu modificari:)
        }

Utilizare:

 ->Pe form avem nevoie de un buton si 2 PictureBox( picBox, picBoxCompare)
 ->Introduceti codul acesta pentru form
Cod:
        private void Form1_Load(object sender, EventArgs e)
        {
            string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:\\", "");
            bmp1 = new Bitmap(path + @"\1.JPG");
            bmp2 = new Bitmap(path + @"\2.JPG");
            picBox.Image = bmp1;
            picBoxCompare.Image = bmp2;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            picBoxCompare.Image = Compare_Picture(bmp1, bmp2);
        }
Have fun!AnDrEwBoY
Memorat
HostGator
Newbie
*
Mesaje: Multe

Reclamă cu aligatori
 

Ai auzit de aligatorul care ofera hosting?
 
   
Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro