Fragestellung zu Kantendetektion in ImageJ - Kantenrichtung durch Gadienten

Davicito

Erfahrenes Mitglied
Hallo, ich benötige mal einen Denkanstoß in sachen Kantendetektion.
Ich habe mit dem Sobeloperator Kanten herforgehoben und die einzelnen Gadienten in den Punkten berechnet.

Meine Frage ist, wie kann ich jetzt mit den einzelnen Werten die Kantenrichtung und kantenwinkel bestimmen, mit Hilfe der Normalenform/Hessische Normalform.

Hier mein fereinfachter Code zum Sobel
Code:
   //Anwendung des horizontalen und vertikalen Sobel-Filter (3x3 Matrix)
   for(int i = roi.y + 2; i < roi.y + roi.getHeight() - 2; i += 1)
   {
      for(int j = roi.x +2 ; j < roi.x + roi.getWidth() - 2; j += 1)
      {
          double sobel_horz = 127;
          double sobel_vert = 127;	          

	  //Faltungskern vom Sobeloperator	       
          pix_sob[0] = pixels_gauß[(i-1)*w+j-1]&0xff;
          pix_sob[1] = pixels_gauß[(i-1)*w+j]&0xff;
          pix_sob[2] = pixels_gauß[(i-1)*w+j+1]&0xff;

          pix_sob[3] = pixels_gauß[i*w+j-1]&0xff;
          pix_sob[4] = pixels_gauß[i*w+j]&0xff;		         //----> Kern
          pix_sob[5] = pixels_gauß[i*w+j+1]&0xff;

          pix_sob[6] = pixels_gauß[(i+1)*w+j-1]&0xff;
          pix_sob[7] = pixels_gauß[(i+1)*w+j]&0xff;
          pix_sob[8] = pixels_gauß[(i+1)*w+j+1]&0xff;
         
         // Berechnung des horizonalten Sobeloperator  
         sobel_horz = sobel_horz + 1 * pix_sob[0] + 2 * pix_sob[1] + 1 * pix_sob[2] + 0 *
                             pix_sob[3] + 0 * pix_sob[4] + 0 * pix_sob[5]  - 1 * pix_sob[6] - 2 *
                             pix_sob[7] -1 * pix_sob[8];

         // Berechnung des vertikalen Sobeloperator 
         sobel_vert = sobel_horz + 1 * pix_sob[0] + 0 * pix_sob[1]  - 1 * pix_sob[2] + 2 *
                            pix_sob[3] + 0 * pix_sob[4]  - 2 * pix_sob[5] + 1 * pix_sob[6] + 0 * 
                            pix_sob[7] -1 * pix_sob[8];
		                                         
         sobel_erg = Math.abs(sobel_horz) + Math.abs(sobel_vert);                           

         // Gradientenberechnung zur Bestimmung Kantenrichtung  
         pix_atan[i * w + j] = Math.atan( sobel_horz / sobel_vert );
		         
         if(sobel_erg<0)
         { 
             sobel_erg = 0;
          }
            else if(sobel_erg>255) 
            {
               sobel_erg = 127;
            }
          gradient_P = Math.sqrt(Math.pow(sobel_horz, 2) + Math.pow(sobel_vert, 2));	
                                     
          pixels_sobel[i*w+j] = (byte)sobel_erg;
       }
     }

Vielen Dank im Voraus ;-)
 
Zurück