用c#创建gabor纹理

本文关键字:纹理 gabor 创建 | 更新日期: 2023-09-27 18:14:57

我试图创建一个纹理(在一个3-D字节数组中),这是一个彩色的gabor补丁。我使用OpenTK来映射纹理。纹理映射工作得很好,但是我下面的代码创建的纹理不是我需要的。

我得到的代码如下:

for (int x = 0; x < size; x++)
                {
                    for (int y = 0; y < size; y++)
                    {
                        double sin_term = 0.5*(double)Math.Sin(10 * 3.14159 * ((double)x / (double)size));
                        sin_term += 0.5;
                        double gauss = 0.5+Math.Exp(-((Math.Pow(x,2)+Math.Pow(y,2))/(2*Math.Pow(sigma,2))));
                        double gabor = sin_term * gauss;
                        byteTexture2[j,i,0] = (byte)(((double)Colour.R * gabor));
                        byteTexture2[j,i,1] = (byte)(((double)Colour.G * gabor));
                        byteTexture2[j,i,2] = (byte)(((double)Colour.B * gabor));
                    }
                }

我的数学不是很好,所以我可能偏离了轨道,但我试着用高斯波乘以正弦波。正弦波项本身似乎没问题,但高斯波项可能有问题。

任何帮助都将非常感激。

找到MATLAB代码解决这个问题,但没有c/c++/c#代码

谢谢。

用c#创建gabor纹理

我最近编写了一个Gabor过滤器内核用于OpenCV(使用c++)。下面是我的内核代码:

/// compute Gabor filter kernels
for (int i = 0; i < h; i++){
   x = i - 0.5*(h - 1);
   for (int j = 0; j < h; j++) {
      y = j - 0.5*(h - 1);
      gaborKernelCos.at<float>(i, j) = exp((-16 / (h*h))*(x*x + y*y))*cos((2 * M_PI*w / h)*(x*cos(q) + y*sin(q))) / (h*h);
      gaborKernelSin.at<float>(i, j) = exp((-16 / (h*h))*(x*x + y*y))*sin((2 * M_PI*w / h)*(x*cos(q) + y*sin(q))) / (h*h);
   }
}

输入参数为核大小h,波数w,滤波器方向q。注意,波数与l = h/w滤光片像素波长有关。此外,我的sigma的值只是h的常数倍。

据我所知,这应该不会产生与您的代码有很大不同的东西。你对sigma的价值有意义吗?最多应该是sigma = 0.5*size