Подмодуль SciPy ndimage предназначен для обработки изображений. Здесь ndimage означает n-мерное изображение.
Вот некоторые из наиболее распространенных задач обработки изображений: & miuns;
- Ввод / вывод, отображение изображений
- Основные манипуляции — кадрирование, переворачивание, вращение и т. Д.
- Фильтрация изображений — устранение шумов, резкость и т. Д.
- Сегментация изображения — маркировка пикселей, соответствующих различным объектам
- классификация
- Извлечение функций
- Постановка на учет
Давайте обсудим, как некоторые из них могут быть достигнуты с помощью SciPy.
Открытие и запись в файлы изображений
Пакет misc в SciPy поставляется с некоторыми изображениями. Мы используем эти изображения для изучения манипуляций с изображениями. Давайте рассмотрим следующий пример.
from scipy import misc f = misc.face() misc.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
Любые изображения в необработанном формате представляют собой комбинацию цветов, представленных числами в матричном формате. Машина понимает и манипулирует изображениями только на основе этих чисел. RGB — это популярный способ представления.
Давайте посмотрим статистическую информацию на изображении выше.
from scipy import misc face = misc.face(gray = False) print face.mean(), face.max(), face.min()
Вышеуказанная программа сгенерирует следующий вывод.
110.16274388631184, 255, 0
Теперь мы знаем, что изображение состоит из цифр, поэтому любое изменение значения числа приводит к изменению исходного изображения. Давайте выполним некоторые геометрические преобразования на изображении. Основная геометрическая операция — обрезка
from scipy import misc face = misc.face(gray = True) lx, ly = face.shape # Cropping crop_face = face[lx / 4: - lx / 4, ly / 4: - ly / 4] import matplotlib.pyplot as plt plt.imshow(crop_face) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
Мы также можем выполнить некоторые основные операции, например перевернуть изображение вверх ногами, как описано ниже.
# up <-> down flip from scipy import misc face = misc.face() flip_ud_face = np.flipud(face) import matplotlib.pyplot as plt plt.imshow(flip_ud_face) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
Кроме того, у нас есть функция rotate () , которая поворачивает изображение на заданный угол.
# rotation from scipy import misc,ndimage face = misc.face() rotate_face = ndimage.rotate(face, 45) import matplotlib.pyplot as plt plt.imshow(rotate_face) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
фильтры
Давайте обсудим, как фильтры помогают в обработке изображений.
Что такое фильтрация при обработке изображений?
Фильтрация — это метод модификации или улучшения изображения. Например, вы можете отфильтровать изображение, чтобы подчеркнуть определенные функции или удалить другие функции. Операции обработки изображений, реализованные с фильтрацией, включают сглаживание, повышение резкости и улучшение контуров.
Фильтрация — это операция окрестности, в которой значение любого данного пикселя в выходном изображении определяется путем применения некоторого алгоритма к значениям пикселей в окрестности соответствующего входного пикселя. Давайте теперь выполним несколько операций, используя SciPy ndimage.
нечеткость
Размытие широко используется для уменьшения шума на изображении. Мы можем выполнить операцию фильтра и увидеть изменения на изображении. Давайте рассмотрим следующий пример.
from scipy import misc face = misc.face() blurred_face = ndimage.gaussian_filter(face, sigma=3) import matplotlib.pyplot as plt plt.imshow(blurred_face) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
Значение сигмы указывает уровень размытия по пятибалльной шкале. Мы можем увидеть изменение качества изображения, настроив значение сигмы. Для получения более подробной информации о размытии, нажмите на → Учебник по DIP (цифровая обработка изображений).
Обнаружение края
Давайте обсудим, как обнаружение краев помогает в обработке изображений.
Что такое Edge Detection?
Обнаружение краев — это метод обработки изображений для определения границ объектов в изображениях. Это работает, обнаруживая разрывы в яркости. Обнаружение края используется для сегментации изображения и извлечения данных в таких областях, как обработка изображений, компьютерное зрение и машинное зрение.
Наиболее часто используемые алгоритмы обнаружения краев включают
- Собела
- благоразумный
- Прюитт
- Робертс
- Методы нечеткой логики
Давайте рассмотрим следующий пример.
import scipy.ndimage as nd import numpy as np im = np.zeros((256, 256)) im[64:-64, 64:-64] = 1 im[90:-90,90:-90] = 2 im = ndimage.gaussian_filter(im, 8) import matplotlib.pyplot as plt plt.imshow(im) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.
Изображение выглядит как квадратный блок цветов. Теперь мы обнаружим края этих цветных блоков. Здесь ndimage предоставляет функцию Sobel для выполнения этой операции. Принимая во внимание, что NumPy предоставляет функцию Hypot для объединения двух результирующих матриц в одну.
Давайте рассмотрим следующий пример.
import scipy.ndimage as nd import matplotlib.pyplot as plt im = np.zeros((256, 256)) im[64:-64, 64:-64] = 1 im[90:-90,90:-90] = 2 im = ndimage.gaussian_filter(im, 8) sx = ndimage.sobel(im, axis = 0, mode = 'constant') sy = ndimage.sobel(im, axis = 1, mode = 'constant') sob = np.hypot(sx, sy) plt.imshow(sob) plt.show()
Вышеуказанная программа сгенерирует следующий вывод.