Повторная выборка массива изображений / 2D в C - PullRequest
1 голос
/ 29 июня 2011

Я хочу реализовать алгоритм передискретизации для 2D-массива (это может быть изображение в градациях серого или некоторый 2D-массив значений с плавающей запятой).

Шаги, выполняемые в этой конкретной операции:

  1. Учитывая двумерный массив, я сначала уменьшаю его до размера 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,'%f\n',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 для билинейной интерполяции для выполнения повышающей дискретизации.

Также ищем несколько указателей для фильтра сглаживания и метода понижающей выборки с использованием билинейного метода.

1 Ответ

1 голос
/ 30 июня 2011

Я думаю, что вы ищете, содержится в наборе NetPBM. В частности, pamscale , который обрабатывает как повышающую, так и понижающую выборку с множеством возможных схем фильтрации для обоих направлений. Код хорошо написан и самодостаточен.

...