matlab中imfilter的用法
来源:https://blog.csdn.net/qq_15971883/article/details/78334380
转载自:http://blog.csdn.net/u013066730/article/details/56554332
以及http://blog.csdn.net/u010740725/article/details/51557202
功能:对任意类型数组或多维图像进行滤波。
用法:B = imfilter(A,H)
B = imfilter(A,H,option1,option2,...)
或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。具体参数选项见下表:
| 选项 | 描述 | |
| filtering_mode | ‘corr’ | 通过使用相关来完成,该值为默认。 |
| ‘conv’ | 通过使用卷积来完成 | |
| boundary_options | ‘X’ | 输入图像的边界通过用值X(无引号)来填充扩展 其默认值为0 |
| ‘replicate’ | 图像大小通过复制外边界的值来扩展 | |
| ‘symmetric’ | 图像大小通过镜像反射其边界来扩展 | |
| ‘circular’ | 图像大小通过将图像看成是一个二维周期函数的一个周期来扩展 | |
| size_options | ‘full’ | 输出图像的大小与被扩展图像的大小相同 |
| ‘same’ | 输出图像的大小与输入图像的大小相同。这可通过将滤波掩模的中心点的偏移限制到原图像中包含的点来实现,该值为默认值。 |
举例:
例1:
originalRGB = imread('peppers.png');
imshow(originalRGB)
h = fspecial('motion', 50, 45);%创建一个滤波器
filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)
例2:
%生成一个8x8的均值滤波器
originalRGB = imread('peppers.png');
imshow(originalRGB)
w = fspecial('average',8);
filteredRGB = imfilter(originalRGB, w);
figure, imshow(filteredRGB)
例3:
单色图像的平滑:
单色图像(如灰度图像)平滑的过程:定义一个系数为1的模板,用这个空间模板的系数去乘以所有像素的值,并将结果除以模板中元素的总数。
彩色图像的平滑:
1、抽取图像:I(R、G、B)三幅分量。
>>fR = I(:,:,1);
>>fG = I(:,:,2);
>>fB = I(:,:,3);
2、 (1): 分别对(R、G、B)这三幅图像分量进行滤波。例如:平均滤波器 w = fspecial('average', 25); 来进行平滑处理。
>>fR_filtered = imfilter(fR, w, 'replicate');
>>fG_filtered = imfilter(fG, w, 'replicate');
>>fB_filtered = imfilter(fB, w, 'replicate');
(2):也可以对(R、G、B)这三个图像分量一起处理,不用进行第三步。
>>fc_filtered = imfilter(I, w, 'replicate');
3、重建滤波后的 RGB 的图像。
>>fc_filtered = cat(3, fR_filtered, fG_filtered, fB_filtered)
例子程序:
close all
clear all
clc
I = imread('olivian.jpg'); %读取一张噪声图像
%提取图像的三个(R、G、B)分量图像
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
%生成一个8x8的均值滤波器
w = fspecial('average',8);
fR = imfilter(R,w,'replicate');
fG = imfilter(G,w,'replicate');
fB = imfilter(B,w,'replicate');
fc_filtered = cat(3,fR,fG,fB); %将这四个句子可以改为:fc_filtered = imfilter(I, w, 'replicate');
figure
subplot(121);
imshow(I);title('彩色噪声图像');
subplot(122);
imshow(fc_filtered,'Border','tight');title('彩色图像平滑处理');
一维相关与卷积
图1(a)显示了一维函数f和模板w。假设f的原点定为最左侧的点。为执行两个函数的相关,可移动w使其最右侧的点与f的原点重合,如图1(b)所示。需要注意的是,这两个函数之间有一些点未重叠。为处理该问题,最普遍的方法是在f中填充足够多的0(对应表1-1中边界选项boundary_options的默认值P),以保证在w通过f的整个过程中,始终存在对应的点。如图1(c)所示。
现在准备执行相关操作。相关操作结果第一个值是在图1(c)所示位置上两个函数对应位置乘积的累加和。接着将w向右移动一个位置并重复上述过程,如图1(d)所示。经过4次移动后,如图1(e)所示。以此类推,直至w全部通过f,最终得到如图1(f)所示。得到的w与f的相关如图1(g)所示。
在图1(g)所示的相关中,符号’full’是由MATLAB图像处理工具箱使用的标记,用来指示相关操作按上述方式计算时使用了经过充零后的图像。同样,工具箱还提供了另一个’same’选项,可以产生大小与f相同的相关。这种计算同样也使用经过充零后的图像,但开始位置位于与f的原点对准的模板的中线点。最后的计算时使f的最后一个点与模板的中心点对准。
图1 一维相关操作说明
图2 一维卷积操作说明
为了执行卷积,将w旋转180度,使其最右侧的点与f的原点重叠,如图2(b)所示。然后重复在相关操作中使用的滑动计算过程,如图2(c)到图2(f)所示。’full’和’same’卷积结果分别如图2(g)和图2-2(h)所示。
二维相关与卷积
上述情况很容易推广到二维图像中,如图3所示。原点位于图像f(x,y)的左上角。为了执行相关计算,设置w(x,y)的最右下角点,使之与f(x,y)的原点重合,如图3(c)所示。与一维情况类似,这里我们使用了零填充。然后在所有可能的位置上移动w(x,y),使得它的至少一个像素会与原始图像f(x,y)中的某个像素重叠。这个’full’相关的结果如图3(d)所示。为得到图3(e)中所示的’same’相关,我们要求w(x,y)的所有偏移都能实现中心像素覆盖原始的f(x,y)。
图3 二维相关操作示例
对于卷积,我们将w(x,y)旋转180度,其他处理方式与相关操作相同,参见图4(a)到图4(c)。
图4二维卷积操作示例
matlab中imfilter的用法的更多相关文章
- Matlab中imfilter()函数的用法
Matlab中imfilter()函数的用法 功能:对任意类型数组或多维图像进行滤波.用法:B = imfilter(A,H) B = imfilter(A,H,option1,option2,... ...
- MATLAB中“fitgmdist”的用法及其GMM聚类算法
MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...
- MATLAB中冒号的用法
MATLAB中冒号的用法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ matlab中冒号代表步长,用实例来说明 >> A=[1 2 3 ...
- MATLAB中冒号的用法解析
MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...
- MATLAB中mean的用法
https://blog.csdn.net/wangyang20170901/article/details/78745587 MATLAB中mean的用法 转载仙女阳 最后发布于2017-12-07 ...
- matlab中imfilter、conv2、imfilter2用法及区别
来源 :https://blog.csdn.net/u013066730/article/details/56665308(比较详细) https://blog.csdn.net/yuanhuilin ...
- matlab中freqz的用法以及多项式的展开
对于一个变量a,matlab中定义需要这样 syms a: 定义之后就可以写由变量组成的式子,比如 c=(1+a^-1)^5; 可以用expand(c) 就能把c展开成多项式,每一项的系数就可以看到. ...
- Matlab中struct的用法
struct在matlab中是用来建立结构体数组的.通常有两种用法: s = struct('field1',{},'field2',{},...) 这是建立一个空的结构体,field1,field ...
- matlab中句柄@的用法
@是Matlab中的句柄函数的标志符,即间接的函数调用方法. 1 句柄函数 主要有两种语法: handle = @functionname handle = @(arglist)anonymous_f ...
随机推荐
- 组件给App全局传值vue-bus的使用
npm安装 npm install vue-bus main.js引入 import VueBus from 'vue-bus' Vue.use(VueBus) 组件 getHouse(e){ thi ...
- Spring源码学习(六)-spring初始化回调方法源码学习
1.spring官方指定了三种初始化回调方法 1.1.@PostConstruct.@PreDestory 1.2.实现 InitializingBean DisposableBean 接口 1.3. ...
- 跨年夜问题:一句并不复杂的delete竟然在delete statement处cost飙升,在数据量上升的十万级就像进入了死循环,执行后久久没有结果
笔者使用的环境: # 类别 版本 1 操作系统 Win10 2 数据库 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bi ...
- Oracle数据库访问客户端 sqldeveloper-19.2.1.247.2212-x64 下载
Oracle数据库访问客户端 sqldeveloper-19.2.1.247.2212-x64 地址:https://pan.baidu.com/s/1iojCVxwXocyM8oObTf0xaw 这 ...
- Java Web项目实现写日志功能
第一步:导入log4j-1.2.16的jar包 第二步:在servlet包里编写写日志的servlet,代码如下: public class InitServlet extends HttpServl ...
- node.js之koa安装
默认安装了node 1.cmd中工作目录下输入npm init:一路回车即可: 2.还是在此目录下输入npm i koa:我这里是安装的淘宝镜像即是输入cpm i koa. 3.打开编辑器在文件目录下 ...
- Python 面试题 字符串 删除多少个字符使得出现做多的字符数量大于等于字符串长度的一半.
str1 = input() num = {} for i in set(str1): num[i]=str1.count(i) max_value = max(num.values()) n=abs ...
- 【GDKOI2004】汉诺塔
题目描述 古老的汉诺塔问题是这样的:用最少的步数将N个半径互不相等的圆盘从1号柱利用2号柱全部移动到3号柱,在移动的过程中小盘要始终在大盘的上面. 现在再加上一个条件:不允许直接把盘从1号柱移动到3号 ...
- nginx upstream一致性哈希的实现
地址:http://wiki.nginx.org/HttpUpstreamConsistentHash 首先声明一个命令: static ngx_command_t ngx_http_upstrea ...
- Erlang+RabbitMQ Server的详细安装
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言, 它有瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境. Erlang官网:ht ...