CV预备(一): conv2, filter2, imfilter的差别

简介: 目录前言filter2实操conv2imfilter最后前言最近开始准备深入学习一下计算机视觉(CV)方面的内容, 这里会更新几期基础知识, 主要是Matlab和Python方面的.

目录

  • 前言
  • filter2
  • 实操
  • conv2
  • imfilter
  • 最后

前言

最近开始准备深入学习一下计算机视觉(CV)方面的内容, 这里会更新几期基础知识, 主要是Matlab和Python方面的. 这次的就是三个Matlab的函数filter2, conv2, imfilter.


filter2

filter2相关滤波函数, 假设输入图像I大小为M1 X N1,相关核f大小为M2 X N2.

J = filter2 (f, I, shape)
  • f: 相关核, 即滤波掩模
  • I: 输入图像
  • J: 输出图像
  • shape: 可选, 其参数如下:
参数 描述
same(默认值) 返回与I同样尺寸滤波后的图像, M1 X N1
full 返回全部二维滤波结果, (M1 + M2 - 1) X (N1 + N2 - 1)
valid 不考虑边界补零, 即只要有边界补出的零参与运算的都舍去, (M1 - M2 + 1) X (N1 - N2 + 1)

实操

这里实操一下, 首先是'same'

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 1 1];

J = filter2(f, I, 'same')

输出是:

>> iFilter

J =

    40    60    60    40
    60    90    90    60
    40    60    60    40

对输入图像补零, 第一行之前和最后一行之后都补M2 -1行,第一列之前和最后一列之后都补N2 - 1列, (注意filter2和conv2不支持其他的边界补充选项, 函数内部对输入总是补零.

也就是补成如下:

0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 

相关

所以第一个40就是相关核与红框内部分对应相乘然后结果求和所得, 也就是(0*1 + 0*1 + 0*1 + 0*1 + 10 *1 + 10 *1 + 0*1 + 10 *1 + 10 *1), 之后的就滑动相关核, 将相关核的中心位于图像矩阵的每一个元素.

'full'的话, 就是将边缘补全零的计算结果也一并输出, 所以尺寸是(M1 + M2 - 1) X (N1 + N2 - 1)

J =

    10    20    30    30    20    10
    20    40    60    60    40    20
    30    60    90    90    60    30
    20    40    60    60    40    20
    10    20    30    30    20    10

卷积

最后'valid', 就是边界补出的零参与运算的都舍去.

J =

    90    90

conv2

和filter2最大的不同就是计算之前, 把卷积核旋转180°. 所以, 如果卷积核旋转180°和原来一样, 那么conv2和filter2的计算结果都是一样的. 所以我这里就修改一下算子. 可以很明显看到filter2的结果旋转180°就是conv2的结果.

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 2 1];

J = filter2(f, I, 'same')
J = conv2(I, f, 'same')
J =

    50    70    70    50
    70   100   100    70
    40    60    60    40


J =

    40    60    60    40
    70   100   100    70
    50    70    70    50

imfilter

J = imfilter(I, f, filtering_mode, boundary_options, size_options)
参数列表 选项 描述
filtering_mode ‘corr’ 相关(默认)
‘conv’ 卷积
boundary_options X 输入图像的边界通过用值X值来填充扩展其默认值为0
‘replicate’ 复制外边界值
‘symmetric’ 镜像反射
‘circular’ 图像大小通过将图像看成是一个二维周期函数的一个周期来扩展
size_options ‘full’ 输出图像的大小与被扩展图像的大小相同
‘same’ 输出图像的大小与输入原始输入图像一样(默认)

这样的话, J = imfilter(I, f, 'corr', 0, 'same')J = filter2(f, I, 'same')是等效的.


最后

喜欢记得点赞或者关注哦, 有意见或者建议评论区见~


目录
相关文章
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
torch.nn.Linear的使用方法
torch.nn.Linear的使用方法
149 0
|
计算机视觉 容器
OpenCV-通道分离cv::split
OpenCV-通道分离cv::split
|
6月前
|
机器学习/深度学习 编解码 边缘计算
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
本文介绍了如何在YOLOv5中用ShuffleNetV2替换卷积以减少计算量。ShuffleNetV2是一个轻量级网络,采用深度可分离卷积、通道重组和多尺度特征融合技术。文中提供了一个逐步教程,包括ShuffleNetV2模块的代码实现和在YOLOv5配置文件中的添加方法。此外,还分享了完整的代码链接和GFLOPs的比较,显示了GFLOPs的显著减少。该教程适合初学者实践,以提升深度学习目标检测技能。
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
|
2月前
|
机器学习/深度学习 计算机视觉 Python
cv2.dnn.
【9月更文挑战第13天】
40 12
|
3月前
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
149 3
|
4月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-卷积Conv】 SPD-Conv空间深度转换卷积,处理低分辨率图像和小对象问题
YOLO目标检测专栏探讨了CNN在低分辨率和小目标检测中的局限性,提出SPD-Conv新架构,替代步长卷积和池化层,通过空间到深度层和非步长卷积保持细粒度信息。创新点包括消除信息损失、通用设计和性能提升。YOLOv5和ResNet应用SPD-Conv后,在困难任务上表现优越。详情见YOLO有效改进系列及项目实战目录。
|
4月前
|
计算机视觉
【YOLOv10改进-卷积Conv】动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务
YOLOv10专栏介绍了一种用于精确分割管状结构的新方法DSCNet,它结合了动态蛇形卷积、多视角融合和拓扑连续性约束损失。DSConv创新地聚焦细长局部结构,增强管状特征感知,而多视角融合和TCLoss则改善了全局形态理解和分割连续性。在2D和3D数据集上的实验显示,DSCNet在血管和道路等分割任务上超越了传统方法。DySnakeConv模块整合到YOLOv10中,提升了目标检测的准确性。[链接指向详细文章](https://blog.csdn.net/shangyanaf/article/details/140007047)
|
5月前
|
存储 机器学习/深度学习 计算机视觉
【YOLOv8改进-卷积Conv】 OREPA(Online Convolutional Re-parameterization):在线卷积重参数化
**OREPA**是在线卷积重参数化的缩写,它提出了一种两阶段流程来减少深度模型训练的开销。该方法通过线性缩放层优化复杂训练块,并在训练完成后将其压缩为单个卷积层,降低内存使用和提高训练速度。与现有技术相比,OREPA能减少约70%的训练内存开销,提升2倍训练速度,并在ImageNet上提高最多0.6%的准确性。此外,它还在目标检测和语义分割任务中表现出色。论文和代码可在提供的链接中找到。
|
5月前
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | 卷积模块 | 用坐标卷积CoordConv替换Conv
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡
|
PyTorch 算法框架/工具
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法
499 2
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法