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


18

У своєму класі я повинен створити додаток, використовуючи два класифікатори, щоб вирішити, чи є об’єкт на зображенні прикладом phylum porifera (seasponge) чи яким-небудь іншим об'єктом.

Однак я повністю втрачений, коли мова йде про техніку вилучення особливостей у python. Мій радник переконав мене використовувати зображення, які не були висвітлені в класі.

Чи може хтось скеровувати мене до змістовної документації чи читання чи запропонувати методи для розгляду?


Ви згадали радника, тож я припускаю, що це частина завдання Вищої школи? Чи маєте ви доступ до будь-якого комерційного програмного забезпечення, чи очікуєте це зробити лише з пакетами Python та з відкритим кодом? Про що ви зараз дізнаєтесь на уроці та як називається клас? Крім того, чи є вимога до ефективності щодо часу, який повинен знадобитися, щоб дати відповідь?
MLowry

Очікується, що я буду використовувати тільки пакети Python та відкритий код. Навіть писати власний вихідний код не рекомендується. Це магістерський курс. Клас - це вступний курс з наукових даних. Останнє, що ми висвітлювали, - це вибір функцій, хоча майже вся дискусія стосується текстових даних. Немає вимог до продуктивності поза точністю ~ 70%
Jeremy Barnes

Відповіді:


11

На зображеннях деякі часто використовувані методи вилучення функцій - це бінаризація та розмивання

Бінаризація: перетворює масив зображень у 1s та 0s. Це робиться під час перетворення зображення на 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()

А розмитим зображенням є:

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

Отож, це декілька способів, за допомогою яких ви можете зайняти інженерну роботу. А для прогресивних методів ви повинні зрозуміти основи комп’ютерного бачення та нейронних мереж, а також різні типи фільтрів та їх значення та математику, що стоїть за ними.


1
Дуже дякую. Я публікував про це в декількох місцях, і ваше, безумовно, було найбільш інформативною відповіддю. Я зрозумів, що нерозумію, як концептуально працює витяг зображень.
Джеремі Барнс

Радий, що моя відповідь допомогла тобі :)
Dawny33

8

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

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

Існує ряд варіантів CNN в python, включаючи Theano та бібліотеки, побудовані на ньому (я знайшов кери зручними у використанні).

Якщо ви віддаєте перевагу уникати глибокого навчання, ви можете заглянути в OpenCV, який може вивчити багато інших типів функцій, лінійних каскадів Haar та функцій SIFT.

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


1

Як сказали Джеремі Барнс і Джеймсмф, ви можете використовувати будь-які алгоритми машинного навчання для вирішення проблеми. Вони потужні і могли автоматично визначати функції. Вам просто потрібно подати алгоритму правильні дані тренувань. Оскільки це потрібно для роботи над зображеннями, оптичні нейронні мережі будуть кращим варіантом для вас.

Це хороший посібник для вивчення невромережі згортки. Ви можете також завантажити код і міняти його відповідно до визначення проблеми. Але вам потрібно вивчити бібліотеку python та theano для обробки, і ви отримаєте хороші підручники і для цього

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.