来源: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二维卷积操作示例

最新文章

  1. js 的 protype 小总结
  2. AngularJS-chapter1-2-四大特性
  3. 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
  4. HTTP 错误 500.19 - Internal Server Error
  5. iOS复杂动画之抽丝剥茧(Objective-C & Swift)
  6. 博主教你制作类似9patch效果的iOS图片拉伸
  7. DC DC降壓變換器ic 工作原理
  8. 记一次-angular-数字格式化
  9. C#命令行解析工具
  10. 应邀ITGeGe在线教育社区嵌入式基础开发讲师
  11. Linux磁盘管理及LVM讲解(week2_day2)--技术流ken
  12. pycharm 中 django 导入静态文件不提示补全
  13. selenium中的对文本进行全选,复制,粘贴,剪切和删除的操作
  14. gitlab与jira集成
  15. SQL语句中 chinese_prc_CS_AI_WS 以及replace用法
  16. hdu 4442 Physical Examination 贪心排序
  17. 在Linux(Ubuntu)下安装Arial、Times New Roman等字体
  18. 记录一下最近犯得sb的翻车错误
  19. IPv4地址范围和一些小知识
  20. Mac上获取文件md5 值

热门文章

  1. PyCharm 中文教程 01:运行 Python 的四种方式
  2. 无法从NVIDA官网下载安装CUDA安装包?NVIDA官网怎么了?
  3. Activiti7 启动流程实例
  4. java向上转型神解析
  5. JVM中的对象
  6. mysql通过经纬度查询400公里范围内的小区
  7. leetcode刷题-71简化路径
  8. Oracle用户自定义异常
  9. [LeetCode]Sql系列2
  10. Java语言的优势