当前位置:网站首页>【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
2022-07-04 12:50:00 【Nirvana;】
【Matlab】conv、filter、conv2、filter2和imfilter函数总结
1. conv函数
作用:
1.计算一维向量卷积
u = [1 1 1];
v = [1 1 0 0 0 1 1];
w = conv(u,v)
2.通过卷积计算多项式乘法
u = [1 0 1];
v = [2 7];
w = conv(u,v)
2. filter函数
作用:一维数字滤波器
y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数 对输入数据 x 进行滤波。
// 移动平均滤波器是用于对含噪数据进行平滑处理的常用方法。
t = linspace(-pi,pi,100);
rng default %initialize random number generator
x = sin(t) + 0.25*rand(size(t));
windowSize = 5;
b = (1/windowSize)*ones(1,windowSize);
a = 1;
y = filter(b,a,x);
plot(t,x)
hold on
plot(t,y)
legend('Input Data','Filtered Data')
3. conv2函数
作用:二维卷积
A = rand(3);
B = rand(4);
C = conv2(A,B)
conv2函数
1、用法
C=conv2(A,B,shape); %卷积滤波
A:输入图像,B:卷积核
假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则
当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)
shape=same时,返回与A同样大小的卷积中心部分
shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
2、实现步骤
假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
b、关于卷积核的中心,旋转卷积核180度。
c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
d、将旋转后的卷积核乘以对应的矩阵元素再求和。
4. filter2函数
1、用法
B = filter2(h,A,shape) ; %相关(correlation)滤波
- A:输入图像,h:相关核
- 假设输入图像A大小为ma x na,相关核h大小为mb x nb,则
当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1) - shape=same时,返回与A同样大小的卷积中心部分
- shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)
2、实现步骤
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下:
- a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。
- b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。
- c、将相关核乘以对应的矩阵元素再求和
注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同。
5. imfilter函数
1、用法
B=imfilter(A,H,option1,option2,option3);
A:输入图像,H:滤波核
- option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular
- option2:输出图像大小选项,可选的有same(默认),full
- option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波
2、优势:
Padding Options 填充选项
1)默认补0
2)symmetric 对称:数组边界之外的输入数组值是通过沿数组边界对数组进行镜面反射得到
3)replicate 复制:数组边界之外的输入数组值假定为等于最近的数组边界值
.
4)circular 循环:数组边界之外的输入数组值是通过隐式假设输入数组具有周期性来计算的。
Output Size 输出大小
same:输出数组与输入数组大小相同。这是未指定输出大小选项时的默认行为。
full:输出数组是完全滤波后的结果,因此比输入数组大。
6. fspecial函数
作用:构造卷积核,可以与filter2、conv2和imfilter配合使用
h = fspecial(type)
h = fspecial('average',hsize)
h = fspecial('disk',radius)
h = fspecial('gaussian',hsize,sigma)
h = fspecial('laplacian',alpha)
h = fspecial('log',hsize,sigma)
h = fspecial('motion',len,theta)
h = fspecial('prewitt')
h = fspecial('sobel')
7. 总结
filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。建议使用~
8. 代码演示
MATLAB代码:
clear;
close all;
clc;
%% fspecial函数
value = 5;
h = fspecial('gaussian',[5 5],value);
srcImage = imread('lena.jpg');
srcImage = rgb2gray(srcImage);
srcImage_double = double(srcImage);
%% conv2函数 默认:'full',只能补零
image_conv2 = conv2(srcImage_double,h);
%% filter2函数 默认:'same',只能补零
image_filter2 = filter2(h,srcImage_double);
%% imfilter函数 默认:'same'
image_imfilter = imfilter(srcImage,h,'replicate');
%% 显示图像
figure(1);
subplot(221);imshow(srcImage,[]); title('原图');
subplot(222);imshow(image_conv2,[]); title('conv2');
subplot(223);imshow(image_filter2,[]); title('filter2');
subplot(224);imshow(image_imfilter,[]); title('imfilter');
效果图:
边栏推荐
猜你喜欢
One of the solutions for unity not recognizing riders
面试官:Redis中哈希数据类型的内部实现方式是什么?
Automatic filling of database public fields
Huahao Zhongtian sprint Technology Innovation Board: perte annuelle de 280 millions de RMB, projet de collecte de fonds de 1,5 milliard de Beida Pharmaceutical est actionnaire
使用默认路由作为指向Internet的路由
Understanding and difference between viewbinding and databinding
MySQL8版本免安装步骤教程
吃透Chisel语言.05.Chisel基础(二)——组合电路与运算符
Go 语言入门很简单:Go 实现凯撒密码
基于YOLOv1的口罩佩戴检测
随机推荐
Byte interview algorithm question
392. 判断子序列
CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...
华昊中天冲刺科创板:年亏2.8亿拟募资15亿 贝达药业是股东
吃透Chisel语言.10.Chisel项目构建、运行和测试(二)——Chisel中生成Verilog代码&Chisel开发流程
Five "potential errors" in embedded programming
BLOB,TEXT GEOMETRY or JSON column 'xxx' can't have a default value query 问题
find命令报错: paths must precede expression(转)
Dgraph: large scale dynamic graph dataset
学习项目是自己找的,成长机会是自己创造的
安装trinity、解决报错
C language dormitory management query software
英视睿达冲刺科创板:年营收4.5亿 拟募资9.79亿
2022年起重机械指挥考试模拟100题模拟考试平台操作
自主工业软件的创新与发展
Understanding and difference between viewbinding and databinding
Scripy framework learning
C语言程序设计选题参考
2022g3 boiler water treatment examination question simulation examination question bank and simulation examination
逆向调试入门-PE结构-资源表07/07