跪求canny边缘检测算子的c源代码一定得是c的 谢谢各位大哥哥和大姐姐了
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 04:40:06
跪求canny边缘检测算子的c源代码一定得是c的 谢谢各位大哥哥和大姐姐了
跪求canny边缘检测算子的c源代码
一定得是c的 谢谢各位大哥哥和大姐姐了
跪求canny边缘检测算子的c源代码一定得是c的 谢谢各位大哥哥和大姐姐了
canny算子代码
void CreatGauss(double sigma,double **pdKernel,int *pnWidowSize);
void GaussianSmooth(SIZE sz,LPBYTE pGray,LPBYTE pResult,double sigma);
void Grad(SIZE sz,LPBYTE pGray,int *pGradX,int *pGradY,int *pMag);
void NonmaxSuppress(int *pMag,int *pGradX,int *pGradY,SIZE sz,LPBYTE pNSRst);
void EstimateThreshold(int *pMag,SIZE sz,int *pThrHigh,int *pThrLow,LPBYTE pGray,
double dRatHigh,double dRatLow);
void Hysteresis(int *pMag,SIZE sz,double dRatLow,double dRatHigh,LPBYTE pResult);
void TraceEdge(int y,int x,int nThrLow,LPBYTE pResult,int *pMag,SIZE sz);
void Canny(LPBYTE pGray,SIZE sz,double sigma,double dRatLow,
double dRatHigh,LPBYTE pResult);
#include "afx.h"
#include "math.h"
#include "canny.h"
// 一维高斯分布函数,用于平滑函数中生成的高斯滤波系数
void CreatGauss(double sigma,double **pdKernel,int *pnWidowSize)
{
LONG i;
//数组中心点
int nCenter;
//数组中一点到中心点距离
double dDis;
//中间变量
double dValue;
double dSum;
dSum = 0;
// [-3*sigma,3*sigma] 以内数据,会覆盖绝大部分滤波系数
*pnWidowSize = 1+ 2*ceil(3*sigma);
nCenter = (*pnWidowSize)/2;
*pdKernel = new double[*pnWidowSize];
//生成高斯数据
for(i=0;i