我正在尝试实现一个可以进行2D卷积的matlab代码。
matlab代码首先将3x3内核置于Image大小的填充矩阵中。我在C ++代码中做了同样的事情。
我已将我的数组和matlab矩阵输出到.csv文件并确认它们是相同的。然后我在每个上面运行正向FFT。在matlab中,内核的FT图像看起来像你期望的那样 - 在中间基本上是强烈的,在一个圆圈中辐射出来。然而,CUDA FT图像(我将其作为csv导入后在matlab中绘制)看起来像一个椭圆形。
导致这种情况的原因是什么?它看起来好像内核没有在图像中居中,但就像我说的那样,我将填充的内核数据转储到csv并使用imagesc在matlab中查看它,它看起来居中于我,实际上是与填充的matlab内核完全相同。
这是我用来将内核放在填充数组中心的代码:
kSize = 3;
halfl = 0.5*(kSize-1);
if(chipW%2 == 0)
dcW = (.5*chipW) +1;
else
dcW = round(chipW*.5);
if(chipH%2 == 0)
dcH = (.5*chipH) +1;
else
dcH = round(chipH*.5);
dcH--;
dcW--;
for(int i = dcH-halfl ; i <= dcH+halfl ; i++)
{
for(int j = dcW -halfl ; j <= dcW+halfl ; j++)
{
h_PaddedKernel[i*chipW + j] = make_cuComplex(hp_kernel[(i-(dcH-halfl))*kSize + (j-(dcW-halfl))], 0.0);
}
}
kSize是我内核的一个大小的宽度,chipW和chipH是我想要处理的图像的宽度和高度
答案 0 :(得分:0)
两件事: