资源简介
在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.em
文件 984 2011-12-06 16:27 Dib\Dib\Debug\Dib.exe.em
文件 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个文件信息
- 上一篇:TCP多客户端通讯,单管道、双管道通讯
- 下一篇:算法c语言实现
相关资源
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
- MFC坦克大战
- VC++ 中国象棋经典游戏源代码
- 课程设计: MFC 学生信息管理系统
- MFC对ACCESS数据库的增加、删除、查找
- vc.6.0 MFC 人事管理系统源码
- MFC 在线考试系统
评论
共有 条评论