Steve用MATLAB进行图像处理

图像处理概念,算法,和MATLAB

混叠和图像大小调整-第3部分

今天我将结束关于混叠如何影响图像大小的讨论,以及如何imresize功能试图阻止它。(这叫做抗锯齿)。让我带你去我们要去的地方。这是我上次展示的区域板图像。

Z = imzoneplate(501);imshow (Z)标题(“Z”

当我们缩小的时候会发生什么Z通过扔掉样品。

Z4 = Z(1:4:结束,1:4:结束);imshow (Z4)标题(“Z4”

这就是imresize是否(使用默认行为):

Z4_imresize = imresize(Z,0.25);imshow (Z4_imresize)标题(“imresize (Z, 0.25)”

在我开始描述之前imresize抗锯齿的方法,我应该说在图像调整中有几种算法方法来抗锯齿。这只是一个。它基于数字信号处理的经典思想。

我将使用$f[n]$是一个离散变量$n$的函数,而$f(x)$是一个连续变量$x$的函数。这里有一种思考图像大小调整问题的方法,理论上是有用的。为了简化讨论,我将从一维信号的角度来讨论。(警告:拥有数字信号处理研究生水平背景的人可能会觉得这个解释太简单了。其他人会觉得它太行话了。我已经尽力了。)

假设我们想把一个一维信号$f[n]$转换成另一个具有不同采样率的一维信号。

  1. 将离散域信号$f[n]$转换为连续域信号$f(x)$。理论上,这一步涉及到使用连续域过滤器$h(x)$。你可以把这一步想象成插值(对于某些$h(x)$的选择)。
  2. 将连续域信号$f(x)$转换为新的离散域信号$g[n]$,方法是按所需的速率对$f(x)$进行采样:$g[n] = f(nT)$。

上面的两步过程有一个问题。如果$g[n]$的采样率从$f[n]$的原始采样率降低,那么如果$f[n]$包含在较低采样率下无法表示的高频,则该过程容易产生混叠失真。为了解决这个问题,让我们在过程中插入另一个步骤。

  1. 将离散域信号$f[n]$转换为连续域信号$f(x)$。
  2. 将$f(x)$通过低通滤波器,以去除在所需采样率下会导致混叠失真的高频成分。我们将其命名为$h_a(x)$。
  3. 将连续域信号$f(x)$转换为新的离散域信号$g[n]$,方法是按所需的速率对$f(x)$进行采样:$g[n] = f(nT)$。

理解的一个关键imresize方法是认识到连续使用两个滤波器进行滤波,在本例中$h(x)$和$h_a(x)$可以被一个滤波器替换,该滤波器的频率响应是原来两个滤波器的乘积。理解的第二个关键imresize算法是反混叠滤波器的期望频率响应,$h_a(x)$,取决于我们改变采样率的多少。如果我们进一步缩小原始信号,那么我们必须用$h_a(x)$去除更多的高频。

为了更简洁地陈述这一点(同时用力挥动我的手),你可以用just一个连续域滤波器,同时完成插值和反混叠。

我来演示一下如何对三次插值核函数进行运算imresize默认使用。下面是三次插值核的代码:

参见Keys,“用于数字图像%处理的三次卷积插值”,《IEEE声学、语音和信号%处理汇刊》,ASSP-29卷,第6期,1981年12月,第1155页。
abx = abs(x);Absx2 = absx.^2;Absx3 = absx.^3;
f = (1.5 * absx3 - 2.5 * absx2 + 1) * (absx < = 1) +…(-0.5*absx3 + 2.5*absx2 - 4*absx + 2)。((1 < absx) & (absx <= 2));

(此代码位于imresize.m文件中。)插值核是这样的:

图fplot(@cubic,[-2.5 2.5],“线宽”, 2.0)

这个函数imresize然后通过拉伸来修改插值。拉伸因子直接取决于原始信号的收缩程度。这是imresize修改插值内核的代码:

if (scale < 1) && (antialiasing) %使用修改过的内核来同时插入和%反别名。H = @(x)刻度*核(刻度* x);Kernel_width = Kernel_width / scale;%无抗锯齿;使用未修改的内核。H =核;结束

(我并不总是注释我的代码,但我认为我在这里做得不错。)

注意,当我们这样做的时候,我们根本没有修改内核日益增长的信号(>刻度1)而不是缩小它(比例< 1).

以下是三次插值核的三个版本:最初的一个,一个修改为缩小了2倍,一个修改为缩小了4倍。

H1 = @cubic;H2 = @(x) 0.5* h1(0.5*x);H4 = @(x) 0.25* h1(0.25*x);fplot (h1 [-10 10],“线宽”, 2)fplot (h2, -10 [10],“线宽”,2) fplot(h4,[-10 10],“线宽”, 2)传奇(“h_1 (x)”“h_2 (x)”“h_4 (x)”

当我们以这种方式展开插值核时,插值计算从更宽的邻域中平均像素值来产生每个输出像素。这是额外的平滑,这给了我们想要的抗锯齿效果。

这是imresize输出为区板图像再次。

imshow (Z4_imresize)

只有靠近中心的光环是可见的。这是因为这些环的空间频率在原始样本中较低,它们只需要四分之一的采样率就可以被成功地表示出来。远离中心的高频环已经被平滑成纯灰色。

你可以自己做实验imresize通过禁用反锯齿。以下是如何关闭反锯齿缩小图像:

Z4_imresize_noaa = imresize(Z,0.25,抗锯齿的、假);imshow (Z4_imresize_noaa)

在该表扬的地方表扬别人,用的算法imresize灵感来自Dale Schumacher在图形宝石III摩根·考夫曼,1994年。

你还有其他问题吗imresize?请留言告诉我。




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。