2012年3月13日

影像處理:Gaussian filtering&&First-Derivative



1 則留言:

  1. #include
    #include
    #include
    #include
    using namespace std;

    void convolution(IplImage *src,IplImage *dst,int sigma,IplImage *dst1,IplImage *dst2)
    {
    double temp=0.0;
    double value=0.0;
    CvScalar point_dst_all,point_dst_com,A,B;
    point_dst_com=cvScalar(0,0,0);
    point_dst_all=cvScalar(0,0,0);
    int size=(6*sigma)+1;
    int half=((6*sigma)/2);
    double *arr = new double[size];
    for(int x=-half;x<=half;x++)
    {
    temp =-(((double)x*(double)x)/((double)2*(double)sigma*(double)sigma));
    value=(-((double)x/((double)sigma*(double)sigma))*(exp(temp)));
    *(arr+(x+half))=value;
    }
    for(int i=0;iheight;h++)
    {
    for(int w=half;wwidth-size;w++)
    {
    point_dst_com=cvScalar(0,0,0);
    point_dst_all=cvScalar(0,0,0);
    for(int i=0;iheight-size;h++)
    {
    for(int w=0;wwidth-size;w++)
    {
    point_dst_com=cvScalar(0,0,0);
    point_dst_all=cvScalar(0,0,0);
    for(int i=0;iheight;h++)
    {
    for(int w=0;wwidth;w++)
    {
    A=cvGet2D(dst1,h,w);
    B=cvGet2D(dst2,h,w);
    A.val[0]=A.val[0]+B.val[0];
    cvSet2D(dst,h,w,A);
    }
    }

    delete [] arr;
    }


    int main()
    {
    int sigma;
    cout<<"請輸入標準差:"<>sigma;
    int size=(6*sigma)+1;
    IplImage *src, *pic_smooth_sigma;
    src=cvLoadImage("D:\\img\\Motocycle.bmp",0);
    pic_smooth_sigma=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);//IPL_DEPTH_64F
    IplImage *dst =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
    IplImage *dst1 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
    IplImage *dst2 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
    CvScalar point_dst_all,point_dst_com;
    //cvCvtColor(src,dst,CV_BGR2GRAY);
    cvSmooth(src,pic_smooth_sigma,CV_GAUSSIAN,size,1,sigma);
    convolution(src,dst,sigma,dst1,dst2);
    cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);
    cvShowImage("src",src);
    cvShowImage("dst",dst);
    cvNamedWindow("pic_smooth_sigma",CV_WINDOW_AUTOSIZE);
    cvShowImage("pic_smooth_sigma",pic_smooth_sigma);

    cvWaitKey(0);
    cvDestroyWindow("src");
    cvReleaseImage(&src);
    cvDestroyWindow("pic_smooth_sigma");
    cvReleaseImage(&pic_smooth_sigma);
    cvDestroyWindow("dst");
    cvReleaseImage(&dst);
    }

    回覆刪除