1.图像的一阶导数会产生粗边缘,二阶导数会产生细的多的边缘
二阶导数对细线、孤立点、噪声有较强的响应
2.二阶导数的符号用来确定一个边缘是从亮到暗(负二阶导数)过渡,还是从暗到亮(正二阶导数)过渡
3.二阶导数在灰度斜坡或者灰度台阶过渡处会产生双边缘响应
4.用于计算每个像素位置处的一阶导数和二阶导数的可选择方法是使用空间滤波器
5.对于一个导数模板,系数之和为零,表明在恒定灰度区域模板的响应将是0
6.在对图像中的线检测时,二阶导数的双线效应必须做一个适当的处理(阈值处理)
7.检测特定方向上的线:
代码如下:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread("timg.jpg")
filter1 = np.array([[-1, -1, -1],
[2, 2, 2],
[-1, -1, -1]])
img1 = cv2.filter2D(img, -1, filter1)
filter2 = np.array([[-1, 2, -1],
[-1, 2, -1],
[-1, 2, -1]])
img2 = cv2.filter2D(img, -1, filter2)
filter3 = np.array([[2, -1, -1],
[-1, 2, -1],
[-1, -1, 2]])
img3 = cv2.filter2D(img, -1, filter3)
filter4 = np.array([[-1, -1, 2],
[-1, 2, -1],
[2, -1, -1]])
img4 = cv2.filter2D(img, -1, filter4)
plt.subplot(221), plt.imshow(img1, cmap="gray")
plt.title("horizontal"), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(img2, cmap="gray")
plt.title("vertical"), plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(img3, cmap="gray")
plt.title("positive 45"), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img4, cmap="gray")
plt.title("negative 45"), plt.xticks([]), plt.yticks([])
plt.show()
响应的线检测模板:
-1 -1 -1 2 -1 -1 -1 2 -1 -1 -1 2
2 2 2 -1 2 -1 -1 2 -1 -1 2 -1
-1 -1 -1 -1 -1 2 -1 2 -1 2 -1 -1
水平 +45° 垂直 -45°
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
8.实际的数字图像中都会存在模糊并且带有噪声的边缘,模糊的程度主要取决于聚焦机理(比如光学成像中的镜头)中的限制,而噪声水平取决于成像系统的电子元件
9.一般边缘检测结束之后,得到的仅仅是一些像素集合。实际上由于噪声、不均匀照明灯引起的边缘间断并不能完整描述边缘特性。所以一般在边缘检测之后紧跟着边缘连接算法