Рубрики
Без рубрики

Python Opencv – фильтрация изображений с использованием свертки

Автор оригинала: Python Examples.

Python opencv – cv2.filter2d ()

Фильтрация изображений – это техника для фильтрации изображения, такого как одномерный аудиосигнал, но в 2D.

В этом руководстве мы узнаем, как фильтровать изображение с использованием 2D-свертки с функцией CV2.Filter2D (). Света происходит между исходным изображением и ядром.

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

Фильтр с низким уровнем прохода больше похоже на усреднение процесса. Но с весами и охватом усреднения в зависимости от формы и содержимого ядра.

Высокий проходный фильтр похож на краевой детектор. Это дает высокое, когда существует значительное изменение в соседних значениях пикселей.

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

Пример 1: OpenCV Low Pass Filter с 2D-сверткой

В этом примере мы выполним после последовательности шагов.

  • Прочитайте изображение. Это наш источник.
  • Определите фильтр с низким уровнем передачи. В этом примере наш фильтр Low Pass представляет собой массив 5 × 5 со всеми и усредненными.
  • Применить свертка между исходным изображением и ядром с использованием функции CV2.Filter2d ().

Python Program

import numpy as np
import cv2

#read image
img_src = cv2.imread('sample.jpg')

#prepare the 5x5 shaped filter
kernel = np.array([[1, 1, 1, 1, 1], 
                   [1, 1, 1, 1, 1], 
                   [1, 1, 1, 1, 1], 
                   [1, 1, 1, 1, 1], 
                   [1, 1, 1, 1, 1]])
kernel = kernel/sum(kernel)

#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)

#save result image
cv2.imwrite('result.jpg',img_rst)

Выход

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

Пример 2: OpenCV High Pass Filter с 2D-сверткой

В этом примере для фильтра высокого прохода мы выполним после следующей последовательности шагов.

  • Прочитайте изображение. Это наш источник.
  • Определите фильтр высокого прохода. В этом примере наш фильтр высокого прохода представляет собой массив 3 × 3, который является Ядро Переменная в следующей программе.
  • Применить свертка между исходным изображением и ядром с использованием функции CV2.Filter2d ().

Python Program

import numpy as np
import cv2

#read image
img_src = cv2.imread('sample.jpg')

#edge detection filter
kernel = np.array([[0.0, -1.0, 0.0], 
                   [-1.0, 4.0, -1.0],
                   [0.0, -1.0, 0.0]])

kernel = kernel/(np.sum(kernel) if np.sum(kernel)!=0 else 1)

#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)

#save result image
cv2.imwrite('result.jpg',img_rst)

Выход

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

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

kernel = np.array([[0.0, -1.0, 0.0], 
                   [-1.0, 5.0, -1.0],
                   [0.0, -1.0, 0.0]])

Пример 3 – пользовательское ядро

В этом примере мы определим пользовательское ядро, где он должен определять только горизонтальные линии, если таковые имеются.

Python Program

import numpy as np
import cv2

#read image
img_src = cv2.imread('sample.jpg')

#kernal sensitive to horizontal lines
kernel = np.array([[-1.0, -1.0], 
                   [2.0, 2.0],
                   [-1.0, -1.0]])

kernel = kernel/(np.sum(kernel) if np.sum(kernel)!=0 else 1)

#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)

#save result image
cv2.imwrite('result.jpg',img_rst)

Выход

Вы можете написать свое собственное настраиваемое ядро и обнаруживать функцию из изображения.

Резюме

В этом руководстве примеров Python мы узнали, как фильтровать изображение или выполнить 2D-свертка с использованием функции CV2.Filter2d ().