Как убрать блики и яркость изображения (предварительная обработка изображений)?


19

У меня есть изображение

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

Есть ли способ убрать яркие белые пятна? Пожалуйста, помогите спасибо

Редактировать:

После работы с гауссианом и последующего отображения с помощью imagesc получите следующий вывод, который четко показывает ярко-красные пятна. Как мне избавиться от них?

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

Красный канал:

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

Зеленый коридор:

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

Синий канал:

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

Изменить 2:

Обнаружение дефектов с использованием фильтра Габора

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

Его гистограмма:

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

Как адаптивно рассчитать соответствующий ему порог.


Известна ли установка огней?
Nav

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

4
В общем, это некорректная проблема. У вас слишком много неизвестных, и вам придется прибегнуть к эвристическому решению. Удачи в выборе ответа.
нав

Ответы:


19

Давайте предположим, что блики являются единственными насыщенными областями на изображении. Обнаружение можно выполнить, установив порог интенсивности (код в Mathematica):

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

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

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

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

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


есть ли метод inpaint в matlab?
Вино

Извините, я не знаю ответа на этот вопрос.
Матиас Одисио

Обнаружение дефектов является идеальным, однако, необходимо выполнить окраску, так как в MATLAB нет встроенной функции
vini

1
Я рад, что ответ решил проблему. Что касается рисования в Matlab, это, вероятно, хорошо подходит для независимого вопроса о SO. См. Для начала stackoverflow.com/search?q=matlab+inpainting .
Матиас Одисио

2
Окрашивание может быть выполнено с помощью того, что обычно называют Учебное пособие по «смешиванию изображений Пуассона» здесь , код Matlab и примеры здесь .
Маврикий

4

Это может быть немного упрощенным ответом, но вы могли бы просто порог? например:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

результаты в:

уплощенное изображение

Очевидно, было бы лучше выбрать порог адаптивно. Например, вы можете посмотреть на гистограмму изображения:

hist(double(img(:)),0:255)

гистограмма

и попробуйте выбрать соответствующий порог на основе этого.


Просьба проверить мои правки 2
vini

@vini Попробуйте взглянуть на отсечку, где объясняется 90% сигнала
tdc

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

3
Но ваш вопрос: «Как убрать блики и яркость изображения (предварительная обработка изображения)?» не как обнаружить дефекты, это другой (более сложный) вопрос. @mrkulk ниже, кажется, дал почти полный ответ на этот вопрос также ниже.
TDC

да, мой вопрос, что я теперь, как обнаружить дефекты, однако этот блик мешает результат
vini

2

введите описание изображения здесьБез освещения информации это сложно. Однако, если форма объекта на изображении известна, вы можете установить шаблон формы белого блика (гауссовский) и сделать скользящее окно, чтобы найти возможное обнаружение бликов (с последующим смешиванием цветов из смежной области). Мы воспринимаем трехмерную форму на основе изображений, используя затенение. Если форма от затенения может дать градиент поверхности, мы могли бы сделать скользящее окно и проверить наш шаблон бликов в каждом месте.

После обнаружения острого края: -

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

В основном, перекрытие (максимальная площадь перекрытия) между изображениями № 1 и № 2 будет дефектом.


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

Вы пытались просто взять отдельные каналы (из RGB или YUV) и просто работать на них?
mrkulk

Самое яркое изображение - это изображение в зеленом канале. Как мне его исправить?
вини

Я попытался взять крайнее изображение (canny) с порогом 0,5. Как и ожидалось, я не видел бликов на изображении. Это должно дать вам сильный приоритет для регионов, которые не содержат блики.
mrkulk

Как это поможет мне создать изображение без бликов?
Вино

0

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

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

Зеркальный компонент - это блики, на блестящей поверхности, как у этого яблока, он намного больше, чем диффузное отражение (> 10x)

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

Мне нравится подход "vini", нет необходимости показывать самолеты RGB. Просто простой порог в градациях серого на самом деле будет работать здесь.

1- вы проектируете условия освещения, а не окружающие

2- сделать работу по классификации чрезвычайно тривиальной (пороговая)

3- измерить особенность

4- сравнить с допуском


0

Сначала преобразуйте в лабораторное цветовое пространство mapminmax, затем используйте первый канал яркости. Это уменьшает проблемы с цветом. Затем используйте пороговое значение на верхнем 80% ярком пикселе. Проверьте и проверьте на падение в гистограмме, лучший порог находится около основания падения. Если в этом регионе нет локальных мин, ваше изображение, вероятно, имеет минимальные отражения ...... Мартин

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.