UNIX,Linux,Retele,Programare

05 Jul 08 13:18

AnDrEwBoY
Apprentice
Înregistrat: 04 Jul 08
Mesaje: 11

Picture Compare[Algoritm][C#]



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

Offline

 

» Failure is not an option, it's built-in

tutoriale unix,tutoriale linux,tutoriale bsd

Scuze de offtopic


38.103.63.61 <- te-am prins

Antet forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson



Ethical hacking and programming community