2017-12-14 24 views
1

BMPファイルのビットマップを係数Mでダウンサンプリングします。私はエイリアシングなしで画像を取り除きたい。だから、それを達成するために、私は、このようにMXMピクセルの平均値を計算する:ビットマップのサイズを適切に変更する方法は?

Resize in good way

私はそれが唯一の広場にproprely平均値を計算するため、非二乗画像のサイズを変更しようとすると問題がapears。たとえば、最終画像が300x150の場合、平均は150x150ピクセルまでです。私が持っていた場合previous_mean - >これは私が実際にそれを計算する方法であるnew_mean = (previous_mean+value)/2

for (i = 0; i < new_height; i++) { 
for (j = 0; j < new_width; j++) { 
    mean.r = bitmap[i*factor][j*factor].r; 
    mean.g = bitmap[i*factor][j*factor].g; 
    mean.b = bitmap[i*factor][j*factor].b; 
    for(k = i*factor; (k < i*factor+factor)&&(k<old_height); k++){ 
    for(l = j*factor; (l < j*factor+factor)&&(l<old_width); l++){ 
     mean.r = (mean.r + bitmap[k][l].r)/2; 
     mean.g = (mean.g + bitmap[k][l].g)/2; 
     mean.b = (mean.b + bitmap[k][l].b)/2; 
    } 
    } 
    new_bitmap[i][j] = mean; 
    mean.r = 0; 
    mean.g = 0; 
    mean.b = 0; 
} 

}

new_bitmapbitmapPIXELSの2次元配列であり、PIXELSである:

typedef struct __attribute__((__packed__)){ 
    unsigned char b; 
    unsigned char g; 
    unsigned char r; 
} PIXELS; 
+0

Google "双線形補間"さらに良い結果を得るには、バイキュービックまたはランチョスを試してみてください。 –

+2

'mean.r =(mean.r + bitmap [k] [l] .r)/ 2;' sum.r + =ビットマップ[k] [l] .r; n ++; .... mean.r = sum.r/n; ' – chux

+0

なぜ2で割りますか? –

答えて

0

これは絶対に正しいです、私はold_widthを古いものと置き換えていました_heigth。

関連する問題