C.中的图像/2D阵列重采样



我希望为2D阵列(可以是灰度图像或浮点值的2D阵列)实现重采样算法。

该特定操作涉及的步骤包括:

  1. 给定一个2D阵列,我首先使用某种下采样方法(最好使用前面的抗混叠滤波)将其下采样到8x8或16x16的大小。

  2. 对此进行了一些新的操作。

  3. 然后通过双线性插值将其上采样回原始大小。

作为一个原型,我对它进行了编码,如下Octave中所示。它给出了不错的结果。我希望得到一些关于C实现的参考。

fid = fopen("anti_vig_gain_map.txt","r");
fid2 = fopen("ds_us_anti_vig_gain_map.txt","w");
for i=1:1968
    for j=1:2592
       map(i,j) = fscanf(fid,'%fn',1);
    end
end
%downsample
ds_map = imresize(map,[8 8],'linear');
%% some processing on ds_map
%upsample
us_map = imresize(ds_map,[1968 2592],'linear');

我试着在imresize.m中查看代码,但过了一段时间后变得很复杂,无法从中提取C代码

任何指向双线性插值的引用C代码以执行上采样的指针。

还希望得到一些指针,用于抗混叠滤波器和使用双线性方法的下采样方法。

我认为您要查找的内容包含在NetPBM套件中。特别是pamscale,它处理向上和向下采样,并为两个方向提供多种可能的滤波方案。代码写得很好,而且是自包含的。

最新更新