Получите абсолютную производную изображения с помощью python или Halcon

Я думаю, что из 1 на картинке с фильтром Гаусса я бы получил 2. Я хочу получить номер 3. Я хочу получить производное, но только абсолютное количество. чего я хочу

Я в основном хочу отфильтровать градиент большого треугольника и просто получить неровности (стрелка на изображении) anotherpic

Я мог бы использовать синус вместо треугольника, это упростит задачу? Как я могу реализовать это на Python или Halcon? На что мне следует обратить внимание, чтобы лучше понять, чего я хочу и как этого добиться?

изменить: я хочу найти «дефекты» и избавиться от теории шаблонов: sampleimage

Реальное изображение с реальными дефектами: realimage


person plattenkondensator    schedule 24.10.2019    source источник
comment
Пожалуйста, предоставьте более подробный контекст того, о чем вы спрашиваете. Также предоставьте образцы изображений, показывающих все, что вы хотите найти или скрыть. Спасибо.   -  person Mark Setchell    schedule 24.10.2019
comment
Надеюсь, изображение поможет. Я хочу использовать его для дефлектометрии поверхности.   -  person plattenkondensator    schedule 24.10.2019


Ответы (2)


Фильтр Гаусса не дает производной. Это средневзвешенная величина.

Ваше предположение, что гауссиан даст вам 2 для ввода 1, неверно.

Просто подавите низкие частоты вашего фона, например, с помощью Notch-фильтра.

Быстрый и грязный пример:

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

Также см. Найдите подходящий режекторный фильтр для удаления узора с изображения

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

person Piglet    schedule 24.10.2019
comment
Спасибо! Я посмотрю на режекторный фильтр. - person plattenkondensator; 24.10.2019
comment
Фон может искажаться. Я добавил другое изображение. - person plattenkondensator; 24.10.2019
comment
@JohannaM, но мне это очень похоже на дефлектометрию. вам не нужно заново изобретать колесо. просто исследуйте существующие решения - person Piglet; 24.10.2019

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

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

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

   read_image(imgInput, 'C:/Users/jpeyton/Documents/zzz_temp/FringePat_raw.jpg')
*smooth input image with mean using vertically oriented rectangular kernel
   mean_image (imgInput, imgMean, 3, 15)
*subtract smoothed image from raw image to get local / high frequency residuals
   abs_diff_image(imgMean,imgInput,imgAbsDiff, 1)
*threshold away background 
   threshold (imgAbsDiff, Regions, 8, 255)

Плавно с оператором среднего. Вертикально ориентированное ядро ​​(в данном случае 3x15)  Сглаженное изображение

Вычтите сглаженное изображение из необработанного изображения и порогового значения:

сегментированные высокочастотные дефекты

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

Итак, компромисс заключается в том, что фильтр БПФ / ДПФ не использует направление шаблона и оставляет за собой краевые / гармонические артефакты. Подход с фильтром верхних частот (как указано выше) не будет чувствителен к дефектам, так как частота приближения / превышения интерференционной полосы.

person Jim    schedule 17.12.2019