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
Vielen Dank im Voraus ;-)
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 ;-)