Как обнаружить точки, которые резко отличаются от соседей - PullRequest
7 голосов
/ 06 августа 2010

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

Спасибо

wavelet filtered image

Ответы [ 9 ]

5 голосов
/ 06 августа 2010

Зациклите каждый пиксель на изображении.Когда вы закончите с пикселем, пометьте его как «использованный» (измените его на какое-нибудь значение часового или оставьте эти данные в отдельном массиве, параллельном изображению).выполните заливку , отметив все эти пиксели как «использованные», и отследите, сколько пикселей было заполнено. Во время заливки убедитесь, что если рассматриваемый вами пиксельне темный, он достаточно яркий.

После заливки вы будете знать размер темной области, которую вы заполнили, и была ли граница заливки исключительно яркими пикселями.Теперь продолжайте исходный цикл, пропуская «использованные» пиксели.

3 голосов
/ 07 августа 2010

Как насчет медианной фильтрации?Пример значений из сетки 3 * 3 (или другого подходящего размера) вокруг пикселя и установите значение пикселя равным медиане этих 9 пикселей.

Тогда, если большинство соседей яркие, пиксель становится ярким и т. Д.

Редактировать: Подумав, я понял, что это не обнаружит выбросы, а удалит их.Так что это не то решение, о котором спрашивал оригинальный автор.

2 голосов
/ 06 августа 2010

Вы уверены, что не хотите использовать метод обнаружения кромок?Похоже, что сравнение текущего пикселя со средним значением соседних пикселей поможет.(Я бы оценил различные размеры окрестностей, чтобы быть уверенным.)

1 голос
/ 29 августа 2010

Лично мне нравится это алгоритмы обнаружения углов руководство.

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

1 голос
/ 12 августа 2010

Я на самом деле собираюсь предложить простое соответствие шаблонов для этого, если все ваши функции примерно одинакового размера.

Просто скопируйте и вставьте пиксели одного (или нескольких элементов), чтобы создать несколько шаблонов, а затем используйте Нормализованную взаимную корреляцию или любой другой показатель, который OpenCV предоставляет в своих процедурах сопоставления шаблонов, для поиска похожих областей. В результате определите все максимальные пики отклика (для этого в OpenCV также есть функция), и это ваши координаты объекта.

1 голос
/ 07 августа 2010

Я могу думать об этих методах, которые могут работать с некоторыми изменениями параметров:

0 голосов
/ 01 декабря 2015

Размытие (3х3) копии вашего изображения, а затем отличить оригинальное изображение. Пиксели с самыми высокими значениями - это те, которые больше всего отличаются от своих соседей. Это можно использовать в качестве алгоритма обнаружения ребер, но точки похожи на супер-ребра, поэтому установите порог выше.

what a single off pixel looks like:
(assume surrounding pixels are all 1)

original  blurred         diff
1,1,1     8/9,8/9,8/9     1/9,1/9,1/9
1,0,1     8/9,8/9,8/9     1/9,8/9,1/9
1,1,1     8/9,8/9,8/9     1/9,1/9,1/9


what an edge looks like:
(assume surrounding pixels are the same as their closest neighbor)

original  blurred         diff
1,0,0     6/9,3/9,0/9     3/9,3/9,0/9
1,0,0     6/9,3/9,0/9     3/9,3/9,0/9
1,0,0     6/9,3/9,0/9     3/9,3/9,0/9
0 голосов
/ 31 января 2011

Вы пытались извлечь подключенные компоненты с помощью cvContours? Сначала установите порог изображения (скажем, используя метод Оцу), а затем извлеките каждый контур. Поскольку пятна, которые вы хотите отследить, (из того, что я вижу на вашем изображении) несколько изолированы от окрестностей, они будут выглядеть как отдельные контуры. Теперь, если мы вычислим площадь ограничивающего прямоугольника каждого контура и отфильтруем более крупные, у нас останутся только маленькие точки, отделенные от темных соседей. Как было предложено ранее, небольшая морфологическая обработка перед разделением контуров должна дать хорошие результаты.

0 голосов
/ 06 августа 2010

Прошло несколько лет с тех пор, как я занимался обработкой изображений.Но я бы, вероятно, начал с преобразования в двоичное представление.Похоже, вы не слишком заинтересованы в средних значениях серого, только в очень темных / очень светлых областях, поэтому избавьтесь от всего серого.В этот момент различные морфологические операции могут подчеркнуть интересующие вас точки. Открытие и закрытие довольно легко реализовать, и они могут дать довольно хорошие результаты, оставляя вас с полем черного цвета везде, кроме интересующих вас точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...