Как рассчитать центр тяжести самого яркого пятна в строке пикселей? - PullRequest
2 голосов
/ 17 февраля 2010

Я хотел бы иметь возможность рассчитать «самую яркую точку» в строке пикселей. Это для примитивного 3D-сканера.

для тестирования я просто прошел через пиксели, и если текущий пиксель будет ярче, чем предыдущий, самая яркая точка этой линии будет установлена ​​на текущий пиксель. Это, конечно, дает очень нервные результаты на всех изображениях.

Я бы хотел получить «средний центр яркости», если это имеет смысл.

alt text

должно быть обычным делом, мне просто не хватает нужных слов для поиска в Google.

Ответы [ 3 ]

3 голосов
/ 17 февраля 2010

Рассчитать средневзвешенную интенсивность смещения.

Учитывая интенсивность вашего примера (предположено) и смещения:

0  0  0  0  1  3  2  3  1  0  0  0  0  0
1  2  3  4  5  6  7  8  9 10 11 12 13 14

это даст вам (5+3*6+2*7+3*8+9)/(1+3+2+3+1) = 7

1 голос
/ 17 февраля 2010

Вы ищете 1D Convolution , который использует фильтр, с помощью которого вы «сворачиваете» изображение.Например, вы можете использовать медианный фильтр (пример заимствования из Википедии)

x = [2 80 6 3]
y[1] = Median[2 2 80] = 2
y[2] = Median[2 80 6] = Median[2 6 80] = 6
y[3] = Median[80 6 3] = Median[3 6 80] = 6
y[4] = Median[6 3 3] = Median[3 3 6] = 3
so
y = [2 6 6 3]

Итак, здесь размер окна равен 3, так как вы смотрите на 3 пикселя за раз и заменяете пиксель вокруг этого окнасо среднимОкно 3 означает, что мы смотрим на первый пиксель до и первый пиксель после пикселя, который мы оцениваем в данный момент, 5 будет означать 2 пикселя до и после и т. Д.

Для среднего фильтра , вы делаете то же самое, за исключением замены пикселя вокруг окна средним значением всех значений, т.е.

x = [2 80 6 3]
y[1] = Mean[2 2 80] = 28
y[2] = Mean[2 80 6] = 29.33
y[3] = Mean[80 6 3] = 29.667
y[4] = Mean[6 3 3] = 4
so
y = [28 29.33 29.667 4]

Так что для вашей проблемы , y[3] - это "«Наименьшая яркая точка».

Обратите внимание, как обрабатываются границы для y[1] (без пикселей до него) и y[4] (без пикселей после него) - в этом примере «реплицируется» пиксель около границы.Поэтому мы обычно «дополняем» изображение реплицированными или постоянными границами, сворачиваем изображение и затем удаляем эти границы.

Это стандартная операция, которую вы найдете во многих вычислительных пакетах.

0 голосов
/ 18 февраля 2010

Ваша проблема похожа на поиск самой длинной проблемы последовательности. как только вы сможете определить последовательность (начальную точку и длину), все, что остается, - это найти медиану, которая является центральным элементом. для нахождения последовательности должно присутствовать определение светлого и темного, либо относительное -> предыдущее значение, либо пара предыдущих значений. Абсолют: фиксированный порог.

...