- void Filtro_Sobel(unsigned char img[][MAXLARGURA][3], int alt, int larg)
- {
- int i, j ,l, valor, valor2;
- float media;
- unsigned char img2[MAXALTURA][MAXLARGURA][3];
- cout << "Processando a imagem, Aguarde...";
- for (i=0;i<alt;i++)
- for(j=0;j<larg;j++)
- for (l=0;l<3;l++)
- img2[i][j][l]=img[i][j][l];
- for (i=0;i<alt;i++)
- for(j=0;j<larg;j++)
- for (l=0;l<3;l++)
- {
- if (i==0 && j==0)
- {
- valor=((int)img2[i+1][j][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor);
- valor2=((int)img2[i][j+1][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (i==0 && j==(MAXLARGURA-1))
- {
- valor=((int)img2[i+1][j-1][l]*-1)+((int)img2[i+1][j][l]*-2);
- Normalizar(valor);
- valor2=((int)img2[i][j-1][l]*2)+((int)img2[i+1][j-1][l]*1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (i==(MAXALTURA-1) && j==0)
- {
- valor=((int)img2[i-1][j][l]*2)+((int)img2[i-1][j+1][l]*1);
- Normalizar(valor);
- valor2=((int)img2[i-1][j+1][l]*-1)+((int)img2[i][j+1][l]*-2);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (i==(MAXALTURA-1) && j==(MAXLARGURA-1))
- {
- valor=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j][l]*2);
- Normalizar(valor);
- valor2=((int)img2[i-1][j-1][l]*1)+((int)img2[i][j-1][l]*2);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (i==0)
- {
- valor=((int)img2[i+1][j-1][l]*-1)+((int)img2[i+1][j][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor);
- valor2=((int)img2[i][j-1][l]*2)+((int)img2[i][j+1][l]*-2)+((int)img2[i+1][j-1][l]*1)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (j==(MAXLARGURA-1))
- {
- valor=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j][l]*2)+((int)img2[i+1][j-1][l]*-1)+((int)img2[i+1][j][l]*-2);
- Normalizar(valor);
- valor2=((int)img2[i-1][j-1][l]*1)+((int)img2[i][j-1][l]*2)+((int)img2[i+1][j-1][l]*1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if (i==(MAXALTURA-1))
- {
- valor=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j][l]*2)+((int)img2[i-1][j+1][l]*1);
- Normalizar(valor);
- valor2=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j+1][l]*-1)+((int)img2[i][j-1][l]*2)+((int)img2[i][j+1][l]*-2);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- if(j==0)
- {
- valor=((int)img2[i-1][j][l]*2)+((int)img2[i-1][j+1][l]*1)+((int)img2[i+1][j][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor);
- valor2=((int)img2[i-1][j+1][l]*-1)+((int)img2[i][j+1][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- else
- {
- valor=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j][l]*2)+((int)img2[i-1][j+1][l]*1)+((int)img2[i+1][j-1][l]*-1)+((int)img2[i+1][j][l]*-2)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor);
- valor2=((int)img2[i-1][j-1][l]*1)+((int)img2[i-1][j+1][l]*-1)+((int)img2[i][j-1][l]*2)+((int)img2[i][j+1][l]*-2)+((int)img2[i+1][j-1][l]*1)+((int)img2[i+1][j+1][l]*-1);
- Normalizar(valor2);
- media=(valor+valor2)/2.0;
- valor2 = media - (int)media;
- if (valor2>=0.5)
- media=media+1;
- valor = media;
- img[i][j][l]=(unsigned char)valor;
- }
- }
- cout << "\nFeito.\n";
- }