• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34, comments - 0, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Gabor濾波小結

            Posted on 2012-07-14 11:09 polly 閱讀(16580) 評論(0)  編輯 收藏 引用 所屬分類: 模式識別&圖像處理

            轉載請注明:http://www.shnenglu.com/polly-yang/

            一.房屋檢測小結   

                一開始,直接用LSDLine Segment Detector)檢測VHRVery High Resolution)遙感衛(wèi)星圖像中的房屋,效果很屎。效果很屎的主要原因是因為存在各種干擾,概括下來,主要有:
                  1.
            道路。道路干擾性強主要是因為道路呈現(xiàn)各種形態(tài),彎曲,筆直,寬度不一。同時還有橋梁也影響檢測率,橋梁附近呈現(xiàn)較好的陰影效果和Line Segment,會干擾幾何檢測方法。
                  2.
            森林或農田。利用LSD檢測Line Segment的時候,由于LSD原理限制,在森林或農田區(qū)域,會形成較多的Line Segment,影響幾何檢測方法。
                  3.
            房屋本身。實際VHR遙感圖像中,房屋形態(tài)較多,大小差異較大,且有的呈現(xiàn)不規(guī)則的形狀,有的成像后,邊緣模糊,不利于產(chǎn)生較好的LSD結果。
                  4.
            遮擋。主要是被森林遮擋,屋頂形狀不完整,不利于設計算法判別。
                  6.
            光照不均,屋頂自身紋理。光照不均和屋頂自己紋理不均勻,都會加大VHR中物體的檢測難度。     
               

            二.Gabor 濾波器簡介(部分資料來自維基百科)

               在圖像處理領域,Gabor濾波器是一個用于邊緣檢測的線性濾波器。Gabor濾波器的頻率和方向表示接近人類視覺系統(tǒng)對于頻率和方向的表示,并且它們常備用于紋理表示和描述。在空域,一個2維的Gabor濾波器是一個正弦平面波和高斯核函數(shù)的乘積。Gabor濾波器是自相似的,也就是說,所有Gabor濾波器都可以從一個母小波經(jīng)過膨脹和旋轉產(chǎn)生。實際應用中,Gabor濾波器可以在頻域的不同尺度,不同方向上提取相關特征。

            三.Gabor濾波器公式化定義 

            公式中:

            λ:正弦函數(shù)波長;

            θGabor核函數(shù)的方向 

            ψ:相位偏移

            σ:高斯函數(shù)的標準差 

            γ 空間的寬高比(這個沒太理解

             

            四.Gabor 濾波器opencv實現(xiàn)代碼

              1CGaborFilter::CGaborFilter(float dLambda, float dTheta, float dRatio_S2L, float dGamma, float dPhi)
              2{
              3    Lambda = dLambda;
              4    Theta = dTheta;
              5    sigma = dLambda*dRatio_S2L;
              6    Gamma = dGamma;
              7    Phi = dPhi;
              8    m_pGaborFilter = NULL;
              9    bParam = 1;
             10}

             11
             12
             13CGaborFilter::~CGaborFilter(void)
             14{
             15    cvReleaseMat(&m_pGaborFilter);
             16}

             17
             18void CGaborFilter::Init()
             19{
             20    float dtmp;
             21    int itmp;
             22    if(is_param() == 0)
             23    {
             24        printf("The parameters are not enough!");
             25    }

             26    else
             27    {
             28        dtmp = sqrt(48*pow(sigma,2)+1);
             29        itmp = cvRound(dtmp);
             30        if(itmp%2 == 0)
             31            itmp ++;
             32        GaborWindow.height = GaborWindow.width = 16;
             33        bInit = 1;
             34
             35        create_kernel();
             36    }

             37}

             38
             39void CGaborFilter::Init(float dSigma,float dTheta,float dPhi)
             40{
             41    float dtmp;
             42    int itmp;
             43
             44    sigma = dSigma;
             45    Theta = dTheta;
             46    Phi = dPhi;
             47    Gamma = GAMMA;
             48    Lambda = sigma/RATIO_S2L;
             49    bParam = 1;
             50
             51    dtmp = sqrt(24*pow(sigma,2));
             52    itmp = cvRound(dtmp);
             53    if(itmp%2 == 0)
             54        itmp ++;
             55    GaborWindow.height = GaborWindow.width = itmp;
             56    bInit = 1
             57
             58    create_kernel();
             59}

             60
             61void CGaborFilter::Init(float dLambda,float dTheta, float dPhi,float dGamma)
             62{
             63    float dtmp;
             64    int itmp;
             65
             66    Lambda = dLambda;
             67    Theta  = dTheta;
             68    Phi    = dPhi;
             69    Gamma  = dGamma;
             70    sigma  = Lambda * RATIO_S2L;
             71    bParam = 1;
             72
             73    dtmp = sqrt(24*pow(sigma,2));
             74    itmp = cvRound(dtmp);
             75    if(itmp%2 == 0)
             76        itmp ++;
             77    GaborWindow.height = GaborWindow.width = itmp;
             78    bInit = 1
             79
             80    create_kernel();
             81}

             82
             83void CGaborFilter::create_kernel()
             84{
             85    float tmp1,tmp2,xtmp,ytmp,re;
             86    int i,j,x,y;
             87
             88    if(is_init() == 0)
             89        printf("The parameters haven't been initialed!");
             90
             91
             92    else{
             93
             94
             95        m_pGaborFilter = cvCreateMat(GaborWindow.height,GaborWindow.width,CV_32FC1);
             96        for(i= 0; i< GaborWindow.height; i++)
             97            for(j = 0; j< GaborWindow.width; j++)
             98            {
             99                x = j - GaborWindow.width/2;
            100                y = i - GaborWindow.height/2;
            101
            102
            103                xtmp = (float)x*cos(Theta) - (float)y*sin(Theta);
            104                ytmp = (float)x*sin(Theta) + (float)y*cos(Theta);
            105
            106                tmp1 = exp(-(pow(xtmp,2)+pow(ytmp*Gamma,2))/(2*pow(sigma,2)));
            107                tmp2 = cos(2*PI*xtmp/Lambda + Phi);
            108                // int p=sizeof(float);
            109                re   = tmp1*tmp2;
            110                cvSetReal2D((CvMat*)m_pGaborFilter,i,j,re);
            111
            112            }

            113            bKernel = 1;
            114    }

            115}

            116
            117IplImage * CGaborFilter::get_Image()
            118{
            119    if(is_kernel() == 0)
            120    {
            121        printf("The filter hasn't bee created!");
            122    }

            123    else
            124    {
            125        IplImage *pImg = cvCreateImage(GaborWindow,IPL_DEPTH_32F,1);
            126        IplImage *pImgU8 = cvCreateImage(GaborWindow,IPL_DEPTH_8U,1);
            127        CvMat * pMat = cvCreateMat(GaborWindow.height,GaborWindow.width,CV_32FC1);
            128
            129        cvCopy(m_pGaborFilter,pImg);
            130        //pImg->imageData = (char *)pMat->data;
            131        cvNormalize((IplImage*)pImg, (IplImage*)pImg,0,255,CV_MINMAX,NULL);
            132        cvConvertScaleAbs(pImg,pImgU8,1,0);
            133        return pImgU8;
            134    }

            135}

            136
            137IplImage * CGaborFilter::do_filter(const IplImage * src)
            138{
            139    if(is_kernel()==false)
            140    {
            141        printf("The Gabor Kernel has not been created!");
            142    }

            143    else{
            144
            145        IplImage *pDestImage = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);
            146        // IplImage * pGaborImage = get_Imge();
            147        // CvMat GaborKernel = cvMat(pGaborImage->height,pGaborImage->width,CV_8U,pGaborImage->imageData);
            148        IplImage *tmpImg = cvCloneImage(src);
            149        IplImage *tmpGrayImg = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);
            150
            151        if(tmpImg->nChannels != 1)
            152        {
            153            cvCvtColor(tmpImg,tmpGrayImg,CV_BGR2GRAY);
            154        }

            155        else 
            156        {
            157            cvReleaseImage(&tmpGrayImg);
            158            tmpGrayImg = tmpImg;
            159        }

            160        CvMat * pGaborKernel = get_Mat();
            161
            162        cvFilter2D(tmpGrayImg,pDestImage,pGaborKernel,cvPoint((GaborWindow.width-1)/2,(GaborWindow.height-1)/2));
            163
            164        cvReleaseImage(&tmpImg);
            165        return  pDestImage;  
            166    }

            167}




            轉載請注明:http://www.shnenglu.com/polly-yang/

            亚洲精品乱码久久久久久蜜桃图片 | 久久久噜噜噜www成人网| 日本人妻丰满熟妇久久久久久| 日韩欧美亚洲综合久久影院d3| 香蕉久久永久视频| 久久精品国产精品亚洲人人| 香蕉久久一区二区不卡无毒影院| 2021精品国产综合久久| 漂亮人妻被中出中文字幕久久| 日韩精品久久久久久久电影| 色婷婷狠狠久久综合五月| 精品永久久福利一区二区| 伊人久久大香线蕉综合影院首页| 99久久超碰中文字幕伊人| 久久综合九色综合欧美狠狠| 久久精品亚洲乱码伦伦中文 | 久久99精品久久久久久秒播| 久久99国产综合精品女同| 国产成年无码久久久免费| 午夜精品久久久久久久| 粉嫩小泬无遮挡久久久久久| 久久综合九色综合久99| 久久久久久国产精品免费免费| 国产一区二区精品久久岳| 久久久久亚洲AV成人网人人网站| 中文字幕无码久久人妻| 久久国产劲爆AV内射—百度| 亚洲AV无码久久精品色欲| 97久久天天综合色天天综合色hd| 久久综合视频网站| 亚洲精品午夜国产va久久| 无码专区久久综合久中文字幕 | 人妻无码久久一区二区三区免费| 2020久久精品国产免费| 国内精品久久久久久久久电影网| 国产成人精品综合久久久久| 久久婷婷五月综合色高清| 久久国产精品免费一区| 五月丁香综合激情六月久久| 国产高清美女一级a毛片久久w| 久久久久久九九99精品|