Устранение количества подключенных пикселей с отношением площади меньше порогового питона - PullRequest
1 голос
/ 26 октября 2019

Я искал следующий пример в этом вопросе: Устранение числа подключенных пикселей меньше определенного порогового значения , которое очень близко к тому, что мне нужно.

Однако анализколичество подключенных пикселей основано на значении oly, скажем, теперь я хочу удалить вместе с областями под определенным количеством пикселей также области с соотношением сторон, отличным от «квадрата».

Например, на следующем рисунке (левая панель) пример вывода скажем, у меня есть красная линия, которая равна 1900 пикселей, это означает, что при использовании порога

# now remove the labels
for label,size in enumerate(label_size):
    if size < 1800:
        Z[Zlabeled == label] = 0

красная линия не будетбыть устранены. Но если сейчас я увеличу порог (скажем, до 2000), может случиться так, что я уберу также две большие цифры на правой панели, которые являются моим желаемым результатом. Как мне нужно изменить код, чтобы учитывать также соотношение сторон подключенных компонентов?

Заранее спасибо:

1 Ответ

1 голос
/ 26 октября 2019

Возможное решение заключается в использовании анализа подключенных компонентов, выполненного таким образом

from scipy.ndimage.measurements import label
structure = np.ones((3, 3), dtype=np.int)


labeled, ncomponents = label(Z, structure)



indices = np.indices(Z.shape).T[:,:,[1, 0]]





for i in range(1,ncomponents):
    pixelcount = (np.sum(labeled==i))

    xs = indices[labeled==i][:,0]
    ys = indices[labeled==i][:,1]
    area = (np.max(xs)-np.min(xs)+2)*(np.max(ys)-np.min(ys)+1)
    if (pixelcount/area<1):
        pass
        labeled[labeled==i] = 0

plt.figure(1)
plt.imshow(labeled,cmap='jet')

, где в конце я проверяю соотношение между пикселем в данной подключенной области, деленное на количество пикселей / площадь области, поэтомутаким образом можно контролировать соотношение между пикселями и общей площадью

...