资源简介
著名的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
相关资源
- ASIFT算法实现
- GPU 并行排序
- GPU桌面监视器组件
- CPU GPU协同并行计算
- 几个cuda源代码
- 树莓派GPU手册 videocore IV
- tensorflow_gpu-2.1.0-cp37-cp37m-win_amd64.whl
- 二维TTI介质拟声波正演模拟和逆时偏
- 基于GPU加速的二维VTI介质正演模拟与
- tensorflow1.12.0+gpucuda 9.0
- AES加密解密GPU程序
- CUDA_BY_EXAMPLE自带的几个头文件
- 卸载tensorflow-cpu重装tensorflow-gpu操作
- openCL编程指导随书源代码
- cudart64_101.zip
- CUDA找数组的最大值.cu
- CUDA by example 中文:GPU高性能编程CUD
- sift图像匹配
- libemgucv-windows-universal-gpu-2.4.9.1847
- 2019 CPU GPU天梯图 Excel 可编辑
- 基于SIFT+Kmeans+SVM的场景识别报告
- shaderX1-7和GPU Pro1-5
- linux-KVM虚拟机GPU透传操作步骤.docx
- Caffe编译的配置文件Makefile.config环境:
- Notepad++插件管理器-gpup.exe
- 基于SIFT特征点的双目视觉定位
- SURF、SIFT、ORB特征提取opencv程序
- helloGPGPU-1.0.2.zip GPU入门
- sift、surf、sift+ransac方法影像匹配代码
- 航拍图片全景拼接代码
评论
共有 条评论