Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的Lanczos插值_C_Image_Resampling_Lanczos - Fatal编程技术网

C语言中的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

我需要在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) {
        
        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插值技术
    。事实上,您似乎不知道什么是插值
  • 您的代码没有
    输入像素
    输出像素
  • 代码中没有求和。(您只是将Lanczos系数时间
    s_ij
    分配给
    img
    像素。同样,
    s_ij
    实际上是公式中的
    输入
    像素值,但您已将图像中像素总数的固定值分配给
    s_ij
  • 您不必要地使用了
    floor(*)
    功能
  • 我的建议是:

  • 以算法的方式理解什么是插值
  • 无论您的目的是什么,都要编写算法/伪代码
  • 确保步骤1和2中的正确
  • 然后只尝试编写代码

  • 我在研究生工作中使用了Lanczos算法,我认为你的问题应该放在数学网站上。即使您只有一个实现问题,也需要大量的知识才能完全理解代码。@TimBiegeleisen这是一个编程问题,因此它更适合so(本网站),IMHO。@Klaslind bäck很公平,我已经投了赞成票。
                            |
                            |
                            V
            a sum operation in the neighbourhood 
                of the corresponding location
                   in the input image