2015-04-28 4 views
3

У меня есть изображение, загруженное в мой код (очень длинный и ненужный, не будет размещаться здесь), что мне нужно работать с skimage, чтобы обнаружить капли в изображении. Однако по некоторым причинам все изображения и попытки, которые я использовал, не работают.Преобразование изображения PIL в skimage?

Изображение изменено PIL в коде выше, чтобы объекты, которые я пытаюсь найти, только белые (255, 255, 255) и все остальные черные. Этот код должен только определить их позиции. Я попробовал много разных вещей, чтобы заставить это работать (преобразование их в массив numpy, а не преобразование их в массив nump массива).

Я следую этим инструкциям: http://scikit-image.org/docs/dev/auto_examples/plot_blob.html для основ, но это не действительно учебник, еще один пример.

Я думаю, что функция rgb2gray является проблематичной, поскольку она возвращает ничего, кроме 0, в то время как печать (numpy.array (img)) возвращает значения между 0 и 1, что указывает на то, что потеря информации возникает при вызове rgb2gray ,

Вот код, который представляется проблематичным:

img_gray = rgb2gray(numpy.array(img)) # Convert to numpy array for skimage 
print(img_gray) 
print(numpy.array(img)) 
img_blobs = blob_doh(img_gray, threshold=0.01, max_sigma=500) 
print(img_blobs) 

Как я могу это исправить?

EDIT:

Вот то, что каждый из образов, массивы и списки печати:

[[ 0.   0.   0.   ..., 0.   0.   0.  ] #img_gray 
[ 0.   0.00392157 0.01568627 ..., 0.   0.   0.  ] 
[ 0.   0.01176471 0.05882353 ..., 0.   0.   0.  ] 
..., 
[ 1.   0.99607843 0.96078431 ..., 0.   0.   0.  ] 
[ 1.   1.   0.98039216 ..., 0.   0.   0.  ] 
[ 1.   1.   0.99215686 ..., 0.   0.   0.  ]] 
[[[ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0]] 

[[ 0 0 0] #img 
    [ 1 1 1] 
    [ 4 4 4] 
    ..., 
    [ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0]] 

[[ 0 0 0] #img 
    [ 3 3 3] 
    [ 15 15 15] 
    ..., 
    [ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0]] 

..., 
[[255 255 255] #img 
    [254 254 254] 
    [245 245 245] 
    ..., 
    [ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0]] 

[[255 255 255] #img 
    [255 255 255] 
    [250 250 250] 
    ..., 
    [ 0 0 0] #img 
    [ 0 0 0] 
    [ 0 0 0]] 

[[255 255 255] 
    [255 255 255] 
    [253 253 253] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]]] 
[] #img_blobs 
+0

Не могли бы вы выслать 'max (img), min (img), img.dtype'? – Zero

+0

попробуйте создать np.array (img) перед rgb2gray() и распечатать то, что у вас было до и после (так как Мэттью предлагает форму проверки и dtype) Попробуйте сделать свои собственные малые тестовые массивы (8,8,3) astype (np.uint8) и т. д., чтобы убедиться, что что-то конкретное останавливает его работу. – paddyg

+1

max (img), min (img) и img.dtype все ошибки при запуске (тип изображения не итерируется, а dtype не является атрибутом img) Создание массива перед rgb2gray() ничего не делает, но в отредактированная часть сообщения, она показывает тестовые распечатки для (в порядке) img_gray, img, затем img_blobs (обнаруженные капли). –

ответ

0

Это будет читать файлы изображений (с помощью PIL) в ScImage:

from skimage import io 
img = io.imread("./path/to/image.png") 

Поскольку вы уже читали изображения и хотели сами сделать преобразование данных, вы можете посмотреть, как это сделали авторы плагина здесь: https://github.com/scikit-image/scikit-image/blob/master/skimage/io/_plugins/pil_plugin.py