Scikit-image
Теги: machine-learning python
Scikit-image работает с [numpy] array
>>> from skimage import data
>>> camera = data.camera()
>>> type(camera)
<type 'numpy.ndarray'>
>>> # An image with 512 rows and 512 columns
>>> camera.shape
(512, 512)
Модуль data содержить несколько тестовых наборов данных
Импорт своих изображений
>>> import os
>>> filename = os.path.join(skimage.data_dir, 'moon.png')
>>> from skimage import io
>>> moon = io.imread(filename)
Отдельный пакет natsort позволяет предварительно отсортировать список натуральным образом (не лексикографически) перед импортом
>>> import os
>>> from natsort import natsorted, ns
>>> from skimage import io
>>> list_files = os.listdir('.')
>>> list_files
['01.png', '010.png', '0101.png', '0190.png', '02.png']
>>> list_files = natsorted(list_files)
>>> list_files
['01.png', '02.png', '010.png', '0101.png', '0190.png']
>>> image_list = []
>>> for filename in list_files:
... image_list.append(io.imread(filename))
[numpy] for images
>>> from skimage import data
>>> camera = data.camera()
>>> type(camera)
<type 'numpy.ndarray'>
>>> camera.shape
(512, 512)
>>> camera.size
262144
>>> camera.min(), camera.max()
(0, 255)
>>> camera.mean()
118.31400299072266
Каналы для цветных изображений
>>> cat = data.chelsea()
>>> type(cat)
<type 'numpy.ndarray'>
>>> cat.shape
(300, 451, 3)
>>> cat[10, 20]
array([151, 129, 115], dtype=uint8)
>>> # Set the pixel at (50th row, 60th column) to "black"
>>> cat[50, 60] = 0
>>> # set the pixel at (50th row, 61st column) to "green"
>>> cat[50, 61] = [0, 255, 0] # [red, green, blue]
Image data types
Изображение - это всего лишь массив numpy с одним из следующих типов:
Data | typeRange |
---|---|
uint8 | 0 to 255 |
uint16 | 0 to 65535 |
uint32 | 0 to 232 - 1 |
float | -1 to 1 or 0 to 1 |
int8 | -128 to 127 |
int16 | -32768 to 32767 |
int32 | -231 to 231 - 1 |
Функции могут поддерживать только подмножество определенных типов данных. В таком случае ввод будет преобразован в требуемый тип (если это возможно), и в лог будет напечатано предупреждающее сообщение, если потребуется копия в памяти. Доступны следующие служебные функции в основном пакете:
Function name | Description |
---|---|
img_as_float | Convert to floating point (integer types become 64-bit floats) |
img_as_ubyte | Convert to 8-bit uint. |
img_as_uint | Convert to 16-bit uint. |
img_as_int | Convert to 16-bit int. |
>>> from skimage.util import img_as_ubyte
>>> image = np.array([0, 0.5, 1], dtype=float)
>>> img_as_ubyte(image)
array([ 0, 128, 255], dtype=uint8)
Конвертация может приводить к потере точности! Кроме того, некоторые функции имеют собственные ограничению по ренжу.
Кроме того, можно использовать данные из [open-cv] с минимальными затратами на конвертацию. Подробнее
I/O Plugin Infrastructure
Handling Video Files
В исследовательских целях удобнее преобразовать файлы видео в последовательности изображений или многомерный TIF. Для одноразового решения самый простой и надежный способ — преобразовать видео в набор последовательно пронумерованных файлов изображений, часто называемый последовательностью изображений. Затем это можно читать так. Пример преобразования (из каждого кадра видео делается изображение, которое нумеруется пятью цифрами с добавлением нуля слева):
ffmpeg -i "video.mov" -f image2 "video-frame%05d.png"
Создание последовательности изображений имеет недостатки: они могут быть большими и громоздкими, а их создание может занять некоторое время. Как правило, предпочтительнее работать непосредственно с исходным видеофайлом. Для этого подойдет пакет PyAV
import av
v = av.open('path/to/video.mov')
for packet in container.demux():
for frame in packet.decode():
if frame.type == 'video':
img = frame.to_image() # PIL/Pillow image
arr = np.asarray(img) # numpy array
# Do something!
С помощью пакета pilms, написанного поверх PyAV, можно получяить доп.функциональность и работать с разными форматами, используя общий АПИ.
import pims
v = pims.Video('path/to/video.mov')
v[-1] # a 2D numpy array representing the last frame
Moviepy позволяет изменять небольшие видео. Imageio поддерживает большее число форматов.
Наконец, можно использовать [open-cv]
Image adjustment: transforming image content
Geometrical transformations of images
Полезные ресурсы
Смотри еще:
- scikit-image.org
- [computer-visions]
- [PIL]
- [open-cv]
- [scipy]
- [numpy]
- [machine-learning]