Сглаживание неровных краев изображения - PullRequest
0 голосов
/ 28 ноября 2018

Я хотел бы создать скелет из изображения.Поскольку края, которые генерируются с использованием skimage из исходного изображения, не являются гладкими, результирующий skeleton, полученный из binary, имеет отсоединенные края с узлами.

import skimage
from skimage import data,io,filters
import numpy as np
import cv2
import matplotlib.pyplot as plt
from skimage.filters import threshold_adaptive,threshold_mean
from skimage.morphology import binary_dilation
from skimage import feature
from skimage.morphology import skeletonize_3d

imgfile = "edit.jpg"
image = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
thresh = threshold_mean(image)
binary = image > thresh
edges = filters.sobel(binary)
dilate = feature.canny(binary,sigma=0)
skeleton = skeletonize_3d(binary)
fig, axes = plt.subplots(nrows=2,ncols=2, figsize=(8, 2))
ax = axes.ravel()

ax[0].imshow(binary, cmap=plt.cm.gray)
ax[0].set_title('binarize')

ax[1].imshow(edges, cmap=plt.cm.gray)
ax[1].set_title('edges')

ax[2].imshow(dilate, cmap=plt.cm.gray)
ax[2].set_title('dilates')

ax[3].imshow(skeleton, cmap=plt.cm.gray)
ax[3].set_title('skeleton')

for a in ax:
    a.axis('off')

plt.show()

Я пытался использовать dilate, чтобы сгладить неровные края.Но у контуров в skeleton есть два ребра вместо одного желаемого ребра.

Я хотел бы попросить совета о том, как можно сгладить ребра, чтобы избежать сучков и разъединенных ребер в результирующем skeleton.

edit.jpg Входное изображение

output Вывод изображений

Редактировать: после использования гауссового сглаживания

binary = image > thresh
gaussian = skimage.filters.gaussian(binary)
skeleton = skeletonize_3d(gaussian)

enter image description here

...