Как обнаружить края изображения с помощью PythonPython

Программы на Python
Anonymous
Как обнаружить края изображения с помощью Python

Сообщение Anonymous »

У меня возникли проблемы с обнаружением краев на изображениях, соответствующих отверстиям в образце стекла.
Изображения выглядят следующим образом:
изображения
Каждое изображение содержит часть отверстия, вырезанного в образце стекла.
Просматривая изображения глазами, я ясно вижу две области: стекло и отверстие. К сожалению, все методы правильного обнаружения края не привели к хорошим результатам. Основная причина, почему мои попытки не увенчались успехом, я считаю, это недостаточный контраст между стеклом и дыркой. Отверстие не прорезается на всю толщину стекла, поэтому в отверстии остается стеклянное дно, рассеивающее свет обратно в камеру, что ухудшает контраст для меня.
Обработка изображений, которую я'ю я уже пробовал:
  • размытие (гауссово, двустороннее)
  • повышение резкости
  • регулировка контрастности
  • фильтрация среднего сдвига
  • адаптивное пороговое определение
  • обнаружение скрытых границ
  • обнаружение границ Собеля
  • сегментация водораздела
При съемке изображений я использую промышленный камера с кольцевой подсветкой из светодиодов. Кольцевую подсветку можно только включить или выключить, я не могу регулировать направление света или яркость.
Съемка изображений с разным временем экспозиции и аналоговым усилением не дала многого, поскольку контрастность оставалась бы одинаковой на протяжении всего времени. измерения.
Есть ли у кого-нибудь идеи, какие шаги я мог бы предпринять, чтобы правильно обнаружить края изображений?
Будь то обработка изображений, программирование или советы о том, как делайте снимки получше, любая идея приветствуется!
Вот отрывок из моего сценария:

Код: Выделить всё

import cv2
image = cv2.imread(
r'path/to/images')
blurred = cv2.GaussianBlur(image, (7, 7), 9)
gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 71, 5)
edges = cv2.Canny(thresh, 100, 200)

contours, _ = cv2.findContours(
edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

output_image = image.copy()
for contour in contours:
cv2.drawContours(output_image, [contour], -1, (0, 255, 0), 2)
cv2.imshow('Circle Edge', cv2.resize(output_image, (1000, 1000)))
cv2.waitKey(0)
cv2.destroyAllWindows()
на исходном изображении (найденном на изображениях в этом посте) обнаруженные края окрашены в зеленый цвет.
Заранее спасибо!
уже упоминалось в предыдущем тексте
предпринятые различные шаги по обработке/манипулированию изображениями

Подробнее здесь: https://stackoverflow.com/questions/786 ... ing-python

Вернуться в «Python»