Код
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
%---------------------------
%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 фильтрами?