Loading [MathJax]/jax/output/HTML-CSS/jax.js

субота, 15 травня 2021 р.

Скелетизація

Mathedemo
Скелетом фігури (множини світлих пікселів) на бінарному зображенні називається множина пікселів, які рівновіддалені від країв фігури. Скелет є спрощеним описом фігури і в деяких задачах полегшує її подальший аналіз. Як морфологічна операція скелетизація зводиться до операцій розмикання, замикання та об'єднання і визначається формулою Lantuéjoul: S(A)=Nk=1Sk(A), де Sk(A)=(AkB)((AkB)B), а запис (AkB) означає послідовне виконання k ерозій до зображення A з структурними елеементом B. Верхній індекс сумування визначається з умови N=max{k(AkB)}.

В OpenCV немає окремої функції скелетизації, але в розширенні opencv-contrib-python є функція cv2.ximgproc.thinning яка має режим скелетизації:

img=cv2.imread('elef.jpg')
img_gray=255-cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img_bin = cv2.threshold(img_gray, 25, 255, cv2.THRESH_BINARY)[1]
rect = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) 
dilate = cv2.dilate(img_bin,rect,iterations = 2)             
img_sk=cv2.ximgproc.thinning(dilate,thinningType=cv2.ximgproc.THINNING_GUOHALL)
Скелетизація кольорового зображення.
Також можна використати функцію skeletonize з бібліотеки skimage. Приклад використання
from skimage import morphology
img = cv2.imread('Ji.jpg',0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]
img=np.array(img,dtype=bool)
sk=morphology.skeletonize(img)
Скелетизація зображення та його негативу.

Звернемо увагу, що на вхід функції skeletonize подається булівський масив.

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

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