1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
image_t *convoluer(image_t *src, noyau_t *pn)
{
image_t* dst;
/*test si src ou pn est NULL ou pas*/
if(!src || !pn){
printf("image ou noyau inexistants");
return NULL;
}
/* copier l'image src dans dst*/
dst=copier_image(src);
int i,coef_norm=0;
for(i=0;i<(pn->dim)*pn->dim;++i)
coef_norm+=pn->coeffs[i];
int j,ni,nj,ibord,jbord;
int dim=pn->dim;
for(i=0;i<src->h;++i){
for(j=0;j<src->w;j++){
int val_cov=0;
for(ni=0;ni<dim;ni++){
for(nj=0;nj<dim;nj++){
ibord=i+ni-(dim>>1);
if(ibord<0) ibord=0;
if(ibord>=src->h) ibord=src->h-1;
jbord=j+nj-(dim>>1);
if(jbord<0) jbord=0;
if(jbord>=src->w) jbord=src->w-1;
val_cov+=VAL(src,ibord,jbord)*(pn->coeffs[ni*dim+nj]);
}
}
if(coef_norm!=0){
VAL(dst,i,j)=abs(val_cov)/coef_norm;
}
else{
VAL(dst,i,j)=abs(val_cov);
}
}
}
return dst;
} |
Partager