(1)图像锐化
图像锐化的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是图像受到了平均或积分运算,因此可以对其进行逆运算,从而使图像变得清晰。图像锐化和边缘提取技术可以消除图像中的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础。
(2)Roberts算子
Roberts 算子又称为交叉微分算法,它是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。
dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
img=cv2.imread('luo.png')
lenna_img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#灰度化处理图像
grayimage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#Roberts算子
kernelx=np.array([[-1,0],[0,1]],dtype=int)
kernely=np.array([[0,-1],[1,0]],dtype=int)
x=cv2.filter2D(grayimage,cv2.CV_16S,kernelx)
y=cv2.filter2D(grayimage,cv2.CV_16s,kernely)
#转uint8
absX=cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX,0.5,absY,0.5,0)
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图形
titles=['原始图像’,‘Roberts算子’]
images=[lenna_img,Roberts]
for i in range(2):
plt.subplot(1,2,i+1),plt.imshow(image[i],'gray')
plt.title(title[i])
plt.xticks([]),plt.yticks([])
plt.show()
(3)Prewitt算子
Prewitt 是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图像
img=cv2.imread('luo.png')
lenna_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#Prewitt算子
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(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
#转 uint8
absX = cv2.convertScaleAbs(x)
absY=cv2.convertScaleAbs(y)
Prewitt=cv2.addWeighted(absX,0.5,absY,0.5,0)
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图形
titles = ['原始图像', 'Prewitt 算子']
images = [lenna_img, Prewitt]
for i in range(2):
plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()