📜  空间过滤及其类型(1)

📅  最后修改于: 2023-12-03 15:41:06.180000             🧑  作者: Mango

空间过滤及其类型

在计算机视觉中,空间过滤是一种基本的图像处理操作,通过对图像中像素的操作来实现对图像特征的提取或者滤波。在图像处理领域有非常广泛的应用,在模式识别、计算机视觉、图像重建等领域有着重要的作用。

空间过滤的基本操作

空间过滤是一种将像素值相邻的像素值进行操作的一组处理过程。一般将空间滤波处理分为图像平滑和图像锐化两大类。

图像平滑

图像平滑是利用一些滤波器对图像中的噪点和干扰信号进行平滑处理。常用的平滑滤波器有中值滤波器、均值滤波器、高斯滤波器等。

中值滤波器

中值滤波器是一种非线性滤波器,它将像素点周围的像素点的灰度值排序后取中间值作为像素点的灰度值。中值滤波器适用于去除椒盐噪声效果比较好。

import cv2

img = cv2.imread('lena.png')
blur = cv2.medianBlur(img,5)

cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

均值滤波器

均值滤波器是一种线性滤波器,它将像素点周围的像素点的灰度值求平均数作为像素点的灰度值,具有简单、易于实现和计算的优点。

import cv2

img = cv2.imread('lena.png')
blur = cv2.blur(img,(5,5))

cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波器

高斯滤波器是一种线性滤波器,它将像素点周围的像素点的灰度值加权平均数作为像素点的灰度值,其中像素点与中心点的距离越大,权重越小,具有防止边缘信息丢失的优点。

import cv2

img = cv2.imread('lena.png')
blur = cv2.GaussianBlur(img,(5,5),0)

cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像锐化

图像锐化是一种对图像进行增强的操作,它可以增强图像的细节和边缘,并且可以使图像更加清晰。常用的锐化滤波器有拉普拉斯算子、Sobel算子、Prewitt算子等。

拉普拉斯算子

拉普拉斯算子是一种非常常用的锐化滤波器,它通过对像素点周围的像素点进行加权求和来计算像素点的灰度值,具有较好的鲁棒性,但易产生噪点。

import cv2

img = cv2.imread('lena.png')
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpen = cv2.filter2D(img, -1, kernel=kernel)

cv2.imshow('sharpen',sharpen)
cv2.waitKey(0)
cv2.destroyAllWindows()

Sobel算子

Sobel算子是一种常用的边缘检测算法,它通过对像素点周围的像素点进行加权求和来计算像素点的灰度值,具有较好的边缘检测效果。

import cv2
import numpy as np

img = cv2.imread('lena.png',0)
x = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
y = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobel = cv2.convertScaleAbs(cv2.addWeighted(x,0.5,y,0.5,0))

cv2.imshow('sobel',sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

Prewitt算子

Prewitt算子是一种基于梯度的算子,它通过对像素点周围的像素点进行加权求和来计算像素点的灰度值,具有较好的边缘检测效果。

import cv2
import numpy as np

img = cv2.imread('lena.png',0)
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
x = cv2.filter2D(img, cv2.CV_16S, kernelx)
y = cv2.filter2D(img, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
prewitt = cv2.addWeighted(absX,0.5,absY,0.5,0)

cv2.imshow('prewitt',prewitt)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结

空间过滤是一种对像素点周围像素点进行操作的图像处理方法,主要包括图像平滑和图像锐化两大类。在图像处理领域有着非常广泛的应用,可以用于图像去噪、边缘检测等场景。