Salve a tutti, ho un problema con la seguente porzione di codice. Non capisco perchè la funzione plotCircle e in particolare setPix generano questo errore(credo). L'errore è saltato fuori dopo aver aggiunto la matrice di int Acc. in prima istanza era un file PGM ,non creava errori ma non mi bastava il massimo raggiungibile.
premetto che , il programma prende in ingresso un immagine B/N. per ogni punto bianco deve tracciare una circonferenza all'interno di una matrice Acc
void trasformata_Hough(PGMFile *in,Mat *Acc, PGMFile *originale)
{
for ( int r = 0; r < Acc->rows_; r++ )
{
for ( int c = 0; c < Acc->cols_; c++ )
Acc->data_[r*Acc->cols_ + c]=0; //setto l'accumulatore su 0,quindi come un immagine nera
}
int raggio,Xc,Yc;
for(raggio=25;raggio<=35;raggio++) //iterazioni per la ricerca di un raggio compreso nel range assegnato
{
for ( int r = 0; r < in->rows_; r++ )
{
for ( int c = 0; c < in->cols_; c++ ) //scan dell'immagine in ingresso
{
if( in->data_[r*in->cols_ + c]!=0 ) //cerco tutti i punti non neri
{ //e uso quelle coordinate come centro
Xc=r;
Yc=c;
plotCircle(Acc,Xc,Yc,25);
}
}
}
}
}
void plotCircle(Mat *img, int xc, int yc, int r)
{
int x = -r, y = 0, err = 2-2*r;
do
{
setPix(img, xc-x, yc+y); /*I. Quadrant */
setPix(img, xc-y, yc-x); /* II. Quadrant */
setPix(img, xc+x, yc-y); /* III. Quadrant */
setPix(img, xc+y, yc+x); /* IV. Quadrant */
r = err;
if (r <= y) err += ++y*2+1; /* e_xy+e_y < 0 */
if (r > x || err > y) err += ++x*2+1; /* e_xy+e_x > 0 or no 2nd y-step */
} while (x < 0);
}
void setPix(Mat *img, int xc, int yc)
{
img->data_[xc*img->cols_+yc]+=1;
}