天天看点

OpenCV-Python 笔记(四)Canny边缘检测、图像金字塔

Canny边缘检测

因为边缘检测,容易受到噪声的干扰,所以第一步就是降噪。使用 5 X 5 的高斯滤波器进行过滤。

非极大值抑制:使用Sobel滤波器,只有在检测到边缘的时候,才会保留边缘像素,否则,就全部置零。(深度学习CNN基础部分有关内容)

磁滞阈值:该阶段确定哪些边缘全部是真正的边缘,哪些不是。为此,我们需要两个阈值minVal 和maxVal。强度梯度大于maxVal 的任何边缘必定是边缘,而小于minVal 的那些边缘必定是非边缘,因此将其丢弃。介于这两个阈值之间的对象根据其连通性被分类为边缘或非边缘。如果将它们连接到“边缘”像素,则将它们视为边缘的一部分。否则,它们也将被丢弃。

OpenCV-Python 笔记(四)Canny边缘检测、图像金字塔

当我们设置为边缘是长像素特征边缘时,小像素边缘就会被丢弃。

img=cv.imread("text.jpg")
#Canny边缘检测(输入图片,minval,maxval)
edges=cv.Canny(img,100,200)

plt.subplot(121),plt.imshow(img,cmap="gray"),plt.title("Original")
plt.subplot(122),plt.imshow(edges,cmap="gray"),plt.title("Edges")
plt.show()
           

注意观察,不连续的小像素边缘,被去掉。

OpenCV-Python 笔记(四)Canny边缘检测、图像金字塔

图像金字塔

不同分辨率组成的序列,精度从高到低,从上到下,像金字塔。

高斯金字塔

高斯金字塔中的较高级别(低分辨率)是通过删除较低级别(较高分辨率)图像中的连续行和列而形成的。然后,较高级别的每个像素由基础级别的5个像素的贡献与高斯权重形成。通过这样做,M×N图像变成M/2 × N/2图像。因此面积减少到原始面积的四分之一。它称为Octave。当我们在金字塔中越靠上时(即分辨率下降),这种模式就会继续。同样,在扩展时,每个级别的面积变为4倍。

img=cv.imread("gh.jpg")
#相对于原图低一级
lower_reso=cv.pyrDown(img)
#相对于原图高一级
higher_reso=cv.pyrUp(img)
#从低一级的图片,通过添加像素形成
higher_reso2=cv.pyrUp(higher_reso)

plt.subplot(221),plt.imshow(img),plt.title("Original")
plt.subplot(222),plt.imshow(lower_reso),plt.title("lower_reso")
plt.subplot(223),plt.imshow(higher_reso),plt.title("higher_reso")
plt.subplot(224),plt.imshow(higher_reso2),plt.title("higher_reso2")
plt.show()
           
OpenCV-Python 笔记(四)Canny边缘检测、图像金字塔

从细节可以看出,由原始图片缩小以后,再进行拓展,结果与原图片相差非常大。因为在缩小图片时,有信息丢失,信息一旦丢失,就无法找回,只能通过高斯概率分布进行插值,插入缺失的像素。所以图片的画面看起来,就没有那么锐利,比较柔和。

OpenCV-Python 笔记(四)Canny边缘检测、图像金字塔

拉普拉斯金字塔

拉普拉斯金字塔由高斯金字塔形成。没有专用功能。拉普拉斯金字塔图像仅像边缘图像。它的大多数元素为零。它们用于图像压缩。拉普拉斯金字塔的层由高斯金字塔的层与高斯金字塔的高层的扩展版本之间的差形成。

继续阅读