Функция извлечения изображений в Python

18

В моем классе я должен создать приложение, используя два классификатора, чтобы решить, является ли объект на изображении примером phylum porifera (seasponge) или каким-либо другим объектом.

Тем не менее, я полностью растерялся, когда дело доходит до методов извлечения функций в Python. Мой советник убедил меня использовать изображения, которые не были рассмотрены в классе.

Может ли кто-нибудь направить меня к содержательной документации или чтению или предложить методы для рассмотрения?

Джереми Барнс
источник
Вы упомянули советника, так что я бы предположил, что это часть задания Аспирантуры? У вас есть доступ к любому коммерческому программному обеспечению, или вы должны делать это только с Python и пакетами с открытым исходным кодом? Что вы изучаете в классе на данный момент и как называется класс? Кроме того, есть ли требования к производительности с точки зрения времени, которое требуется, чтобы дать ответ?
MLowry
Ожидается, что я буду использовать только Python и пакеты с открытым исходным кодом. Написание собственного исходного кода даже не рекомендуется. Это курс магистратуры. Класс представляет собой вводный курс по науке о данных. Последнее, что мы рассмотрели, это выбор функций, хотя почти все обсуждения касаются текстовых данных. Там нет требований к производительности за пределами точности ~ 70%
Джереми Барнс

Ответы:

11

В изображениях некоторые часто используемые методы выделения объектов - это бинаризация и размытие

Бинаризация: преобразует массив изображений в 1 и 0. Это делается при преобразовании изображения в 2D-изображение. Можно использовать даже оттенки серого. Это дает вам числовую матрицу изображения. Оттенки серого занимают гораздо меньше места при хранении на диске.

Вот как вы делаете это в Python:

from PIL import Image

%matplotlib inline  

#Import an image
image = Image.open("xyz.jpg")

image

Пример изображения:

введите описание изображения здесь

Теперь конвертируйте в оттенки серого:

im = image.convert('L')

im

вернет вам это изображение:

введите описание изображения здесь

И матрицу можно увидеть, запустив это:

array(im)

Массив будет выглядеть примерно так:

array([[213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 175, 175, 175],
       ..., 
       [173, 173, 173, ..., 204, 204, 204],
       [173, 173, 173, ..., 205, 205, 204],
       [173, 173, 173, ..., 205, 205, 205]], dtype=uint8)

Теперь используйте гистограмму и / или контурную диаграмму, чтобы взглянуть на особенности изображения:

from pylab import *

# create a new figure
figure()
gray()
# show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')


figure()


hist(im_array.flatten(), 128)

show()

Это вернет вам сюжет, который выглядит примерно так:

введите описание изображения здесь введите описание изображения здесь

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

И вот как вы делаете это в Python:

from PIL import *


figure()
p = image.convert("L").filter(ImageFilter.GaussianBlur(radius = 2))
p.show()

И размытое изображение:

введите описание изображения здесь

Итак, вот несколько способов, которыми вы можете заниматься проектированием объектов. А для продвинутых методов вы должны понимать основы Computer Vision и нейронных сетей, а также различные типы фильтров и их значение, а также их математику.

Dawny33
источник
1
Огромное спасибо. Я писал об этом в нескольких местах, и ваш ответ был самым информативным. Я понял, что неправильно понимаю, как функция извлечения изображений работает концептуально.
Джереми Барнс
Рад, что мой ответ помог тебе :)
Dawny33
8

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

http://deeplearning.net/tutorial/lenet.html

В Python есть несколько опций для CNN, включая Theano и библиотеки, построенные поверх него (я обнаружил, что keras прост в использовании).

Если вы предпочитаете избегать глубокого изучения, вы можете изучить OpenCV, который может изучать многие другие типы функций, линейные каскады Хаара и функции SIFT.

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html

jamesmf
источник
1

Как сказали Джереми Барнс и Джеймсмф, вы можете использовать любые алгоритмы машинного обучения для решения этой проблемы. Они мощные и могут определять функции автоматически. Вам просто нужно подать в алгоритм правильные тренировочные данные. Так как это необходимо для работы с изображениями, нейронные сети свертки будут лучшим вариантом для вас.

Это хороший учебник для изучения нейронной сети свертки. Вы также можете загрузить код и изменить его в соответствии с определением вашей проблемы. Но вам нужно изучить Python и библиотеку theano для обработки, и вы получите хорошие учебники для этого тоже

http://deeplearning.net/tutorial/lenet.html

Арун Соурадж
источник