我需要在C代码中实现以下公式:
https://en.wikipedia.org/wiki/Lanczos_resampling
因此,我正在使用多维插值方法:
其中L(x-i)或L(y-i)为:
我正在使用ppm图像格式通过一个小脚本获取rgb值。
这是我现在的实际lanczos方法:
double _L(int param) {
/*
LANCZOS KERNEL
*/
int a = 2; // factor "a" from formula
if(param == 0) {
return 1;
}
if(abs(param) > 0 && abs(param) < a) {
return (a*sin(PI*param) * sin((PI*param)/a))/(PI*PI*param*param)
}
return 0;
}
void lanczos_interpolation(PPMImage *img) {
if(img) {
int start_i, start_j, limit_i, limit_j;
int a = 2; // factor "a" from formula
samples_ij = img->x*img->y; // "sij" from formula
for(x = 0;x < img->x;x++) {
for(y = 0;y = < img->y;y++) {
start_i = floor(x)-a+1:
limit_i = floor(x)+a;
for(i = start_i;i <= limit_i;i++) {
start_j = floor(y)-a+1:
limit_j = floor(y)+a;
for(i = start_i;i <= limit_i;i++) {
img->data[x+(W*y)].red = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
img->data[x+(W*y)].green = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
img->data[x+(W*y)].blue = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
}
}
}
}
}
}
这部分代码让我很困惑:
img->data[x+(W*y)].red = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
img->data[x+(W*y)].green = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
img->data[x+(W*y)].blue = (int)(samples_ij * _L(x-i) * _L(y-j)) // "_L" represents "L(x-i)" from formula
有人可以帮助我与c中的lanczos插值相处吗?
这是我完整的C文件:
http://pastebin.com/wdUHVh6U
谢谢!
最佳答案
看到您没有在代码中进行任何类型的插值。
插值操作如下:
[input pixels
] => [Lanczos interpolation
] => [output interpolated pixels
]
|
|
V
a sum operation in the neighbourhood
of the corresponding location
in the input image
您的问题如下:
您还不了解
Lanczos interpolation technique
。实际上,您似乎不知道什么是插值。您的代码没有
input pixels
和output pixels
。您的代码中没有
summation
。 (您只是将Lanczos系数时间s_ij
分配给img
像素。同样,s_ij
实际上是公式中的input
像素值,但是您已分配了固定的像素总数图片中的s_ij
。)您不必要地使用了
floor(*)
函数。我对您的建议是:
以算法方式了解什么是插值。
出于您的目的,编写算法/ pseudo-code。
确保您在步骤1和2中正确无误。
然后,仅尝试编写代码。
关于c - C语言中的Lanczos插值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34198553/