0

次の数式を C コードで実装する必要があります: https://en.wikipedia.org/wiki/Lanczos_resampling したがって、多次元補間アプローチを使用しています。

多次元補間

ここで、L(xi) または L(yi) は次のとおりです。

ランチョスカーネル

小さなスクリプトで RGB 値を取得するために、ppm 画像形式を使用しています。これは私の実際の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

ありがとう!

4

1 に答える 1