OpenCV (23) --- Пирамида изображений

OpenCV
OpenCV (23) --- Пирамида изображений

Что такое имиджевая пирамида

Пирамида изображений — это коллекция изображений, состоящая из нескольких фрагментов изображения с разным разрешением. Этот набор изображений генерируется путем непрерывного понижения дискретизации одного изображения, и наименьшее изображение может иметь только один пиксель. Как показано на рисунке ниже, это набор изображений с постепенно уменьшающимся разрешением от низкого к высокому.图像金字塔

Обычно level0 является исходным изображением, а ширина и высота изображения на каждом верхнем слое уменьшаются до половины исходного изображения и так далее. Например, если ширина и высота исходного изображения level0 равны N, то ширина и высота level1 равны N/2, а полученное изображение равно (N/2)*(N/2). Простейшая пирамида получается удалением четных строк или четных столбцов изображения.

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

Что касается фильтрации, то обычно есть два варианта:

(1) Фильтр Гаусса: Исходное изображение фильтруется фильтром Гаусса для получения пирамиды Гаусса.

(2) Фильтр области: приближенное изображение исходного изображения получается с использованием метода усреднения области, и получается усредненная пирамида.

Пирамида Гаусса

В OpenCV это дает нам функцию cv2.pyrDown() для реализации понижающей дискретизации в пирамиде Гаусса. Его полное определение выглядит следующим образом:

def pyrDown(src, dst=None, dstsize=None, borderType=None): 

источник: исходное изображение

dstsize: целевой размер изображения

borderType: тип границы, поддерживает только BORDER_DEFAULT.

После введения принципа мы знаем, что значение по умолчанию для входного изображения равно Size((src.cols+1)/2,(src.rows+1)/2, а матрица фильтра Гаусса имеет вид следует:

高斯滤波器

Конечно, в пирамиде Гаусса есть понижение частоты дискретизации, и, естественно, в пирамиде Гаусса также есть повышение частоты дискретизации, В OpenCV функция cv2.pyrUp(), и ее полное определение выглядит следующим образом:

def pyrUp(src, dst=None, dstsize=None, borderType=None):

Что касается тех же параметров, то я не буду их здесь повторять, конечно, dstsize по умолчанию имеет значение Size (src.cols2,src.rows2).

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

Пирамида Лапласа

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

Математическое определение пирамиды Лапласа выглядит следующим образом:

公式

Среди них Li представляет i-й уровень пирамиды Лапласа, а Gi представляет i-й уровень пирамиды Гаусса.

настоящий бой

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

Конкретный код выглядит следующим образом:

import cv2

img = cv2.imread("23.jpg")
print(img.shape)
# 获取高斯金字塔
G1 = cv2.pyrDown(img)
# 获取拉普拉斯金字塔
L0 = img - cv2.pyrUp(G1)
# 恢复原图像
result1 = L0 + cv2.pyrUp(G1)

cv2.imshow("img", img)
cv2.imshow("G1", G1)
cv2.imshow("L1", L0)
cv2.imshow("result1", result1)
cv2.waitKey()
cv2.destroyAllWindows()

После запуска эффект следующий:

效果图