Скачанный Нелокальный означает, что фильтр не работает - PullRequest
0 голосов
/ 24 февраля 2019

Ниже приведен загруженный (я немного его настроил) алгоритм для фильтра нелокальных средств:

function [cleared] = Non_Local_Means(I,f,t,h)

[m,n] = size(I);


% Making gaussian kernel
su=1;          %standard deviation of gaussian kernel
sm=0;          % sum of all kernel elements (for normalization)
ks= 2*f+1;     % size of kernel (same as neighborhood window size)
% Initiating kernel
ker = zeros(ks,ks);
for x=1:ks
for y=1:ks
    ab = x-f-1;   %horizontal distance of pixel from center(f+1, f+1)
    cd = y-f-1;   % vertical distance of pixel from center (f+1, f+1)
    ker(x,y) = 100*exp(((ab*ab)+(cd*cd))/(-2*(su*su)));
    sm = sm + ker(x,y);
end
end
kernel = ker ./ f;
kernel = kernel / sm;   % normalization


% Assign a clear output image
cleared = zeros(m,n);


I = padarray(I,[f,f],'symmetric');

% Now we'll calculate ouput for each pixel
for i=1:m
for j=1:n
    im = i+f;   % to compensate for shift due to padarray function
    jn= j+f;
    % neighborhood of concerned pixel (we called it similarity window)
    W1 = I(im-f:im+f , jn-f:jn+f);
    % BOundaries of similarity window for that pixel
    rmin = max(im-t, f+1);
    rmax = min(im+t, m+f);
    smin = max(jn-t, f+1);
    smax = min(jn+t, n+f);
    % Calculate weighted average next
    NL=0;    % same as cleared (i,j) but for simplicity
    Z =0;    % sum of all s(i,j)
    % Run loop through all the pixels in similarity window
    for r=rmin:rmax
        for s=smin:smax
            % neighborhood of pixel 'j' being compared for similarity
            W2 = I(r-f:r+f, s-f:s+f);
            % square of weighted euclidian distances
            d2 = sum(sum(kernel.*(W1-W2).*(W1-W2)));   %LINE 67
            % weight of similarity between both pixels : s(i,j)
            sij = exp(-d2/(h*h));
            % update Z and NL
            Z = Z + sij;
            NL = NL + (sij*I(r,s));
        end
    end
    % normalization of NL
    cleared(i,j) = NL/Z;
end
end
% convert cleared to uint8
cleared = uint8(cleared);

end 

Но он дает мне следующую ошибку:

Ошибка при использовании. * Целые числа можно комбинировать только с целыми числами одного класса или скалярными двойными числами.

Ошибка в Non_Local_Means (строка 67) d2 = сумма (сумма (ядро. (W1-W2). * 1009).* (W1-W2)));

Ошибка в filter_process (строка 32) eval (['filter_Images.', Name_of_cells {i}, '(', num2str (m), ')', '.», имя_столбца {п}, '(:,:,', num2str (р), ') = Non_Local_Means (filter_Images', name_of_cells {I}, '(', num2str (м), ')', ''.., column_name {n}, '(:,:,', num2str (p), '), f, t, h);'])

Ошибка без названия> pushbutton13_Callback (строка 1157) handles.filtered_Images= filter_process (Images, f, t, h);

Ошибка в gui_mainfcn (строка 95) feval (varargin {:});

Ошибка в без названия (строка 42) gui_mainfcn (gui_State,varargin {:});

Ошибка в @ (hObject, eventdata) без названия ('pushbutton13_Callback', hObject, eventdata, guidata (h)Объект))

Ошибка при оценке обратного вызова UIControl

Как я могу решить эту проблему (ЛИНИЯ 67)?Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...