C语言中的Lanczos插值
我需要在c代码中实现以下公式: 因此,我使用多维插值方法: 其中,L(x-i)或L(y-i)为: 我使用ppm图像格式通过一个小脚本获得rgb值。 这是我现在实际使用的lanczos方法:C语言中的Lanczos插值,c,image,resampling,lanczos,C,Image,Resampling,Lanczos,我需要在c代码中实现以下公式: 因此,我使用多维插值方法: 其中,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) { re
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
}
}
}
}
}
}
有人能帮我处理c语言中的lanczos插值吗?
这是我完整的C文件:
谢谢 请看,您没有在代码中执行任何类型的插值 插值操作如下所示: [
输入像素
]=>[Lanczos插值
]=>[输出插值像素
]
|
|
V
a sum operation in the neighbourhood
of the corresponding location
in the input image
您的问题如下:
Lanczos插值技术
。事实上,您似乎不知道什么是插值输入像素
和输出像素
s_ij
分配给img
像素。同样,s_ij
实际上是公式中的输入
像素值,但您已将图像中像素总数的固定值分配给s_ij
)floor(*)
功能我在研究生工作中使用了Lanczos算法,我认为你的问题应该放在数学网站上。即使您只有一个实现问题,也需要大量的知识才能完全理解代码。@TimBiegeleisen这是一个编程问题,因此它更适合so(本网站),IMHO。@Klaslind bäck很公平,我已经投了赞成票。
|
|
V
a sum operation in the neighbourhood
of the corresponding location
in the input image