乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      canny邊緣檢測(cè)原理

       oskycar 2012-05-08
      最優(yōu)的階梯型邊緣檢測(cè)算法(canny邊緣檢測(cè))
           1.Canny邊緣檢測(cè)基本原理
           (1)圖象邊緣檢測(cè)必須滿足兩個(gè)條件:一能有效地抑制噪聲;二必須盡量精確確定邊緣的位置。
           (2)根據(jù)對(duì)信噪比與定位乘積進(jìn)行測(cè)度,得到最優(yōu)化逼近算子。這就是Canny邊緣檢測(cè)算子。
           (3)類似與Marr(LoG)邊緣檢測(cè)方法,也屬于先平滑后求導(dǎo)數(shù)的方法。
           2.Canny邊緣檢測(cè)算法:
           step1:用高斯濾波器平滑圖象;
           step2:用一階偏導(dǎo)的有限差分來計(jì)算梯度的幅值和方向;
           step3:對(duì)梯度幅值進(jìn)行非極大值抑制;
           step4:用雙閾值算法檢測(cè)和連接邊緣。
           step1:高斯平滑函數(shù)
       
       
            step3:非極大值抑制
            僅僅得到全局的梯度并不足以確定邊緣,因此為確定邊緣,必須保留局部梯度最大的點(diǎn),而抑制非極大值。(non-maxima suppression,NMS)
      解決方法:利用梯度的方向。
      圖2非極大值抑制
      四個(gè)扇區(qū)的標(biāo)號(hào)為0到3,對(duì)應(yīng)3*3鄰域的四種可能組合。
            在每一點(diǎn)上,鄰域的中心象素M與沿著梯度線的兩個(gè)象素相比。如果M的梯度值不比沿梯度線的兩個(gè)相鄰象素梯度值大,則令M=0。
      即: 
             step4:閾值化
             減少假邊緣段數(shù)量的典型方法是對(duì)N[i,j]使用一個(gè)閾值。將低于閾值的所有值賦零值。但問題是如何選取閾值?
             解決方法:雙閾值算法。雙閾值算法對(duì)非極大值抑制圖象作用兩個(gè)閾值τ1和τ2,且2τ1≈τ2,從而可以得到兩個(gè)閾值邊緣圖象N1[i,j]和N2[i,j]。由于N2[i,j]使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在N2[i,j]中把邊緣連接成輪廓,當(dāng)?shù)竭_(dá)輪廓的端點(diǎn)時(shí),該算法就在N1[i,j]的8鄰點(diǎn)位置尋找可以連接到輪廓上的邊緣,這樣,算法不斷地在N1[i,j]中收集邊緣,直到將N2[i,j]連接起來為止。
       

      //非最大抑制
      void NonmaxSuppress(int *pMag, int *pGradX, int *pGradY, SIZE sz, LPBYTE pNSRst)
      {
       
      LONG y,x;
       
      int nPos;

       //梯度分量
       
      int gx;
       
      int gy;

       //中間變量
       
      int g1,g2,g3,g4;
       
      double weight;
       
      double dTmp,dTmp1,dTmp2;

       //設(shè)置圖像邊緣為不可能的分界點(diǎn)
       
      for(x=0;x<sz.cx;x++)
       
      {
       
       pNSRst[x] = 0;
       
       pNSRst[(sz.cy-1)*sz.cx+x] = 0;

       }
       
      for(y=0;y<sz.cy;y++)
       
      {
       
       pNSRst[y*sz.cx] = 0;
       
       pNSRst[y*sz.cx + sz.cx-1] = 0;
       
      }

       for(y=1;y<sz.cy-1;y++)
       
      {
       
       for(x=1;x<sz.cx-1;x++)
       
       {
       
        //當(dāng)前點(diǎn)
       
        nPos = y*sz.cx + x;

         //如果當(dāng)前像素梯度幅度為0,則不是邊界點(diǎn)
       
        if(pMag[nPos] == 0)
       
        {
       
         pNSRst[nPos] = 0;
       
        }
       
        else
       
        {
       
         //當(dāng)前點(diǎn)的梯度幅度
       
         dTmp = pMag[nPos];

          //x,y方向?qū)?shù)
       
         gx = pGradX[nPos];
       
         gy = pGradY[nPos];

          //如果方向?qū)?shù)y分量比x分量大,說明導(dǎo)數(shù)方向趨向于y分量
       
         if(abs(gy) > abs(gx))
       
         {
       
          //計(jì)算插值比例
       
          weight = fabs(gx)/fabs(gy);

           g2 = pMag[nPos-sz.cx];
       
          g4 = pMag[nPos+sz.cx];

           //如果x,y兩個(gè)方向?qū)?shù)的符號(hào)相同
       
          //C 為當(dāng)前像素,與g1-g4 的位置關(guān)系為:
       
          //g1 g2
       
          //      C
       
          //       g4 g3
       
          if(gx*gy>0)
       
          {
       
           g1 = pMag[nPos-sz.cx-1];
       
           g3 = pMag[nPos+sz.cx+1];
       
          }

           //如果x,y兩個(gè)方向的方向?qū)?shù)方向相反
       
          //C是當(dāng)前像素,與g1-g4的關(guān)系為:
       
          //       g2 g1
       
          //        C
       
          //    g3 g4
       
          else
       
          {
       
           g1 = pMag[nPos-sz.cx+1];
       
           g3 = pMag[nPos+sz.cx-1];
       
          }
       
         }

          //如果方向?qū)?shù)x分量比y分量大,說明導(dǎo)數(shù)的方向趨向于x分量
       
         else
       
         {
       
          //插值比例
       
          weight = fabs(gy)/fabs(gx);

           g2 = pMag[nPos+1];
       
          g4 = pMag[nPos-1];

           //如果x,y兩個(gè)方向的方向?qū)?shù)符號(hào)相同
       
          //當(dāng)前像素C與 g1-g4的關(guān)系為
       
          //  g3
       
          //  g4 C g2
       
          //       g1
       
          if(gx * gy > 0)
       
          {
       
           g1 = pMag[nPos+sz.cx+1];
       
           g3 = pMag[nPos-sz.cx-1];
       
          }
       
          
       
          //如果x,y兩個(gè)方向?qū)?shù)的方向相反
       
          // C與g1-g4的關(guān)系為
       
          //   g1
       
          //    g4 C g2
       
          //     g3
       
          else
       
          {
       
           g1 = pMag[nPos-sz.cx+1];
       
           g3 = pMag[nPos+sz.cx-1];
       
          }
       
         }

          //利用 g1-g4 對(duì)梯度進(jìn)行插值
       
         {
       
          dTmp1 = weight*g1 + (1-weight)*g2;
       
          dTmp2 = weight*g3 + (1-weight)*g4;

           //當(dāng)前像素的梯度是局部的最大值
       
          //該點(diǎn)可能是邊界點(diǎn)
       
          if(dTmp>=dTmp1 && dTmp>=dTmp2)
       
          {
       
           pNSRst[nPos] = 128;
       
          }
       
          else
       
          {
       
           //不可能是邊界點(diǎn)
       
           pNSRst[nPos] = 0;
       
          }
       
         }
       
        }
       
       }
       
      }
      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多