小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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)的有限差分來(lái)計(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è)閾值。將低于閾值的所有值賦零值。但問(wèn)題是如何選取閾值?
       解決方法:雙閾值算法。雙閾值算法對(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]連接起來(lái)為止。
 

//非最大抑制
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分量大,說(shuō)明導(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分量大,說(shuō)明導(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)購(gòu)買等信息,謹(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)論公約

    類似文章 更多