Функция свертки vDSP_imgfir возвращает 0 значений

Я пытаюсь использовать структуру Accelerate на iphone (iOS 5.1), чтобы выполнить свертку матрицы. Однако, когда я запускаю функцию

    double *dst = calloc(2*3,sizeof(double));
    double A[6*7]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    double B[5*5]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
    vDSP_imgfirD(A, 6, 7, B, dst, 5, 5);

Я просто получаю 0 по указателю результата. Любые предположения, почему это могло произойти? Я не нашел нигде подобных проблем.

Большое спасибо!


person kahlo    schedule 14.02.2013    source источник


Ответы (1)


Я думаю, что вам не хватает понимания свертки. Рекомендую поискать в википедии. Когда вы сворачиваете матрицу с ядром, в результате получается другая матрица того же размера, что и исходная матрица. Выше dst выделяет только 6 элементов, когда ваша входная матрица состоит из 42 элементов. dst также должен состоять из 42 элементов.

Я рекомендую для свертки взглянуть на vImageConvolve_Planar8 или vImageConvolve_PlanarF. Он намного лучше построен и заботится о многих угловых сценариях.

Надеюсь это поможет

person Khaled Barazi    schedule 15.02.2013
comment
Вы правы, я неправильно понял, какая свертка возвращает vDSP_imgFir. Большое спасибо! - person kahlo; 15.02.2013