Я обновил решение для работы на Python 3.7
import sys,os
import numpy as np
from PIL import Image
from skimage import measure
try:
from skimage import filters
except ImportError:
from skimage import filter as filters
# Init values
n = 2
img = Image.open("test.jpg")
data = np.array(img)
xlen = len(data[:,0])
ylen = len(data[0,:])
# Finds tha max and min value from the array
maxv = max(data.flatten())
minv = min(data.flatten())
# Data segmentation process
data = filters.gaussian(data, sigma = 1/n)
blobs = data > 0.8*(data.mean()) # Also play with this value
labels = measure.label(blobs)
setL = set(filter(lambda a : a !=0, labels.flatten()))
arrLab = []
lstPath=[]
# output dir
out_path = 'Segmentacion/'
if not os.path.isdir(out_path):
os.makedirs(out_path)
# Binarization of the image
for i in range(1,len(setL),1):
data2 = labels.astype('uint8')
data2[data2 != i] = minv
data2[data2 == i] = maxv
arrLab.append(data2)
# Size limit Play with this value
limit = 100
# Write the value of the array
for ik in range(0,len(arrLab),1):
ev = arrLab[ik]
flat = list(filter(lambda a:a!=0,ev.flatten()))
mide = len(flat)
# If the image is smalled than the size of the image then wirte the image.
if mide >= limit:
lout = Image.fromarray(ev)
lout.save(out_path + "Img_%s.png"%ik)
Как test.jpg Я использовал это изображение:
Результат этих изображений в папке Segmentacion :
Я использовал этот код для сегментирования изображений мозолистого тела, полученных из МРТ.
Надеюсь, это может помочь вам и направить вас в правильном направлении!