2013-04-27 3 views
0

Я знаю, как проверить 8-neighbourhood в matlab (i.e; nlfilter). Но я хочу присвоить значение, которое больше повторяется с центральным значением. Так, скажем, например, что у меня есть следующие значения в 8-окрестности:Большинство повторяющихся значений

2-значения = 56

3-значения = 64

1-значение = 70

1- значение = 87

1-значение = 65

в этом случае мы бы назначить 64 к центру пикселя.

Как мы можем это сделать?

Спасибо.

+0

насчет конфликтов, т.е. два значения наиболее повторяются? – Oleg

ответ

2

Я думаю, вы хотите либо mode, либо функцию histc.

М = ​​режим (Х) для вектора X вычисляет M в качестве режима выборки, или наиболее часто возникающего значения в X.

Пример с данными:

x = [56 56 64 64 64 70 87 65]; 
mode(x) 

ans = 

64 

Но это принесет вам наиболее часто возникающую ценность.

Если вы хотите, чтобы количество каждого уникального элемента в массиве, вы могли бы сделать,

unqx = unique(x); 

unqx = 

56 64 65 70 87 

valueCount = histc(x, unqx) 

ans = 

2  3  1  1  1 

Вы могли бы разобраться в этом и сделать первые N значения от

valueCount = sort(valueCount, 'descend'); 
% Use unqx(valueCount(1:N)) 
+0

Следует иметь в виду, что: * «Если несколько значений встречаются одинаково часто, режим возвращает наименьшее из этих значений» * – Oleg

+0

Чтобы подсчитать, 'histc()' является лучшим вариантом. – Oleg

Смежные вопросы