用户
 找回密码
 立即注册
freshmen 该用户已被删除
发表于 2013-9-22 23:58:23
70942
请问我在处理二值图像的实验,其中二值图像的像素值是0和255,因为图像中的数据只有0和255两个数,
所以每一行中就能统计像素值为255的个数,现在的算法是从最后一行开始统计每一行中255的个数大于20个时,记录下此时的行号,程序停止。如果不大于20个则行号减小,直到最上边的那一行。
按照版主的点播,我的程序编写如下,但是对程序还是有点不理解,请看看我的编程思路符合要求吗?
__global__ void Coordinate(uchar*Image,int width,int height,int*kk_y)
{
        __shared__ uchar S_Image[512];

        int tid=threadIdx.x;
       
        for(int j=height-1;j>=0;j++)
        {
                S_Image[tid]=Image[tid+j*width];
                __syncthreads();

                for(int i=blockIdx.x/2;i>0;i/=2)
                {
                        if(tid<i)
                        {
                                S_Image[tid]=S_Image[tid+i];
                        }

                }
                if(S_Image[0]>=(uchar)(255*20))
                {
                          kk_y[0]=j;
                         break;
                }
        }
}

使用道具 举报 回复
发表于 2013-9-23 00:07:50
LZ您好:

您的代码中有很多显而易见的BUGs。

比如,您写规约,每步不用同步么?
比如,让您通过数据规约求和的方式简单获得每行中255的个数是否超过20的的判定,有说过让您在uchar的类型里面加么?您这么加不怕溢出么?
比如,您的循环变量起始值是height-1,终值判断是>=0,每次j++,您不怕死循环么?

夜已深沉,请LZ自重。
使用道具 举报 回复 支持 反对
发表于 2013-9-23 09:03:43
以及您所有的block都会向同一个global memory位置写入数据,请问这样是符合算法意图的行为么?这样会导致怎样的结果?
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册