文档

用网格插值重新采样图像

这个例子展示了如何使用griddedInterpolant重新采样图像中的像素。重新采样图像对于调整分辨率和大小很有用,还可以在缩放后使用它来平滑像素。

加载图片

加载并显示图像ngc6543a.jpg,这是哈勃太空望远镜拍摄的行星状星云NGC 6543。这张图片展示了一些有趣的结构,比如同心的气体壳,高速气体的喷射,以及不寻常的气体结。矩阵一个代表图像的是一个650 × 600 × 3的uint8整数矩阵。

A = imread(“ngc6543a.jpg”);imshow (A)

创建Interpolant

为图像创建网格插值对象。对于图像,它适合使用默认网格,因为像素具有正整数位置。自griddedInterpolant只适用于双精度和单精度矩阵,将uint8矩阵转换为双精度。

F = griddedInterpolant(double(A));

重新采样图像像素

当您使用大量网格点重新采样图像时,查询插值器的最佳方法是使用网格向量.网格向量作为单元格数组中的列向量分组在一起{xg1, xg2,…,xgN}.网格向量是表示查询点网格的一种紧凑方法。用网格向量,griddedInterpolant不需要形成完整的网格来进行计算。

找到原始矩阵维度的大小,并使用这些维度大小重新采样图像,使其大小为120%。也就是说,原始图像中每5个像素,插值后的图像就有6个像素。

[sx,sy,sz] = size(A);Xq = (0:5/6:sx)';Yq = (0:5/6:sy)';Zq = (1:sz)';vq = uint8(F({xq,yq,zq}));图imshow(vq)标题(高分辨率的

类似地,通过查询比原始图像少55%点的插值器来减小图像的大小。虽然您可以简单地索引到原始图像矩阵以生成较低分辨率的图像,但插值使您能够在非整数像素位置重新采样图像。

Xq = (0:1.55:sx)';Yq = (0:1.55:sy)';Zq = (1:sz)';vq = uint8(F({xq,yq,zq}));图imshow(vq)标题(低分辨率的

平滑缩放工件

当您放大图像时,感兴趣区域的像素变得越来越大,图像中的细节很快就会丢失。您可以使用图像重新采样来平滑这些缩放工件。

放大原始图像中心的亮点。(索引到一个就是在图像中居中这个亮点,这样后续的缩放就不会把它推到帧外。)

imshow ((1:570 10:600,:)“InitialMagnification”“健康”缩放(10)标题(原图,10倍放大

查询插值F以10倍高的分辨率再现此放大图像(大约)。比较几种不同插值方法的结果。

Xq = (1:0.1:sx)';Yq = (1:0.1:sy)';Zq = (1:sz)';图F.Method =“线性”;vq = uint8(F({xq,yq,zq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”“健康”缩放(10)标题(的线性方法

图F.Method =“立方”;vq = uint8(F({xq,yq,zq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”“健康”缩放(10)标题(“立方方法”

图F.Method =样条的;vq = uint8(F({xq,yq,zq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”“健康”缩放(10)标题(“样条方法”

另请参阅

|

相关的话题