Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

AW: Winkelerkennung mit Webcam für Bauelemente

  Alt 23. Jan 2012, 19:46
Das Programm ist in C# geschrieben, hier mal der wesentliche Code:
PHP-Quellcode:
        private void CalcAngle(ref CalcInfo img)
        {
            // Flächenmomente ermitteln
            double Ixy = 0,
                Ixx = 0,
                Iyy = 0;

            for (int y = 0; y < img.Height; y++)
            {
                for (int x = 0; x < img.Width; x++)
                {
                    // Über alle Pixel des Bildes iterieren
                    if (img.rgbValues[y * img.Width + x] == img.color) // Falls der Pixel zum Objekt gehört
                    {
                        // Momente 2. Ordnung
                        Ixx += (y - img.CenterY) * (y - img.CenterY); // CenterXY beschreibt den Flächenmittelpunkt
                        Iyy += (x - img.CenterX) * (x - img.CenterX);
                        Ixy += (x - img.CenterX) * (y - img.CenterY);
                    }
                }
            }

            // Winkel berechnen
            double phi = Math.Atan2(2 * Ixy, Iyy - Ixx);
            img.Angle = -0.5 * phi;
        }
Vorher muss noch der Schwerpunkt berechnet werden. Der Winkel der errechnet wird, beschreibt die Neigung der ersten Hauptachse ("Längsachse") zur Waagerechten.

Zur Lage der Hauptachsen: http://de.wikipedia.org/wiki/Flächenträgheitsmoment
  Mit Zitat antworten Zitat