• 大小: 12.42MB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2023-07-08
  • 语言: C/C++
  • 标签: canny  MFC  

资源简介

在vs2008中实现的canny算子程序,用MFC写的图形界面。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “afx.h“
#include “math.h“
#include “canny.h“

// 一维高斯分布函数,用于生成平滑函数中的高斯滤波系数
void CreatGauss(double sigmadouble **pdKernelint *pnWidowSize)
{
LONG i;
    int nCenter;//数组中心点
    double dDis;//数组中一点到中心点距离

    double dValue;//中间变量
    double dSum;
    dSum = 0;

    *pnWidowSize = 1+ 2*ceil(3*sigma);// [-3*sigma3*sigma] 以内数据,会覆盖绝大部分滤波系数
    nCenter = (*pnWidowSize)/2;
    *pdKernel = new double[*pnWidowSize];

    for(i=0;i<(*pnWidowSize);i++){//生成高斯数据
dDis = double(i - nCenter);
        dValue = exp(-(1/2)*dDis*dDis/(sigma*sigma));
        (*pdKernel)[i] = dValue;
        dSum+=dValue;
}

    for(i=0;i<(*pnWidowSize);i++){//归一化
(*pdKernel)[i]/=dSum;
}
}

//用高斯滤波器平滑原图像
void GaussianSmooth(int wint nHeightLPBYTE pGrayLPBYTE pResultdouble sigma)
{
LONG x y;
LONG i;
    int nWindowSize;//高斯滤波器长度
    int nLen;//窗口长度
    double *pdKernel;//一维高斯滤波器
    double dDotMul;//高斯系数与图像数据的点乘
    double dWeightSum;//滤波系数总和

    double *pdTemp;
    pdTemp = new double[w*nHeight];

    CreatGauss(sigma &pdKernel &nWindowSize);//产生一维高斯数据
    nLen = nWindowSize/2;

    for(y=0;y for(x=0;x dDotMul = 0;
            dWeightSum = 0;
            for(i=(-nLen);i<=nLen;i++){
if((i+x)>=0 && (i+x) dDotMul+=(double)pGray[y*w+(i+x)] * pdKernel[nLen+i];
                    dWeightSum += pdKernel[nLen+i];
}
}
            pdTemp[y*w+x] = dDotMul/dWeightSum;
}
}

    for(x=0; x for(y=0; y dDotMul = 0;
            dWeightSum = 0;
            for(i=(-nLen);i<=nLen;i++){
if((i+y)>=0 && (i+y) dDotMul += (double)pdTemp[(y+i)*w+x]*pdKernel[nLen+i];
                    dWeightSum += pdKernel[nLen+i];
}
}
pResult[y*w+x] = (unsigned char)dDotMul/dWeightSum;
}
}

    delete []pdKernel;
    pdKernel = NULL;
    delete []pdTemp;
    pdTemp = NULL;
}

// 方向导数求梯度
void Grad(int wint nHeightLPBYTE pGrayint *pGradXint *pGradYint *pMag)
{
LONG yx;


    for(y=1;y for(x=1;x pGradX[y*w +x] = (int)( pGray[y*w+x+1]-pGray[y*w+ x-1] );

    for(x=1;x for(y=1;y pGradY[y*w +x] = (int)(pGray[(y+1)*w +x] - pGray[(y-1)*w +x]);

    //求梯度
    double dSqt1;
    double dSqt2;

    for(y=0; y for(x=0; x dSqt1 = pGradX[y*w + x]*pGradX[y*w + x];//二阶范数求梯度
            dSqt2 = pGradY[y*w + x]*pGradY[y*w + x];
            pMag[y*w+x] = (int)(sqrt(dSqt1+dSqt2)+0.5);
}
}

//非最大抑制
void NonmaxSuppress(int *pMagint *pGradXint *pGradYint wint nHeightLPBYTE pNSRst)
{
LONG yx;
    int nPos;

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

    int g1g2g3g4;//中间变量
    double weight;
    double dTmpdTmp1dTmp2;

    for(x=0;x pNSRst[x] = 0;
        pNSRst[(nHeight-1)*w+x] = 0;
}
    for(y=0;y

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        875  2011-12-06 15:55  Dib\Dib.sln

    ..A..H.     39424  2013-04-16 16:04  Dib\Dib.suo

     文件      50692  2011-12-10 14:24  Dib\Dib\Dib.aps

     文件       3191  2011-12-06 15:55  Dib\Dib\Dib.cpp

     文件        445  2011-12-06 15:55  Dib\Dib\Dib.h

     文件      11460  2011-12-06 16:48  Dib\Dib\Dib.rc

     文件       6081  2011-12-10 14:34  Dib\Dib\Dib.vcproj

     文件       1407  2011-12-06 16:48  Dib\Dib\Dib.vcproj.no632.Student.user

     文件        957  2011-12-06 15:55  Dib\Dib\DibDoc.cpp

     文件        528  2011-12-06 15:55  Dib\Dib\DibDoc.h

     文件       1074  2011-12-06 16:48  Dib\Dib\DibView.h

     文件       1793  2011-12-06 15:55  Dib\Dib\MainFrm.cpp

     文件        655  2011-12-06 15:55  Dib\Dib\MainFrm.h

     文件       3334  2011-12-06 15:55  Dib\Dib\ReadMe.txt

     文件        628  2011-12-06 16:48  Dib\Dib\resource.h

     文件        134  2011-12-06 15:55  Dib\Dib\stdafx.cpp

     文件       1796  2011-12-06 15:55  Dib\Dib\stdafx.h

     文件       1030  2011-12-06 15:55  Dib\Dib\targetver.h

     文件      21630  2003-07-23 17:52  Dib\Dib\res\Dib.ico

     文件        359  2011-12-06 15:55  Dib\Dib\res\Dib.rc2

     文件       1078  2003-07-23 17:52  Dib\Dib\res\DibDoc.ico

     文件       1078  2003-07-23 17:52  Dib\Dib\res\Toolbar.bmp

     文件       6124  2013-04-15 16:22  Dib\Dib\Debug\BuildLog.htm

     文件        920  2011-12-06 16:27  Dib\Dib\Debug\Dib.exe.embed.manifest

     文件        984  2011-12-06 16:27  Dib\Dib\Debug\Dib.exe.embed.manifest.res

     文件        861  2013-04-15 16:22  Dib\Dib\Debug\Dib.exe.intermediate.manifest

     文件      35697  2011-12-06 16:27  Dib\Dib\Debug\Dib.obj

     文件   25296896  2011-12-06 16:27  Dib\Dib\Debug\Dib.pch

     文件      28140  2011-12-10 14:21  Dib\Dib\Debug\Dib.res

     文件      20798  2011-12-06 16:27  Dib\Dib\Debug\DibDoc.obj

............此处省略26个文件信息

评论

共有 条评论