2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 4.线性和卷积——边界问题 解决边界方法和Matlab实战_3

4.线性和卷积——边界问题 解决边界方法和Matlab实战_3

时间:2023-01-17 11:51:41

相关推荐

4.线性和卷积——边界问题 解决边界方法和Matlab实战_3

目录

边界问题

解决边界方法

裁剪

环绕

复制边缘

反射

Matlab实战

边界问题

进行过滤时出现的一件事是如何处理边界,因为您可能会问当过滤器脱离边缘时会发生什么。

当您的过滤器掉落边缘时会发生什么?

所以你必须考虑你想要的大小操作,这样就可以这样说明。

在这里,我们将使用一些旧的MatLab命名法,他们已经改变了它,因为旧的MatLab命名法实际上已经清楚了。如图:

这里我有一个函数f,我用g过滤它。

你可能会试着好好考虑一下,我想要的尺寸输出是多少。

并且有三种不同的可能尺寸。

一个是当g刚触及那个角落时,我开始得到反馈。

因此,如果我将g的中心点视为参考,我实际上会得到一个比原始函数更大的盒子。

另一方面,如果我想确保所有g实际上都是触摸f,那么我将再次使用中心点,最后我的输出比原来的要小。如图

而且,这被称为有效,因为所有这些点实际上都是正确的。

但问题是当我过滤55*55的图像时,我真的想要回55*55。

我不想回到58*58或52*52。

我想要的是同样的。如图:

所以在这里你看到我们把那个过滤器的中间放在角落里,然后我们回到相同的大小。

那么问题当然,是在这些像素下面突然出现了什么?

基本上当你进行过滤时,你必须告诉系统你想要什么。

解决边缘方法

MATLAB有几种方法可以考虑如何做到这一点。

我们将再次使用旧的MATLAB命名法,然后我将告诉你有关新的命名法。

所以有几种不同的方法。

裁剪

第一种方法叫做clip(裁剪)。看图

Clip基本上意味着:我假设外边界是黑色的。

然后我应用我的过滤器,所以在这里我可以看到我的过滤器。

当我拿出图像时,你会注意到这个东西在边缘变得很暗。

这是有道理的,因为黑色已经泄露。如图:

但那被称为裁剪。

环绕

另一种方法称为环绕。这是一种奇怪的方法。

它与我们稍后将讨论的一些傅里叶分析(重点知识)有关。

基本上它说我假设我的照片连续并且链接在一起。如图:

这意味着:你看到了边界那里被填写了东西。如图:

这就是图片这一侧的内容。这里更容易看到。

这些,这些红辣椒来自这里。

黄色的稻草来自那边。

这是假设您实际看到的是周期性信号。所以,如果您正在查看周期性信号。

接下来会发生的事情就是它开始时的东西。

那么,在过滤中,在图像过滤中,这不能很好地工作。

在这里,我将应用滤镜,然后我将剪切回原始尺寸的图像。

你会注意到这里有一些红色的东西。如图:

红色的东西来自哪里?

它实际上是从底部来的,因为它缠绕着。如图:

复制边缘

有一种称为复制边缘或复制的方法,你基本上可以扩展出来。原始图:

所以我只是扩展了相同的值。如图:

然后我运行我的过滤器,然后我拿出我的照片,这是合理的。如图:

复制方法是一个简单的方法,它给你一个合理的结果。

它基本上保持图像类型不变。

现在的问题是,统计数据当然是不同的。

因为你有这个漂亮的变化图像,然后你让一切都变得相同。

反射

因此,另一种方法称为反射。好的,有时被称为对称的。

那就是你,你反映出来的形象。原始图像:

在这里,我就是这样做的。如图:

事实上,让我在这里画画。

这是反射边缘。

实际上,如果我擦除它,很难看到那个边缘。

因为我基本上是,我拍摄图像然后再将它折叠起来。

所以,我把它拿出来。我应用我的过滤器。如图:

然后我拿出图像,它实际上做得很好。

所以,通常你要么想做所谓的复制,要么复制边缘或反射整个图像。

在新的MATLAB中,这些使用名为imfilter的函数表示,它来自图像处理工具箱。

你可以输入一个值。将该值放入,所以我们输入0,就像剪切一样。如图:

你可以用圆形环绕,然后复制边缘是复制的,反射是对称的。通常,您将使用复制或对称。如图:

小测验:

处理边界条件的反射方法是,在滤波中由于:

A)创建的图像具有与原始图像相同的统计数据。

B)计算是这些方法中最便宜的。

C)将像素设置为零很快。

D)以上都不是。

答案:C。A是校正的。通过执行该反射创建的图像具有相同的统计信息。B是错误的,这种计算对电脑来说无关要紧的。

Matlab实战

那么哪个是您最喜欢的处理边界问题的选择?

加载图像包,读取图像,创建高斯滤波器。

>> pkg load image;>>>> img = imread('fall-leaves.png');>> imshow(img);>>>> filter_size = 21;>> filter_sigma = 3;>> filter = fspecial('gaussian', filter_size, filter_sigma);

记住高斯是特别的(指的是函数fspecial)。

现在,当您应用它时,请指定边参数。传入0等于默认值。

>> smoothed = imfilter(img, filter, 0);

运行代码,你可以看到沿着所有边界的黑色渗透。如图:

这是因为我们传入0。如果我们输入其他数字会怎么样?

试试看。输入圆形怎么样?

>> smoothed = imfilter(img, filter, ‘circular’);

运行代码,如图:

如果你仔细观察,你会看到这边的绿色渗透,而另一边则是一点点红色。

试试复制。

>> smoothed = imfilter(img, filter, ‘replicate’);

运行代码,如图:

复制并不算太糟糕。没有明显的影响。

最后尝试对称,或称为跨边界反射。

>> smoothed = imfilter(img, filter, ‘symmetric’);

也不错,实际上与复制没有太大区别。

您可以随意尝试这些不同的选项,过滤器大小和Sigma。

——学会编写自己的代码,才能练出真功夫。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。