Перевожу код из Matlab в C следующей функции:
Код
function noimg = smoothen_orientation_image(oimg)
    %---------------------------
    %smoothen the image
    %---------------------------
    gx      =   cos(2*oimg);
    gy      =   sin(2*oimg);
    
    msk     =   fspecial('gaussian',5);
    gfx     =   imfilter(gx,msk,'symmetric','same');
    gfy     =   imfilter(gy,msk,'symmetric','same');
    noimg   =   atan2(gfy,gfx);
    noimg(noimg<0) = noimg(noimg<0)+2*pi;
    noimg   =   0.5*noimg;
%end function smoothen_orientation_image


Я предположил, что фильтр применяется к каждой точке и результат получается как среднее от суммы поэлементного
перемножения матрицы фильтра на часть матрицы.

Матрицы gx, gy содержат значения от -1 до +1.
Фильр msk я сохранил в файл из Matlab и подгружаю в Builder.
Диапазон значений в msk от 0 до около 0,8.

То есть значения после фильтрации (gfx, gfy) не должны превышать 0,8.
Но в Matlab они по прежнему находятся в диапазоне от -1 до +1.

Посмотрел в Интернете - не нашел реализации imfilter на C.

Нашел несколько реализаций "gaussian blur" - есть подозрение что это одно и тоже.
Но они написаны на С++ и С#.

Как правильно работать с 2D фильтрами?