Я не мог понять последнюю часть своего исследования, поэтому, если бы кто-нибудь мог мне помочь, я был бы очень признателен за помощь ..:)
Скажите, что моя оригинальная матрица,
X =
0 0 0 0 0
0 0 12 9 0
0 4 9 15 0
0 11 19 0 0
0 2 4 8 0
0 4 5 8 0
0 0 0 0 0
и после нахождения среднего числа ненулевых я получу что-то вроде ниже:
new_x =
0 0 0 0 0
0 0 **9.0000** 9.0000 0
0 4.0000 9.0000 **9.0000** 0
0 **8.3333** **8.0000** 0 0
0 2.0000 4.0000 8.0000 0
0 4.0000 5.0000 8.0000 0
0 0 0 0 0
Обратите внимание, что любые элементы, которые больше 10, являются "центром", и мы хотим найтисреднее число ненулевых с радиусом, скажем, 1 м.где 1 метр = 1 элемент от центра.
** ** означает центр.
Для этой части я использовал следующее (из gnovice ):
X=[0 0 0 0 0; 0 0 12 9 0; 0 4 9 15 0; 0 11 19 0 0;
0 2 4 8 0; 0 4 5 8 0; 0 0 0 0 0];
kernel=[0 1 0; 1 0 1; 0 1 0];
sumx=conv2(X,kernel,'same');
nx=conv2(double(X>0),kernel,'same');
index=(X>10);
new_x=X;
new_x(index)=sumx(index)./max(nx(index),1);
Итак мой вопрос заключается в том, что я хочу сравнить соседние элементы с их центром , равны они, меньше или больше.Если оно больше или равно «1» или «0». Также любые элементы, находящиеся за пределами радиуса, можно игнорировать и заменить на «0».
Например, 9
в серединенаходится в радиусе 12, 15 и 19 центров, поэтому возьмите минимальный центр из этих `min [9.000, 9.000, 8.000] = 8.000.В этом случае 4 не будет приниматься во внимание, так как он не называется «центром», а также [8 4 5 и 8] в последних двух строках.
Поэтому я хочу что-то вроде ниже:
Test_x =
0 0 0 0 0
0 0 1 1 0
0 0 1 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Я разместил эту первую часть на форуме раньше, и я очень благодарен за каждое предложение ранее.
Пожалуйста, дайте мне несколько идей для начала.Я пытался использовать цикл, но, похоже, он не работал очень хорошо.Любая функция MATLAB, которая может выполнить эту работу за меня ..
Большое спасибо за помощь.
Новичок в MATLAB
Я думаю, что нашел решениена этот вопрос с помощью методов Джонаса.Спасибо за помощь Джонасу и Новичку:)
X = [0 0 0 0 0;0 0 12 9 0;0 4 9 15 0;0 11 19 0 0;0 2 4 8 0;0 4 5 8 0;0 0 0 0 0];
kernel = [0 1 0;1 0 1;0 1 0];
sumx = conv2 (X, ядро, "то же самое");
nx = conv2 (double (X> 0), ядро, "то же самое");
avg_x = X;
avg_x (avg_x <10) = 0; </p>
index = (avg_x> 10);
avg_x (index) = sumx (index) ./ max (nx (index), 1);
avg_x =
0 0 0 0 0
0 0 9.0000 0 0
0 0 0 9.0000 0
0 8.3333 8.0000 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
tmp_x = avg_x;
maxVal = max (avg_x (:)) + 1;
tmp_x (tmp_x == 0) = maxVal;
tmp_x = imerode (tmp_x, kernel);
Test_x = X> = tmp_x;