主要内容

用网格插值重新采样图像

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

加载图片

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

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

图中包含一个轴对象。axis对象包含一个image类型的对象。

创建Interpolant

为图像创建网格插值对象。griddedInterpolant只适用于双精度和单精度矩阵,因此转换uint8矩阵.为了插值图像的每个RGB通道,指定两个网格向量来描述前两个维度中的样本点。网格向量作为单元格数组中的列向量分组在一起{xg1, xg2,…,xgN}.用这个公式,griddedInterpolant将3-D矩阵视为包含定义在同一网格上的多个2-D数据集。

sz = size(A);Xg = 1:sz(1);Yg = 1:sz(2);F = gridinterpolant ({xg,yg},double(A));

重新采样图像像素

使用前两个矩阵维度的大小重新采样图像,使其大小为120%。也就是说,原始图像中每5个像素,插值后的图像就有6个像素。用语法计算查询点上的插值F ({xq, yq})griddedInterpolant在查询点处评估3d图像中的每个页面。

Xq = (0:5/6:sz(1))';Yq = (0:5/6:sz(2))';vq = uint8(F({xq,yq}));imshow (vq)标题(高分辨率的

图中包含一个轴对象。标题为Higher Resolution的axes对象包含一个image类型的对象。

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

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

图中包含一个轴对象。标题为Lower Resolution的axes对象包含一个image类型的对象。

平滑缩放工件

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

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

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

图中包含一个轴对象。标题为Original Image, 10x Zoom的axes对象包含一个Image类型的对象。

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

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

图中包含一个轴对象。标题为Linear方法的坐标轴对象包含一个图像类型的对象。

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

图中包含一个轴对象。带有标题Cubic方法的坐标轴对象包含一个图像类型的对象。

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

图中包含一个轴对象。具有标题样条方法的轴对象包含图像类型的对象。

另请参阅

|

相关的话题