void Detekcja_krawedzi_metodaSobela(PGM obraz_IN)
{
PGM obraz_OUT;
FILE *nowy_plik;
int i,j;
nowy_plik = fopen(("%s",strcat(obraz_IN.nazwa, "-detekcja krawedzi.pgm")), "w");
strcpy(obraz_OUT.magic_number, obraz_IN.magic_number);
obraz_OUT.Maxval = obraz_IN.Maxval;
obraz_OUT.wysokosc = obraz_IN.wysokosc;
obraz_OUT.szerokosc = obraz_IN.szerokosc;
obraz_OUT.pixel = (int **)malloc(obraz_OUT.wysokosc * sizeof(*obraz_OUT.pixel));
for (i = 0; i < obraz_OUT.wysokosc; i++)
obraz_OUT.pixel[i] = (int *)malloc(obraz_OUT.szerokosc * sizeof(**obraz_OUT.pixel));
for(i=0; i < obraz_OUT.wysokosc; i++)
{
for(j=0; j < obraz_OUT.szerokosc; j++)
{
{
if(((i > 0) && (i < obraz_IN.wysokosc - 1)) && ( j == 0 ))
obraz_OUT.pixel[i][j] = obraz_IN.pixel[i-1][j+1] + 2 * obraz_IN.pixel[i][j+1] + obraz_IN.pixel[i+1][j+1];
else if(((i > 0) && (i < obraz_IN.wysokosc - 1)) && ( j == obraz_IN.szerokosc - 1 ))
obraz_OUT.pixel[i][j] = -1* (obraz_IN.pixel[i-1][j-1] + 2 * obraz_IN.pixel[i][j-1] + obraz_IN.pixel[i+1][j-1]);
else if(((j > 0) && (j < obraz_IN.szerokosc - 1)) && ( i == 0 ))
obraz_OUT.pixel[i][j] = 2 * obraz_IN.pixel[i][j+1] + obraz_IN.pixel[i+1][j+1] - 2 * obraz_IN.pixel[i][j-1] - obraz_IN.pixel[i+1][j-1];
else if(((j > 0) && (j < obraz_IN.szerokosc - 1)) && ( i == obraz_IN.wysokosc - 1 ))
obraz_OUT.pixel[i][j] = obraz_IN.pixel[i-1][j+1] + 2 * obraz_IN.pixel[i][j+1] - obraz_IN.pixel[i-1][j-1] - 2 * obraz_IN.pixel[i][j-1];
else if(i == 0 && j ==0)
obraz_OUT.pixel[i][j] = 2 * obraz_IN.pixel[i][j+1] + obraz_IN.pixel[i+1][j+1];
else if(i == 0 && j == obraz_IN.szerokosc - 1)
obraz_OUT.pixel[i][j] = -2 * obraz_IN.pixel[i][j-1] - obraz_IN.pixel[i+1][j-1];
else if(i == obraz_IN.wysokosc - 1 && j == 0)
obraz_OUT.pixel[i][j] = obraz_IN.pixel[i-1][j+1] + 2 * obraz_IN.pixel[i][j+1];
else if(i = obraz_IN.wysokosc - 1 && j == obraz_IN.szerokosc - 1)
obraz_OUT.pixel[i][j] = -2 * obraz_IN.pixel[i][j-1] - obraz_IN.pixel[i-1][j-1];
}
obraz_OUT.pixel[i][j] = obraz_IN.pixel[i-1][j-1] + 2 * obraz_IN.pixel[i][j-1] + obraz_IN.pixel[i+1][j-1] - obraz_IN.pixel[i-1][j+1] - 2 * obraz_IN.pixel[i][j+1] - obraz_IN.pixel[i+1][j+1];
}
}
fprintf(nowy_plik, "%s\n%d %d\n%d\n", obraz_OUT.magic_number, obraz_OUT.szerokosc, obraz_OUT.wysokosc, obraz_OUT.Maxval);
for (i = 0; i < obraz_OUT.wysokosc; i++)
{
for (j = 0; j < obraz_OUT.szerokosc; j++)
{
fprintf(nowy_plik, "%d ", obraz_OUT.pixel[i][j]);
}
fprintf(nowy_plik, "\n");
}
Usuniecie_obrazu(obraz_OUT);
fclose(nowy_plik);
}
Witam! W powyższej funkcji muszę mieć, w którymś miejscu błąd merytoryczny. Patrzyłem na funkcję mnóstwo czasu i po prostu nie mogę go znaleźć. Wykorzystanie struktury w funkcji oraz wykorzystanie funkcji w main są raczej poprawne, ponieważ dla prostej operacji odbicia wszystko działa. Strzelam, że coś w pętli się poknociło. Domyślam się też, że jest prostsze wykorzystanie metody Sobela, ale postanowiłem to zrobić najprościej jak krowie na rowie.