一.如何在图像中检测(垂直)边缘(计算过程):
左图:灰度图像6*6矩阵,(彩色图像为6*6*3,灰度图像没有RGB三通道)
中间图:为检测图形垂直边缘,构建3*3矩阵,称为过滤器(或核)
右图:用3*3过滤器对6*6矩阵进行卷积运算,输出结果是右图的4*4矩阵,可以理解为另一张图片。
卷积的计算过程:4*4矩阵的下标为(1,1)的值如下图所示:
将3*3矩阵与6*6矩阵相应元素相乘,再相加即可。3*1+1*1+2*1+0*0+5*0+7*0+1*-1+8*-1+2*-1=-5
4*4矩阵的下标为(1,2)的值即将3*3滤波器矩阵向右移:
其他值同样对3*3滤波器矩阵进行移动 :
如果用python实现这个过程用函数:conv_forward()
二.为什么上述过程可以做垂直边缘检测?
eg1垂直边缘检测输出结果矩阵的含义:
左图:图像矩阵,【白 灰】,中间有一条垂直的(由浅到深色)过渡线
中间图:滤波器矩阵 ,可视化成:【白 灰 黑】
右图:依据上述方法卷积所得结果。如果当成图像:【灰 白 灰】(矩阵数值越大,亮度越高)
卷积所得矩阵中间是高亮区,对应所检测图像(左图)中间有垂直边缘,但维数与原图像边缘不同,(检测到的结果太粗了)原因是图片维数(6*6)太小了。
eg2垂直边缘检测滤波器表示明暗变化:
图片矩阵左右翻转,滤波矩阵不便,得到的新图片矩阵中间值变成负值(原矩阵值得相反数),上图正值表示从亮到暗过渡,下图负值表示由暗到亮过渡。如果不想要这种正负提供的信息,可以将卷积所得到的矩阵取绝对值。
eg3水平边缘检测滤波器:
在相应边缘有明暗变化 1 1 1 -1 -1 -1
eg4略复杂输入图片水平检测的例子:
卷积所得输出矩阵数值与输入矩阵的绿、黄、紫(3*3)矩阵 块相互对应,输出矩阵的30,-30分别表示由亮到暗、由暗到亮的变化;10,-10是中间值(对应3*3矩阵块没有明显边缘变化)。但是当输入图片特别大的时候,不会出现10这么大的中间值。
eg5不同的边缘检测滤波器矩阵:
sobel filter :增加中间行权重,也就是图像中间的像素点,增加结果鲁棒性
将垂直边缘滤波器旋转90,得到水平边缘滤波器
eg6 复杂图像的边缘检测:
复杂图像的滤波器不再是简单的垂直或者水平边缘检测,可以将滤波器矩阵设置为9个参数,利用深度学习的反向传播算法得到滤波器的参数。可以检测任意角度的边缘。