Ниже приведен загруженный (я немного его настроил) алгоритм для фильтра нелокальных средств:
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)?Заранее спасибо!