• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Gabor濾波小結

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

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

            一.房屋檢測小結   

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

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

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

            三.Gabor濾波器公式化定義 

            公式中:

            λ:正弦函數波長;

            θGabor核函數的方向 

            ψ:相位偏移

            σ:高斯函數的標準差 

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

             

            四.Gabor 濾波器opencv實現代碼

              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/

            jizzjizz国产精品久久| 综合久久国产九一剧情麻豆| 国产精品久久亚洲不卡动漫| 久久精品国产一区| 国产—久久香蕉国产线看观看| 亚洲日韩欧美一区久久久久我| 久久婷婷五月综合国产尤物app| 一本色综合网久久| 99麻豆久久久国产精品免费| 久久久精品国产Sm最大网站| 亚洲午夜久久久久久久久电影网 | 欧美粉嫩小泬久久久久久久| 久久中文字幕人妻熟av女| 人人狠狠综合久久亚洲88| 久久久久久久精品妇女99| 女人香蕉久久**毛片精品| 中文字幕热久久久久久久| 久久国产福利免费| 青青草原1769久久免费播放| 久久精品中文无码资源站| 欧美精品一区二区精品久久| 奇米综合四色77777久久| 三级韩国一区久久二区综合| 99久久精品费精品国产| 久久99国产精一区二区三区| 日韩乱码人妻无码中文字幕久久 | 亚洲?V乱码久久精品蜜桃 | 久久只有这精品99| 久久久久黑人强伦姧人妻| 亚洲va中文字幕无码久久不卡| 精品水蜜桃久久久久久久| 99久久人妻无码精品系列蜜桃| 国内精品久久久久影院薰衣草 | 久久久久久亚洲精品影院| 久久免费99精品国产自在现线 | 国产亚洲精久久久久久无码| 久久天天躁狠狠躁夜夜avapp| 亚洲欧洲日产国码无码久久99| 久久久久国产精品嫩草影院| 久久人妻无码中文字幕| 亚洲精品无码久久久久去q|