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 41 42 43
|
//imgOut l'accumulateur
//imgIn image d'origine
// nr et nc correspondent a la taille de l'image
__global__ void
Hough(int* imgOut, unsigned char* imgIn, int nr, int nc, int Pitch,int rmax, int angle_max)
{
int t = 200;
int yc, xc;
yc = (int)(nr/2);
xc = (int)(nc/2);
double rr = 0.0;
int ra;
double conv = 3.1415926535/180.0;
unsigned char * houghImg= (unsigned char *) (((char *) imgIn)+blockIdx.x*Pitch);
for ( int i = threadIdx.x; i < nc; i += blockDim.x )
{
if(houghImg[i] >= t)
{
//si la valeur de l'image (sur laquelle a été effectuée une detection de contour puis une binarisation vaut 1
for(int alpha = 0 ; alpha < angle_max ; alpha++)
{
rr =(yc-blockIdx.x) * sin((double)(alpha*360/angle_max)*conv/2)+(i-xc) * cos((double)(alpha*360/angle_max)*conv/2);
if(rr<0.0)
{
ra=(int)rr;
}
else
{
ra=(int)rr+1;
}
imgOut[alpha+((rmax+ra)*360)]++ ;
}
}
}
} |
Partager