MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

如何使用双线性插值和抗锯齿显示图像

注意:这篇博文介绍了R2019b中新增的图像显示功能。您可以从//www.tianjin-qmedu.com/downloads.

这是我最喜欢的新图像:

但这只是它的512x512版本。单击在这里对于全分辨率(2048x2048)版本。图片来源:DeFacto[CC BY-SA 4.0(https://creativecommons.org/licenses/by-sa/4.0)]

这张图片吸引了我的眼球,因为我一直在寻找一张好的示例图片来演示混叠另外,我想写一篇关于R2019b中新的MATLAB图像显示功能的博客文章:双线性插值和抗锯齿。

在我进入图像显示细节之前,让我们先放大全分辨率图像的中心,看看我为什么感兴趣。

网址='//www.tianjin-qmedu.com/blogs/steve/files/Decimal_Clock_face_by_Pierre_Daniel_Destigny_1798-1805.jpg';A=imread(url);A_裁剪=A(-250:250)+1024,(-250:250)+1024,:);imshow(A_裁剪)

接下来,我想计算一个像素轮廓,沿着一条显示高频空间变化的路径。

持有在…上x=[12080];y=[106 188];图(x,y,“b”,“线宽”,4)保持

这是沿着该路径的像素轮廓(转换为灰度)。

全部的c=不规则文件(A_裁剪,x,y);c=rgb2gray(挤压(c)/255);h=绘图(c(:,1));xlabel(“沿纵断面路径的距离”)伊拉贝尔(“灰度像素值”)数据提示(h,13,0.9614);数据提示(h,25,0.9271);数据提示(h,60,0.9282);数据提示(h,72,0.9133);

我放置了一些数据提示,以显示路径上的空间周期大约为4个像素单位。这是非常接近以像素间距表示的最高空间频率。换句话说,它非常接近我所说的临界采样.

这有什么关系?这意味着,如果你仅仅通过使用最近邻插值来缩小这个图像,这是MATLAB以前一直显示图像的方式,你会看到一些奇怪的伪影显示图像以25%的放大率显示图像。

imshow(A_裁剪,“初始放大”,25)

但是,使用R2019b,您可以指定希望使用双线性插值显示图像。并且,如文档中所述,当指定双线性插值时,MATLAB还会自动应用抗锯齿技术。

imshow(A_裁剪,“初始放大”,25,“插值”,“双线性”)

您仍然可以在该结果中看到一些空间瑕疵,但它们已显著减少。

现在,让我们研究一下在放大图像而不是缩小图像时指定双线性插值的效果。

B_裁剪=A_裁剪(50:150115:215,:);imshow(B_裁剪)

接下来,让我们以500%的放大率显示它,有无双线性插值选项。

imshow(B_裁剪,“初始放大”,500)头衔(“使用最近邻插值进行500%放大”)
imshow(B_裁剪,“初始放大”,500,“插值”,“双线性”)头衔(“使用双线性插值进行500%放大”)

您可以在使用双线性插值的版本中看到改进的质量。

请注意,默认值仍然是最近邻插值。这是我们详细讨论过的一个选择。最终,我们决定保持默认行为不变,原因有两个:

  • 避免不兼容
  • 对于某些图像阵列,例如包含分割标签或其他类别的图像阵列,双线性插值将不合适

如果您已经拥有MatlabR2019B,请尝试使用此图像显示选项,并在评论中告诉我您的想法。




与MATLAB®R2019b一起发布

|
  • 打印
  • 发送电子邮件

评论

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