代码:experiments/CV/1 at main · ShutongLinn/experiments (github.com)
Sobel算子滤波
一、x、y方向上不同的卷积核
二、构建卷积函数convonlution(img, kernel)
1存储在my_convolveFunction.py文件
2功能:实现卷积操作
3输入:图片img,卷积核kernel
4输出:卷积后的图片output
1、实现翻转
Sobel算子卷积核对称,翻转后不变
2、进行边缘填充(采用复制填充)
Kernel_h为卷积核的高 |
3、在图像矩阵中,依次移动卷积核,取与卷积核相同大小的box与卷积核进行点乘并求和
三、Sobel滤波函数Sobel_filter(img)
1存储在my_sobelFunction.py文件中
2功能:自定义sobel滤波
3输入:图片img
4输出:output = [x方向梯度, y方向梯度, 梯度幅度, 梯度角度]
1、求x、y方向上的梯度
2、图像梯度幅度
3、图像角
四、输出结果
Canny算子滤波
1存储在my_cannyFunction.py文件
2功能:自定义函数实现高斯滤波
3输入:图片img
4输出:高斯滤波结果矩阵output
- 构建高斯滤波核
构建3*3的高斯滤波核 |
- 利用卷积操作进行高斯滤波
1存储在my_cannyFunction.py文件
2功能:自定义函数实现高斯滤波
3输入:图片img
4输出: output = [梯度幅度, 梯度角度]
将角度转变为0度、45度、90度、135度四个方向,我们认为引起图片变化主要在这四个方向上
1存储在my_cannyFunction.py文件
2功能:自定义函数实现非极大值抑制
3输入:图片梯度grad和梯度角度theta
4输出: 新的梯度grad_new
我们认为图像在0度、45度、90度、135度中的某一个方向上变化,如果(x,y)梯度角度是0度,则比较此处的左右两边的像素值大小,如果此处值大于两边的值,则认为这里的图像变化主要由(x, y)引起的,(x, y)点像素值保留。其他方向也同理
1存储在my_cannyFunction.py文件
2功能:自定义函数实现非极大值抑制
3输入:图片矩阵img,阈值范围high和low
4输出: 处理后的图像矩阵
1存储在my_cannyFunction.py文件
2功能:自定义函数实现边缘弱化和孤立点检测
3输入:图片矩阵img
4输出: 处理后的图像矩阵
(x, y)点附近的八连通图内,如果有四个或者四个以上的强边缘(大于255),则认为(x, y)也为强边缘
(x, y)点为强边缘,其附近的八连通图中,只有一个或者没有强边缘,则认为(x, y)为孤立点,(x,y)像素值为0
- Canny滤波函数Canny_fliter(im)
1存储在my_cannyFunction.py文件
2功能:自定义函数实现Canny滤波
3输入:图片矩阵im
4输出: 显示处理后的图像