Введение

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

В конце концов, этот процесс добавления или вычитания слоев становится методом проб и ошибок, чтобы добиться хороших результатов. точность », и, вероятно, мы получим выдающуюся« точность »в зависимости от количества изменений, которые мы вносим в эту модель. Но только для того, чтобы получить хорошую точность (заметьте, что это важно), мы забыли суть извлечения различных типов функций из изображений - функций, связанных с текстурой и формой различных областей изображения.

Может возникнуть вопрос, зачем тратить время на извлечение функций вручную, а затем на обучение модели машинного обучения? Я разработал пакет python, который поможет избежать проблем с извлечением функций из каждого изображения и последующим их сохранением в фрейме данных для последующего применения традиционного Machine Модели обучения. Пакет работает только для двухканальных серых изображений.

Установка пакета

Установка зависимостей OpenCV

sudo apt-get update
# Opencv-Deps
sudo apt-get install build-essential checkinstall cmake pkg-config yasm
sudo apt-get install git gfortran
sudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394–22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install qt5-default libgtk2.0-dev libtbb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install x264 v4l-utils
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen 
sudo apt-get install python3-dev python3-pip

A. Установить с помощью PIP

# package installation 
pip3 install git+https://github.com/vatsalsaglani/xrayimage_extractfeatures.git

Б. Клонирование и установка

git clone https://github.com/vatsalsaglani/xrayimage_extractfeatures.git
cd xrayimage_extractfeatures
python3 setup.py install

Введение в пакет

Пакет включает в себя следующее содержимое,

  1. Возможности GLCM
  2. Моменты
  3. Свойства региона
  4. Помощники
  5. Извлечение функций
  6. Дополнительно

1. Возможности GLCM

  • Корреляция
  • Однородность
  • Энергия
  • Контраст

Но что такое GLCM?

Статистически GLCM - это метод исследования текстуры, который учитывает пространственные отношения пикселей в матрице совместной встречаемости на уровне серого или GLCM. Текстура характеризуется GLCM на основе того, как часто пары пикселей с определенными значениями и с определенным пространственным соотношением встречаются в изображении.

Извлечение функций GLCM:

from xtract_features.glcms import *
feats = glcm(img)
# energy
energy = feats.energy()
# correlation
corr = feats.correlation()
# contrast
cont = feats.contrast()
# homogeneity
homogeneity = feats.homogeneity()
# all the features at once
_all = feats.glcm_all()

2. Моменты

  • 24 вариант изображение момент значения
  • Моменты Ху

Как моменты как концепт используются для изображений?

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

Извлечение моментов из изображения

from xtract_features.moments import *
_moments = moment(img).get_moments()
_hu_moments = moment(img).get_HuMoments()

_moments - это список из 24 вариантов моментов, а _hu_moments - это список из 7 моментов hu, которые являются инвариантными.

3. Свойства региона

Извлечение свойств региона

from xtract_features.region_props import *
_rp = region_props(img)
# maximum area region
max_area = _rp.max_area()
# plot regions
_rp.plot_image()
# plot black and white
_rp.plot_show_bw()
# plot with lables
_rp.plot_image_with_label()
# mean of areas of all the regions
_rp.mean_area()
# eccentricity of the highest area region
_rp.eccentricity()

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

euler_number()
solidity()
perimeter()
# standard deviation of all the areas of the regions of the given image
std_area()
# otsu’s Threshold
thresh_image()
bb()
bb_area()
centroid_r()
convex_area_r()
coordinates_r()
eq_diameter()
extent_r()
filled_area_r()
inertia_tensor_area()
label_r()
inertia_tensor_eigvals_r()
local_centroid_r()
maj_ax_len()
min_ax_len()
orient()

4. Помощники

Этот модуль обеспечивает некоторые основные функции, такие как извлечение массивов-изображений-numpy по пути к папке, содержащей DICOM. файлы, сохраняя список, содержащий каждый numpy-image-array, полученный из пути к файлу pickle, а также может загружать любой ранее сохраненный файл pickle.

а. Извлечь список массивов изображений-numpy: extract_img_array()

from xtract_features.helpers import extract_img_array
# get list of numpy image arrays and a list of filename/ids
numpy_list, ids = extract_img_array(‘path-to-image-folder’, getID = True)
# only get a list of numpy image arrays
numpy_list, ids = extract_img_array(‘path-to-image-folder’)
# here the ids list will be an empty list

б. Сохранить рассол: save_pickle()

Учитывая извлеченный список массивов-изображений или список-идентификаторов-изображений / имен, мы можем сохраните его с помощью функции save_pickle().

from xtract_features.helpers import save_pickle
save_pickle(numpy_list, “numpy-list”) 
save_pickle(ids, “ids-list”)

c. Загрузить рассол: load_pickle()

Имея любой сохраненный .pkl файл, мы можем загрузить его с помощью функции load_pickle().

from xtract_features.helpers import load_pickle
np_list = load_pickle(“numpy-list”)
ids = load_pickle(“ids-list”)

d. Показать изображение: show()

Отобразите изображение, сохраненное в форме numpy-image-array, с помощью функции show().

from xtract_features.helpers import show
# show with title
show(np_list[1], title = ids[1])
# show without title
show(np_list[1])

е. Графики: plots()

С помощью функции plots() отобразите список изображений, хранящихся в форме numpy-image-array.

from xtract_features.helpers import plots
#plots with titles
plots(np_list[:8], titles = ids[:8]
# plots without titles
plots(np_list[:8])

5. Извлечение признаков

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

Но прежде чем перейти к этому, давайте рассмотрим некоторые другие функции этого модуля.

а. Энтропия

from xtract_features.extract import s_entropy, entropy_simple
# shannon's entropy
s_entr = s_entropy(img)
# simple entropy
entr_simp = entropy_simple(img)

б. Словарь функций из Image Path: feature_dict_from_imgpath()

  • getId = True: ключи созданного словаря функций - это имя-изображения / идентификатор-изображения, извлеченные при создании массива-numpy-изображений. список.
  • getId = False (по умолчанию): ключи созданного словаря функций представляют собой целое число, которое соответствует списку функций.
from xtract_features.extract import feature_dict_from_imgpath
# getId = True
data_d = feature_dict_from_imgpath(‘path-of-image-folder’, ids, getId = True)
# getId = False
data_d = feature_dict_from_imgarray(numpy_list, [])

c. Словарь функций из списка массивов изображений: feature_dict_from_imgarray()

  • getId = True: ключи созданного словаря функций - это имя-изображения / идентификатор-изображения, извлеченные при создании массива-numpy-изображений. список.
  • getId = False (по умолчанию): ключи созданного словаря функций представляют собой целое число, которое соответствует списку функций.
from xtract_features.extract import feature_dict_from_imgarray
#getId = True
data_d = feature_dict_from_imgarray(numpy_list, ids, getId = True)
# getId = False
data_d = feature_dict_from_imgarray(numpy_list, [])

d. Получить фрейм данных из пути к изображению: get_df_from_path()

  • getId = True: если вам нужно, чтобы файл функций .csv имел соответствующие имена-изображения / идентификаторы для их значений функций
  • getId = False (по умолчанию): выходной файл будет пронумерован и не будет содержать никаких image-name / id, соответствующих значению функции
from xtract_features.extract import get_df_from_path
# getId = True
df = get_df_from_path(‘path-to-image-folder’, ids, getId = True)
# getId = False (default)
df = get_df_from_path('path-to-image-folder', [])

е. Получить фрейм данных из списка массива изображений: get_df_from_img_array()

  • getId = True: если вам нужно, чтобы файл функций .csv имел соответствующие имена-изображения / идентификаторы для их значений функций
  • getId = False (по умолчанию): выходной файл будет пронумерован и не будет содержать никаких image-name / id, соответствующих значению функции
from xtract_features.extract import get_df_from_img_array
# getId = True
df = get_df_from_img_array(‘path-to-image-folder’, ids, getId = True)
# getId = False (default)
df = get_df_from_img_array('path-to-image-folder', [])

6. Дополнительно

  • 2D свертки
  • Сегментация
  1. 2D-свертки: conv2d()

Для обнаружения границ, повышения резкости и размытия изображения мы используем 2D-свертки.

from xtract_features.twodconv import conv2d
conv2d(image, "kernel-name")

Внутри пакета доступно 14 ядер / матриц свертки:

  • identity
  • edge-all
  • edge-H
  • edge-V
  • sharp
  • gauss-3
  • gauss-5
  • boxblur
  • unsharp
  • gradient-H
  • gradient-V
  • sobel-H
  • sobel-V
  • emboss

2. Сегментация: water_seg()

На данный момент пакет включает только один метод сегментации, Сегментацию водораздела.

from xtract_features.segmentations import water_seg
water_seg(image)

Если эта статья помогла вам каким-либо образом и она вам понравилась, пожалуйста, оцените ее, поделившись ею со своим сообществом. Это моя первая статья об извлечении функций из изображений и обработке изображений, и в этой статье я изложил все, что знаю об этом.

Каждый фрагмент кода извлечения функций доступен в Интернете, но он разбросан, и единственная цель этого пакета xtract_features - объединить их в одном месте, чтобы чтобы уменьшить хлопоты по написанию каждого блока кода, чтобы извлечь единую функцию для всех. Пожалуйста, не стесняйтесь разветвлять этот пакет и добавлять в него некоторые интересные вещи, даже больше, указывать на некоторые изменения, чтобы сделать код более эффективным.

* Пример записной книжки доступен здесь, просмотрите его, если обнаружите какие-либо трудности.

Чтобы узнать обо мне больше, нажмите здесь, и если вы найдете что-то интересное, просто напишите мне письмо, и мы могли бы поболтать за чашкой ☕️. Для обновленного содержания этого блога вы можете посетить https://blogs.vatsal.ml

Поддержите этот контент 😃 😇

Я всегда верил в тот факт, что знаниями нужно делиться, не думая о каких-либо наградах. Чем больше вы делитесь, тем больше вы узнаете. Написание учебного пособия для блога требует много времени на предварительную исследовательскую работу, организацию контента и демонстрацию необходимых шагов. Учебники блога по глубокому обучению требуют наличия сервера на графическом процессоре для обучения моделей, и это довольно дорогое удовольствие, потому что все модели обучаются в одночасье. Я буду размещать весь контент бесплатно, как всегда, но если вам нравится контент и практический подход к кодированию в каждом блоге, вы можете поддержать меня на https://www.buymeacoffee.com/vatsalsaglani, . Спасибо, 🙏