Я все еще не уверен, что полностью понимаю проблему, но я чувствую, что мы не сможем продвинуться дальше без попытки.Так что это ваша функция, но она принимает во внимание края.Если вы новичок в MatLab, это должно быть сохранено в дополнительном файле с именем 'liebours.m'.
function quantity = neighbours(V,i,j)
height=size(V,1);
width=size(V,2);
quantity = sum(sum(V(max(i-1,1):min(i+1,height),max(1,j-1):min(j+1,width))))-V(i,j);
end
Если строка или столбец находится на краю матрицы, скажем (1,1) площадь уменьшается, чтобы оставаться внутри матрицы.в противном случае вы получите сообщение об ошибке (возможно, «индексы нижнего индекса должны быть либо натуральными положительными целыми числами, либо логическими значениями».) При этом вы можете просто пройтись по матрице, которая не является эффективной, но сработает.Этот код может быть запущен где угодно, кроме файла 'neighbours.m'
codeV = ones(5,3);
amount_of_neighbors = zeros(size(zcodeV));
for i=1:size(zcodeV,1) %height
for j=1:size(zcodeV,2) %width
amount_of_neighbors(i,j) = neighbours(codeV,i,j);
end
end
disp(amount_of_neighbors)