Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include "cuda_runtime.h"
- #include "device_launch_parameters.h"
- #include <math.h>
- __global__ void radialAverage(double** image, int x_center, int y_center)
- {
- int i, x, y;
- const int x_size = 400;
- const int y_size = 400;
- int thread = blockIdx.x*blockDim.x+threadIdx.x;
- double angle = 0;
- double dAngle = M_PI/360;
- double radImgMat[x_size][y_size];
- double angleMatPi[x_size][y_size];
- //radImMap erstellen
- for( x = 0; x < x_size; x++) {
- for( y = 0; y < y_size; y++) {
- radImgMat[x][y] = sqrt((double)(x+1-x_center)*(x+1-x_center) + (y+1-y_center)*(y+1-y_center));
- }
- }
- //Angle-Matrix (pi-pi) erstellen
- for ( x = 0; x < x_size; x++) {
- for( y = 0; y < y_size; y++) {
- float xD = x+1-x_center;
- float yD = y+1-y_center;
- if(yD>0) {
- angleMatPi[x][y] = -1*(atan(xD/yD)+M_PI/2)+M_PI;
- } else if(yD==0 && xD<0) {
- angleMatPi[x][y] = M_PI;
- } else if(yD==0 && xD>0) {
- angleMatPi[x][y] = 0;
- } else {
- angleMatPi[x][y] = -1*(atan(xD/yD)+M_PI/2);
- }
- }
- }
- //Cut ImgMat
- for(x=0; x < x_size; x++) {
- for(y = 0; y < y_size; y++) {
- if((angleMatPi[x][y] < (angle-dAngle)) || (angleMatPi[x][y] > (angle+dAngle))) {
- image[x][y] = 0;
- }
- }
- }
- }
- int *d_image;
- cudaMalloc((void**)&d_image,x_size*y_size*sizeof(int)); //allocate memory on the GPU for the image
- cudaMemcpy(d_image,image,x_size*y_size*sizeof(int),cudaMemcpyHostToDevice); //copy the image to GPU global memory
- radialAverage<<<numBlocks,numThreads>>>(d_image,x_size,y_size,x_center,y_center); //Call CUDA kernel with device pointer to image data
- image[y*x_size + x];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement