/*Zera variável auxiliar */
for (y=0;y<256;y++) /* zera o vetor */
valores[y]=0;
/* Lê valores da estrutura */
for (y=0;y<Fonte->Height;y++)
for (x=0;x<Fonte->Width;x++)
valores[(unsigned
char)Fonte->Data[x][y]]+=1;
/*Grava arquivo para o gnuplot*/
for (y=0;y<256;y++)
fprintf(File,"%d\n",valores[y]);
fflush(File);
fclose (File);
}/* Histograma */
Imagem da Lena Binarizada segundo um Limiar
********************************************************************
função para binarização
de uma imagem, segundo um limiar passado
como parâmetro.
Gray *Fonte -> Estrutura que contem a imagem
Gray *Nova -> Estrutura que conterá
a imagem binarizada
int Limiar -> Limiar de binarização
da imagem
*******************************************************************
*/
void Binariza(Gray Fonte, Gray *Nova, int Limiar){
int y,x;
Nova->Height=Fonte.Height;
Nova->Width=Fonte.Width;
for (y=0;y<Fonte.Height;y++)
for (x=0;x<Fonte.Width;x++)
Nova->Data[x][y]=((unsigned char)Fonte.Data[x][y]>Limiar)?255:0;
}/*Binariza*/
Detecção de Bordas pelo método de
Roberts
********************************************************************
função para detecção
de bordas de uma imagem, pelo método de
Roberts segundo um limiar passado
como parâmetro. Se este limiar for maior
q. 255 considera-se sem limiar.
Gray *Fonte -> Estrutura que contem a imagem
Gray *Nova -> Estrutura que conterá
a imagem de bordas
int Limiar -> Limiar de binarizacao da imagem
********************************************************************
void Roberts(Gray Fonte, Gray *Nova, int Limiar){
int y,x;
int tmp;
Nova->Height=Fonte.Height;
Nova->Width=Fonte.Width;
for (y=0;y<Fonte.Height-1;y++)
for (x=0;x<Fonte.Width-1;x++){
tmp = sqrt((pow((Fonte.Data[x+1][y+1] - Fonte.Data[x][y]),2) +
pow((Fonte.Data[x+1][y] - Fonte.Data[x][y+1]),2)));
if(Limiar>255)
Nova->Data[x][y]=tmp;
else
Nova->Data[x][y]=(tmp>Limiar)?255:0;
}/*for*/
}/*Roberts*/
Detecção de Bordas pelo método de Sobel
********************************************************************
função para detecção de bordas de uma imagem, pelo método de
Sobel segundo um limiar passado
como parâmetro. Se este limiar for 0(Zero) considera-se sem limiar.
Gray *Fonte -> Estrutura que contem a imagem
Gray *Nova -> Estrutura que conterá a imagem de bordas
int Limiar -> Limiar de binarização da imagem
********************************************************************
void Sobel(Gray Fonte, Gray *Nova, int Limiar){
int y,x;
int tmp;
int tmpX,tmpY;
unsigned char M[3][3],N[3][3];
Nova->Height=Fonte.Height;
Nova->Width=Fonte.Width;
for (y=1;y<Fonte.Height-1;y++)
for (x=1;x<Fonte.Width-1;x++){
tmpX=tmpY=0;
tmpX=-Fonte.Data[x-1][y-1]-2*Fonte.Data[x][y-1]-Fonte.Data[x+1][y-1]+
Fonte.Data[x-1][y+1]+2*Fonte.Data[x][y+1]+Fonte.Data[x+1][y+1];
tmpY=-Fonte.Data[x-1][y-1]+Fonte.Data[x+1][y-1]-2*Fonte.Data[x-1][y]+
2*Fonte.Data[x+1][y]-Fonte.Data[x-1][y+1]+Fonte.Data[x+1][y+1];
tmp =(int)(sqrt((pow(tmpX,2) + pow(tmpY,2))));
if(Limiar >255)
Nova->Data[x][y]=tmp;
else
Nova->Data[x][y]=(tmp>Limiar)?255:0;
}/*for*/
}/*Sobel*/