用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#代码
谢谢。
我最近编写了一个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
。