gpt4 book ai didi

C 中浮点图像与 2D 函数的卷积

转载 作者:行者123 更新时间:2023-11-30 17:31:11 24 4
gpt4 key购买 nike

您好,我必须使用以下内核对 32 位原始图像执行 2D 卷积

h(x,y)= a(b* exp^(-squareroot(x^2+y^2))

我不知道如何执行它,因为我是编码新手。我的图像尺寸是1024*768。我应该保持相同大小的内核并执行卷积还是应该保留一个小内核?他们俩都会有所作为吗?如果我保留一个小内核,如何将它与整个图像进行卷积?

请帮忙

请检查生成内核的代码是否正确

谢谢两位的回答。请您检查下面生成内核和卷积的代码。我不确定我做得是否正确

int krowhalf=krow/2,kcolhalf=kcol/2;

// sum is for normalization
float sum = 0.0;

// generate kernel
for (int x = -krowhalf; x <= krowhalf; x++)
{
for(int y = -kcolhalf; y <= kcolhalf; y++)
{
r = sqrtl(x*x + y*y);
gKernel[x + krowhalf][y + kcolhalf] = a*(b*exp(-(r));
sum += gKernel[x + krowhalf][y + kcolhalf];
}
}

//normalize the Kernel
for(int i = 0; i < krow; ++i)
for(int j = 0; j < kcol; ++j)

gKernel[i][j] /= sum;

float **convolve2D(float** in, float** out, int h, int v, float **kernel, int kCols, int kRows)

{
int kCenterX = kCols / 2;

int kCenterY = kRows / 2;

int i,j,m,mm,n,nn,ii,jj;



for(i=0; i < h; ++i)
// rows
{
for(j=0; j < v; ++j)
// columns
{

for(m=0; m < kRows; ++m) // kernel rows

{
mm = kRows - 1 - m; // row index of flipped kernel

for(n=0; n < kCols; ++n) // kernel columns
{
nn = kCols - 1 - n; // column index of flipped kernel

//index of input signal, used for checking boundary
ii = i + (m - kCenterY);
jj = j + (n - kCenterX);

// ignore input samples which are out of bound
if( ii >= 0 && ii < h && jj >= 0 && jj < v )

//out[i][j] += in[ii][jj] * (kernel[mm+nn*29]);
out[i][j] += in[ii][jj] * (kernel[mm][nn]);


}
}
}
}

返回;}

最佳答案

您知道如何进行一维信号卷积吗?你的过滤器总是有限长度的。您无法使用数字计算机进行无限卷积。二维滤波器也总是有限长度。例如,最简单的 2-D 滤波器拉普拉斯之一只有 3X3 大小。过滤器越长,处理就越复杂。

关于C 中浮点图像与 2D 函数的卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com