Введение
С появлением нейронных сетей и улучшением глубокого обучения для компьютерного зрения мы перестали думать о функциях, извлекаемых с помощью этих черный ящик и как они влияют на точность модели. А благодаря недавним достижениям в трансферном обучении мы также пренебрегли процессом построения модели. Мы берем предварительно обученную модель и меняем последние слои, добавляя наши слои в зависимости от количества классификаций, необходимых для прогнозирования наших данных.
В конце концов, этот процесс добавления или вычитания слоев становится методом проб и ошибок, чтобы добиться хороших результатов. точность », и, вероятно, мы получим выдающуюся« точность »в зависимости от количества изменений, которые мы вносим в эту модель. Но только для того, чтобы получить хорошую точность (заметьте, что это важно), мы забыли суть извлечения различных типов функций из изображений - функций, связанных с текстурой и формой различных областей изображения.
Может возникнуть вопрос, зачем тратить время на извлечение функций вручную, а затем на обучение модели машинного обучения? Я разработал пакет 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
- Корреляция
- Однородность
- Энергия
- Контраст
Но что такое 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 свертки
- Сегментация
- 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, ☕. Спасибо, 🙏