模拟Gaussian模糊计算
来源:互联网 发布:如何做到处事不惊 知乎 编辑:程序博客网 时间:2024/06/16 12:29
就是计算一个矩阵,其中的每个值是周围所有值的和!
/***************************************************功能描述:此函数完成一个高斯模糊模拟过程,即*对于一张图片(这里简单为一个矩阵)*每一个像素值等于它周围所有像素值的和。*有考虑到了有补齐的问题,以后就只考虑*对齐情况了,知道补齐的思想就好了。**************************************************/#include<iostream>#include<stdlib.h>#include<stdio.h>#include<cuda_runtime.h>#include<device_launch_parameters.h>#define M 64#define N 64#define size M*N*sizeof(float)using namespace std;void showResult(float *p);void init(float *p,int num,int value);__global__ void Raussian_kernel(float *d_a,float *d_b);int main(){float *h_a=(float*)malloc(size);//定义主机指针并分配空间float *h_b=(float*)malloc(size);//初始化输入数据init(h_a,M*N,1);//输入矩阵初始化为1//showResult(h_a);init(h_b,M*N,0);//输出矩阵初始化为0//showResult(h_b);cudaError_t err=cudaSuccess;float *d_a,*d_b;//定义设备指针,分配空间并初始化为0err=cudaMalloc((void**)&d_a,size);cudaMemset(d_a,0,size);cudaMalloc((void**)&d_b,size);cudaMemset(d_b,0,size);if(err!=cudaSuccess){fprintf(stderr,"error=%s\n",cudaGetErrorString(err));exit(EXIT_FAILURE);}err=cudaMemcpy(d_a,h_a,size,cudaMemcpyHostToDevice);//主机向设备拷贝数据if(err!=cudaSuccess){fprintf(stderr,"error=%s\n",cudaGetErrorString(err));exit(EXIT_FAILURE);}dim3 threadsPerBlock(32,32);dim3 blocksPerGrid(N/32,M/32);//这里只考虑对齐的情况,所以就不搞那么复杂的判断了//启动核函数Raussian_kernel<<<blocksPerGrid,threadsPerBlock>>>(d_a,d_b);cudaMemcpy(h_b,d_b,size,cudaMemcpyDeviceToHost);//显示结果showResult(h_b);return 0;}//初始化函数void init(float *p,int num,int value)//num表示有多少个数{for(int i=0;i<num;i++){p[i]=value;}}//显示函数void showResult(float *p){for(int i=0;i<M;i++){for(int j=0;j<N;j++){cout<<p[i*N+j]<<'\t';}cout<<endl;}}__global__ void Raussian_kernel(float *d_a,float *d_b)//M*N矩阵{int tid_in_grid_x=blockIdx.x*blockDim.x+threadIdx.x;int tid_in_grid_y=blockIdx.y*blockDim.y+threadIdx.y;float sum=0.0f;for(int i=tid_in_grid_y-1;i<=tid_in_grid_y+1;i++)//i是行,j是列,注意线程中的的区别,x是列,y是行{for(int j=tid_in_grid_x-1;j<=tid_in_grid_x+1;j++){if(i>=0&&i<=(M-1)&&j>=0&&j<=(N-1))//四个条件必须同时满足才进行取值求和操作sum+=d_a[i*N+j];}}sum-=d_a[tid_in_grid_y*N+tid_in_grid_x];//把自己本身再减掉d_b[tid_in_grid_y*N+tid_in_grid_x]=sum;}
0 0
- 模拟Gaussian模糊计算
- 高斯模糊-Gaussian blur
- UnityShader : 高斯模糊 Gaussian Blur
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter )
- 高斯平滑 高斯模糊 高斯濾波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 實現
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 高性能计算之gaussian篇
- 高性能计算之gaussian篇
- UnityShader - 屏幕特效 - 高斯模糊(Gaussian Blur)
- 屏幕高斯模糊(Gaussian Blur)后期特效的实现
- 模糊熵的计算
- listview addHeaderView()报错:ClassCastException
- 设置控件随窗口大小而改变
- centos install git
- gem5中的ruby memory system能使用的cpu类型 timing simple
- jQuery 精简版弹出对话框层
- 模拟Gaussian模糊计算
- 最快的Android模拟器Genymotion的安装与使用
- “两地分居”的大学师生
- 【开卷有益】记录一次高并发下的死锁解决思考过程
- centos7 修改ssh端口!
- HDU4685 Prince and Princess 完美匹配+强连通
- Spring Data JPA 简单介绍
- Cocos2dx学习第八章(游戏实例之跑跑跑)
- 数据结构实验之链表六:有序链表的建立