В моем проекте у меня есть высокие поверхности 20.000 точек, вычисленные алгоритмом. Иногда этот алгоритм имеет ошибку, неправильно вычисляя 1 или несколько точек в небольшой области.Обнаружение неправильных точек на однородной поверхности
Эта ошибка не может быть решена в алгоритме, но должна быть обнаружена впоследствии.
Ошибка можно увидеть на следующем рисунке:
Как вы можете видеть, существует точка неправильно подсчитал, что не только нарушает полную однородную поверхность, но и разрушает aestetics из (что также важно в проекте.)
Иногда это может быть больше, чем точка, обычно не более 5 или 6. Ошибка - это всегда ось Z, поэтому нет необходимости проверять X и Y
I сжимали мой разум, чтобы найти «универсальный» алгоритм для обнаружения этого poitns. Я думаю, что, может быть, это пятна поверхности и смысл Z, а затем определение точек из-за отклонения ... но я не думаю, что это будет работать всегда.
Любые идеи?
ПРИМЕЧАНИЕ: Я не хочу, чтобы кто-то написал для меня код, просто идея.
PD: соответствующий код для avobe изображения:
[x,y] = meshgrid([-2:.07:2]);
Z = x.*exp(-x.^2-y.^2);
subplot(1,2,1)
surf(x,y,Z,gradient(Z))
subplot(1,2,2)
Z(35,35)=Z(35,35)+0.3;
surf(x,y,Z,gradient(Z))
это кажется довольно приятным. плохо попробуйте и сообщите об этом. –
Хороший ответ, но 'cumsum' не работает для двух последовательных выбросов в том же столбце. Также '10' довольно произволен. По крайней мере, '3' - это стандартное число, соответствующее p-значению ~ 0,001. Хотя, если это ручной процесс для OP, он всегда может изменить это число, чтобы найти больше или меньше выбросов. – Bee
Он работает отлично для двух последовательных выбросов в той же колонке. Измените 'Z (35,35) = Z (35,35) +0,3;' на 'Z (35: 36,35) = Z (35: 36,35) +0,3;' и протестируйте его. –