资源简介
著名的SIFT算法,但是经过改造,可以充分利用GPU进行运算加速。

代码片段和文件信息
/*
* Jan Prokaj
* May 11 2005
*/
#include “canny.h“
//basic algorithm no performance improvements
Image *getCannyEdgesClassic(Image *original float sigma float percent) {
int i j;
int p q;
double maskval sum1 sum2;
Image *outImage *peaks *canny;
double **maskX;
double **maskY;
double **outpicX; //stores convolution x-result
double **outpicY; //stores convolution y-result
int mr maskSize;
int centY centX;
double normalizeFactor;
float max;
float xDiff yDiff;
double angle;
int hist[256] = {0};
int sum;
float picPercent HI LO;
mr = (int)(sigma * 3);
maskSize = 2*mr + 1;
centY = centX = mr;
/* initializations */
maskX = (double **) malloc(maskSize*sizeof(double *));
maskY = (double **) malloc(maskSize*sizeof(double *));
if(maskX == NULL || maskY == NULL)
return NULL;
for(i = 0; i < maskSize; ++i) {
maskX[i] = (double *) malloc(maskSize*sizeof(double));
maskY[i] = (double *) malloc(maskSize*sizeof(double));
}
outpicX = (double **) malloc(original->height*sizeof(double *));
outpicY = (double **) malloc(original->height*sizeof(double *));
if(outpicX == NULL || outpicY == NULL)
return NULL;
for(i = 0; i < original->height; ++i) {
outpicX[i] = (double *) malloc(original->width*sizeof(double));
outpicY[i] = (double *) malloc(original->width*sizeof(double));
}
outImage = (Image *) malloc(sizeof(Image));
outImage->width = original->width;
outImage->height = original->height;
outImage->pic = (float **) malloc(outImage->height*sizeof(float *));
if(outImage->pic == NULL)
return NULL;
for(i = 0; i < outImage->height; ++i) {
outImage->pic[i] = (float *) malloc(outImage->width*sizeof(float));
}
/*generate masks*/
normalizeFactor = 1.0/(2.0*M_PI*sigma*sigma);
for(p=-mr;p<=mr;p++) {
for(q=-mr;q<=mr;q++) {
maskval = -1*normalizeFactor*(q/(sigma*sigma))*exp(-1*((p*p + q*q)/(2*(sigma*sigma))));
maskX[p+centY][q+centX] = maskval;
maskval = -1*normalizeFactor*(p/(sigma*sigma))*exp(-1*((p*p + q*q)/(2*(sigma*sigma))));
maskY[p+centY][q+centX] = maskval;
}
}
/*convolve masks with picture*/
for(i=mr; i < original->height - mr; i++) {
for(j=mr; j< original->width - mr; j++) {
sum1 = 0.0;
sum2 = 0.0;
for (p=-mr;p<=mr;p++) {
for (q=-mr;q<=mr;q++) {
sum1 += original->pic[i+p][j+q] * maskX[p+centY][q+centX];
sum2 += original->pic[i+p][j+q] * maskY[p+centY][q+centX];
}
}
outpicX[i][j] = sum1;
outpicY[i][j] = sum2;
}
}
/*compute strength/magnitude*/
for(i = 0; i < original->height; i++) {
for(j = 0; j < original->width; j++) {
outImage->pic[i][j] = 0.0f;
if(i >= mr && i < original->height - mr &&
j >= mr && j < original->width - mr) {
outImage->pic[i][j]=(float) sqrt((outpicX[i][j]*outpicX[i][j]) +
(outpicY[i][j]*outpicY[i][j]));
}
}
}
if(percent < 0 || percent > 1)
percent = 0.20;
/* scale to (01) for canny -- necessary? */
max = 0.0;
for(i = 0; i < outImage->height; ++i) {
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 29501 2005-06-04 04:26 my_sift\canny.c
文件 1305 2005-06-04 04:26 my_sift\canny.h
文件 8714 2006-01-22 21:41 my_sift\Doxyfile
文件 8363 2005-06-04 04:26 my_sift\gaussconv.c
文件 339 2005-06-04 04:26 my_sift\gaussconv.h
文件 1978 2006-01-22 21:41 my_sift\html\annotated.html
文件 107282 2006-01-22 21:41 my_sift\html\canny_8c-source.html
文件 27662 2006-01-22 21:41 my_sift\html\canny_8c.html
文件 145 2006-01-22 21:36 my_sift\html\canny_8c_4c4e2579e69a9e7182257f7ea208c8fc_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8c_4c4e2579e69a9e7182257f7ea208c8fc_cgraph.md5
文件 939 2006-01-22 21:36 my_sift\html\canny_8c_4c4e2579e69a9e7182257f7ea208c8fc_cgraph.png
文件 13 2006-01-22 21:36 my_sift\html\canny_8c_63c9aa8f230332b74c465f7b87ab9884_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8c_63c9aa8f230332b74c465f7b87ab9884_cgraph.md5
文件 490 2006-01-22 21:36 my_sift\html\canny_8c_63c9aa8f230332b74c465f7b87ab9884_cgraph.png
文件 13 2006-01-22 21:36 my_sift\html\canny_8c_91781b4f3f1b370659b6745ced7e7e58_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8c_91781b4f3f1b370659b6745ced7e7e58_cgraph.md5
文件 446 2006-01-22 21:36 my_sift\html\canny_8c_91781b4f3f1b370659b6745ced7e7e58_cgraph.png
文件 348 2006-01-22 21:36 my_sift\html\canny_8c_b010cc7c70e7128fc29660a6ca435572_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8c_b010cc7c70e7128fc29660a6ca435572_cgraph.md5
文件 2002 2006-01-22 21:36 my_sift\html\canny_8c_b010cc7c70e7128fc29660a6ca435572_cgraph.png
文件 79 2006-01-22 21:36 my_sift\html\canny_8c_c91541ae4dc8defdbf52a80206dc3255_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8c_c91541ae4dc8defdbf52a80206dc3255_cgraph.md5
文件 560 2006-01-22 21:36 my_sift\html\canny_8c_c91541ae4dc8defdbf52a80206dc3255_cgraph.png
文件 196 2006-01-22 21:34 my_sift\html\canny_8c__incl.map
文件 32 2006-01-22 21:34 my_sift\html\canny_8c__incl.md5
文件 3266 2006-01-22 21:34 my_sift\html\canny_8c__incl.png
文件 8736 2006-01-22 21:41 my_sift\html\canny_8h-source.html
文件 30367 2006-01-22 21:41 my_sift\html\canny_8h.html
文件 145 2006-01-22 21:36 my_sift\html\canny_8h_4c4e2579e69a9e7182257f7ea208c8fc_cgraph.map
文件 32 2006-01-22 21:36 my_sift\html\canny_8h_4c4e2579e69a9e7182257f7ea208c8fc_cgraph.md5
............此处省略334个文件信息
- 上一篇:微信小程序小游戏教程视频代码.zip
- 下一篇:patch.exe
相关资源
- x264源码及其配置文件,用于配置树莓
- BoW|Pyramid BoW+SVM进行图像分类
- opencv2.4.9源码分析——SIFT
- siftDemoV4.zip
- 角点检测与匹配
- opencv实现的sift算法源码,包含了图像
- 论文研究 - 采用多GPU计算的陡峭三维
- 利用GPU破解rar密码工具
- SIFT特征提取+匹配
- 基于SIFT算法的图像拼接.rar
- GPU精粹1-中文版.pdf《GPU精粹:实时图形
- 基于SIFT特征描述子的立体匹配算法
- eetop.cn_OpenCL.Parallel Computing on the GPU
- 论文研究-改进的基于SIFT和RANSAC的图像
- opencv实现PCASift算法
- GPU+编程与CG+语言之阳春白雪下里巴人
- MD5GPU.rar
- SIFT算法详解及应用(讲的非常好很详
- 数据融合代码-ESTARFM
- GPU高性能运算之CUDA源代码
- win10 vs2015 编译nms和gpunms
- Hausdorff距离匹配代码
- GPU结构概述
- GPU编程与CG语言之阳春白雪下里巴人
- SIFT+RANSAC
- SIFT算法源代码
- OpenCV 现实高斯金字塔的源码,非常经
- NVIDIA GPU Computing SDK
- 高清超详细SIFT源代码分析
- sift源码实现附有详细注释及其核心论
评论
共有 条评论