用MATLAB进行图像处理

图像处理概念,算法和MATLAB

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

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

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

这是我们收缩时发生的事情Z通过扔掉样品。

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

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

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

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

我将使用这样的符号:$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页。
Absx = 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) &&(反锯齿)%使用修改过的内核来同时进行插值和%反锯齿。H = @(x) scale * kernel(scale * x);Kernel_width = Kernel_width / scale;没有抗锯齿;使用未修改的内核。H =核;结束

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

请注意,当我们这样做时,根本不需要修改内核日益增长的信号(缩放>),而不是缩小它(量表< 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的文章“General Filtered Image rescale”的启发,在图形宝石III摩根·考夫曼,1994年。

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




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

评论

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