程序是基于MFC的Gabor滤波
BOOL CDibImage::Gabor1(double sigma, double theta, double freq, double* gr)
{
   double pi=3.1415926;
   int x,y;
   double xPrime,yPrime;
   double theta1=theta*pi/180;
   for (x = -int(sigma); x <= int(sigma); x++)
{
for (y = -int(sigma); y <= int(sigma); y++)

  xPrime = x * cos(theta1) + y * sin(theta1);
              yPrime = y * cos(theta1) - x * sin(theta1);
             *(gr+(2*int(sigma)+1)*(x+int(sigma))+y+int(sigma))
 =(1/(2*pi*pow(sigma,2)))*exp(-0.5*(pow(xPrime/sigma,2)+pow(yPrime/sigma,2)))*cos(2*pi*freq*xPrime);
  
        }

return TRUE;
}以上是在DIB类里面编写的函数,应该是在指针处有问题。请各位大侠指点一下,下面是在VIEW类中的调用
void CGaborView::OnGaborfilter() 
{
CGaborDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR    lpDIBBits; // 指向DIB象素指针
LPSTR lpDIBReal; // 指向实部滤波后DIB的指针
LPSTR lpDIBImag; // 指向虚部滤波后DIB的指针 unsigned char* lpSrc; // 指向源图像的指针
unsigned char* lpSrc1; // 指向源图像实部滤波后的指针
unsigned char* lpSrc2; // 指向源图像虚部滤波后的指针 CSetting dlgSet;
double theta;
double sigma;
double freq;
double* gr=0;           //滤波器实部
double* gi=0;           //滤波器虚部
int i,j;
FLOAT fTemp; // 中间变量 lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB); if(dlgSet.DoModal()!=IDOK)
{
         return;
}
   theta  = dlgSet.m_theta;
   sigma = dlgSet.m_sigma;
   freq   =  dlgSet.m_freq;
   delete dlgSet;
   BeginWaitCursor();
   //构造滤波器实部和虚部
   pDoc->GetDibImage()->Gabor1(sigma,theta,freq, gr);
   pDoc->GetDibImage()->Gabor2(sigma,theta,freq, gi);

解决方案 »

  1.   

    CGaborDoc* pDoc = GetDocument();
    看看pDoc是否有效指针
      

  2.   


    就是红色的语句那里存在问题,应该是等式左边的问题,但是对于指针没有很深入的理解,所以还请指教会不会是指针初始化的问题导致?我在调用这个函数之前初始化为double* gr=0,这样初始化没问题吗?在这里用到指针是为了保存一个二维数组的值,由于维数不确定所以在函数编写过程中只能使用指针代替
      

  3.   


    这里是MFC程序,读入一幅图像就有相应的pDoc,问题应该是在指针那里,但是对于指针越界这一块了解的不够深入所以没发现问题所在
      

  4.   

    double* gr=0 表示空指针
      

  5.   

    我在view类里面改成double* gr =new double[99999];分配内存就可以了但是问题是这样只是自己盲目设置的一个很大的数字,程序中也会用到其他的指针,如果都这样初始化似乎不好请问在这里指针应该如何初始化呢?