Как обнаружить аномалии в opencv (c ++), если порог не достаточно хорош?

У меня есть изображения в градациях серого, как это:

введите описание изображения здесь
Я хочу обнаружить аномалии на изображениях такого типа. На первом изображении (вверху слева) я хочу обнаружить три точки, на втором (вверху справа) есть небольшая точка и «туманная область» (внизу справа), а на последнем — также немного меньшая точка где-то посередине изображения.

Нормальный статический трешолдинг у меня не работает, а метод Оцу всегда лучший выбор. Есть ли лучший, более надежный или более разумный способ обнаружения таких аномалий? В Matlab я использовал что-то вроде Frangi Filtering (фильтрация собственных значений). Кто-нибудь может предложить хороший алгоритм обработки для решения проблемы обнаружения аномалий на таких поверхностях?

РЕДАКТИРОВАТЬ: Добавлено другое изображение с отмеченными аномалиями:

введите описание изображения здесь

Использование фильтрации @Tapio tophat и регулировка контрастности.
Поскольку @Tapio дает нам отличную идею о том, как увеличить контраст аномалий на поверхностях, как я и просил в начале, я предоставлю всем вам, ребята, некоторые из моих результатов. У меня есть и изображение, как это:
введите описание изображения здесь

Вот мой код, как я использую фильтрацию tophat и регулировку контрастности:

kernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3), Point(0, 0));
morphologyEx(inputImage, imgFiltered, MORPH_TOPHAT, kernel, Point(0, 0), 3);
imgAdjusted = imgFiltered * 7.2;

Результат здесь:

введите описание изображения здесь

Есть еще вопрос, как сегментировать аномалии из последнего изображения? Так что, если у кого-то есть идея, как ее решить, просто возьмите! 🙂 ??

2

Решение

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

первая пара изображений

вторая пара изображений

третья пара изображений

Я настроил контраст, чтобы сделать оба изображения видимыми. Аномалии гораздо более выражены, если смотреть на интенсивность, и их гораздо легче сегментировать.

Давайте посмотрим на первое изображение:

необходима точность сегментации

Значения гистограммы не представляют реальность из-за масштабирования, вызванного инструментами визуализации, которые я использую. Однако относительные расстояния делают. Таким образом, теперь диапазон порога намного больше, цель изменилась с окна на дверь сарая.

Глобальный порог (интенсивность> 15):

После глобального установления порога

Метод Оцу здесь работал плохо. Он сегментировал все мелкие детали на первый план.

После удаления шума путем морфологического вскрытия:

После морфологического вскрытия

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

3

Другие решения

@ skoda23, я бы попробовал нечеткое маскирование с точно настроенными параметрами для размытой части, чтобы подчеркнуть высокие частоты, и тщательно протестировать, чтобы в процессе не потерялась важная информация. Помните, что обычно не стоит ожидать, что компьютер будет выполнять сверхчеловеческую работу. Если у человека есть сомнения относительно того, где аномалии, компьютер должен будет. Поэтому важно предварительно обработать изображение, чтобы аномалии были очевидны для человеческого глаза. Альтернативой для нечеткой маскировки (или дополнения) может быть CLAHE. Но опять же: не забывайте подстраивать его очень аккуратно — это может слишком сильно выделить текстуру доски и помешать вашей задаче.

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

Мое второе предположение — сначала использовать пороговое значение с фиксированным значением для самых темных точек, а затем пробовать Собел или Канни. Должно существовать оптимальное соседство, в котором текстура доски не будет сиять так сильно, как аномалии. Вы также можете попробовать размывать перед обнаружением края (если вы обнаружили небольшие дефекты с помощью порога).

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

2

Вы в основном имеете дело с прискорбным фактом, что реальность является аналогом. Порог — это метод, позволяющий превратить аналоговый диапазон в дискретный (двоичный) диапазон. любой порог сделает это. Так что именно вы имеете в виду под «достаточно хорошим» порогом?

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

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

Я не претендую на то, что эти два типа отклонений — единственные два, но это действительно вопрос предметной области, а не о методах. Например. у вас нет артефактов (отражений), по крайней мере, в этих 3-х образцах.

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector