9.1 Roberts算子
Roberts算子又称为交叉微分算法,是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。
常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。
其缺点是对边缘的定位不太准确,提取的边缘线条较粗。
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv.imread('bridge.png', cv.COLOR_BGR2GRAY)
# cv.COLOR_BGR2GRAY将BGR图像转换为灰度图像
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
# 灰度化处理图像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# Roberts算子的两个卷积核kernelx和kernely,分别用于检测水平和垂直方向的边缘。
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)
# 使用cv.filter2D函数对灰度图像进行卷积操作,得到水平和垂直方向的梯度图像。
x = cv.filter2D(grayImage, cv.CV_16S, kernelx)
y = cv.filter2D(grayImage, cv.CV_16S, kernely)
# 将卷积后的图像数据转换为绝对值,并转换为uint8类型,以便于显示。
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
# 将两个方向的梯度图像融合,得到最终的Roberts算子边缘检测图像。
Roberts