Processing math: 100%

понеділок, 17 травня 2021 р.

Операція ''потрапив/не потрапив'' ( hit and miss)

Mathedemo
Операція ''потрапив/не потрапив'' корисна для пошуку шаблонів у бінарних зображеннях. Алгоритм на вхід отримує зображення A і подвійний структурний елемент B=(B1,B2),B1B2=, а на виході -- зображення утворене з тих пікселів A які є центром тих околів, які відповідають формі структурного елемента B1 і не відповідають формі другого структурного елемента B2. Математично ця операція записується так (AB1)(¯AB2),
Операція ''потрапив/не потрапив'' в OpenCV реалізується функцією cv2.morphologyEx(img, cv2.MORPH_HITMISS, kernel) де kernel -- комбінований структурний елемент. Наведемо приклади деяких таких комбінованих елементів для стандартних патернів, з яких стає зрозумілий принцип їхнього утворення:
#Для ізольованого білого пікселя
point=np.array([[-1,-1,-1], 
[-1,1,-1],
[-1,-1,-1]], dtype="int")
#Для відрізку горизонтальної лінії товщиною 2 пікселі
# обмеженої згори пікселями фону 
hor=np.array([[-1,-1,-1], 
[1,1,1], 
[1,1,1]], dtype="int")
#Для відрізку вертикальної лінії товщиною 1 піксель 
vert=np.array([[-1,1,-1], 
[-1,1,-1], 
[-1,1,-1]], dtype="int")
#Для правого  верхньої кутового пікселя 
kut_vl=np.array([[-1,-1,-1], 
[1,1,-1], 
[0,-1,-1]], dtype="int")
										
#Для лівого нижнього кутового пікселя 
kutnp=np.array([[-1,1,0], 
[-1,1,-1], 
[-1,-1,-1]], dtype="int")
#Для ізольованого квадрату 2x2
kv=np.array([[-1,-1,-1,-1], 
[-1,1, 1,-1], 
[-1,1,1,-1],            
[-1,-1,-1,-1]], dtype="int")
На малюнку нижче показано результат застосування операції ''потрапив/не потрапив''
Результат застосування операції ''потрапив/не потрапив'' з комбінованим структурним елементом hor ( посередині) і ядром kut_vl.

Зауважимо, що ядро hor виділило лише пікселі (крім двох крайніх) верхньої горизонтальної сторони прямокутника і проігнорувало пікселі нижньої. Для виявлення нижньої горизонтальної лінії потрібно було використати такий комбінований структурний елемент:

np.array([[1,1,1], 
[1,1,1], 
[-1,-1,-1]], dtype="int")

Немає коментарів:

Дописати коментар