Я думаю, твердость (т. Е. Отношение пикселей в объекте к пикселям выпуклой оболочки) может быть хорошим показателем для начала ваших испытаний.Его можно вычислить простым способом с помощью функции skimage.measure.regionprops
.Результаты, которые я получил, используя этот подход, показаны ниже:
Если этот показатель не подходит для вашего приложения, вы можете попробовать компактность круговая дисперсия .Взгляните здесь для всесторонней компиляции морфологических признаков.
Это код, который я использовал для генерации игрушечного примера выше:
import numpy as np
from skimage import io, draw, transform, measure
import matplotlib.pyplot as plt
N = 512
rr, cc = draw.circle(r=N/2, c=N/2, radius=N/3, shape=(N, N))
steps = [4, 16, 32]
smooth = np.zeros(shape=(N, N), dtype=np.uint8)
smooth[rr, cc] = 255
fig, ax = plt.subplots(1, len(steps), figsize=(12, 5))
for i, s in enumerate(steps):
jagged = transform.resize(smooth[::s, ::s], (N, N))
jagged[jagged>0] = 1
props = measure.regionprops(measure.label(jagged))
ax[i].imshow(img)
ax[i].set_title('Solidity={}'.format(props[0].solidity))
plt.show(fig)