Обнаружение краев на тусклых краях с использованием Python - PullRequest
0 голосов
/ 11 июня 2018

Я хочу найти тусклые края, используя Python.

Входные изображения (100 X 100):

enter image description here

enter image description here

enter image description here

Состоит из нескольких горизонтальных досок: верхней, средней, нижней.

Я хочу найтиограничивающий прямоугольник средней доски, такой как:

enter image description here

Я использовал несколько методов обнаружения краев (prewitt_x, sobel_x, cv2.findContours), но не могу хорошо определить.

Поскольку черная область края и области доски тусклая.

Как найти ограничивающую рамку, например красную рамку?

Приведенный ниже код является примером использования prewitt_x и cv2.findContours:

import cv2
import numpy as np

img = cv2.imread('my_dir/my_img.bmp',0)

# prewitts_x
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]])
img_prewittx = cv2.filter2D(img, -1, kernelx)
img_prewittx_gray = cv2.cvtColor(img_prewittx, cv2.COLOR_BGR2GRAY)
cv2.imwrite('my_outdir/my_outimg.bmp',img_prewittx)

# cv2.findContours
image, contours, hierarchy = cv2.findContours(img_prewittx_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(cnt) for cnt in contours]
print(rects)

На самом деле я не хочу использовать более медленный, например, детектор Canny.

Помогите мне:)

1 Ответ

0 голосов
/ 14 июня 2018

Мое предложение:

  • использовать простой фильтр обнаружения края, такой как Prewitt

  • проецирование по горизонтали (сумма пикселей в каждой строке)

  • проанализировать полученный профиль, чтобы обнаружить области низкой / высокой активности и разграничить нужные плиты.

enter image description here

Вы также можете попробовать максимум по строкам вместо суммы.

Но не ожидайте чудес, это сложная проблема.

...