这个例子展示了如何使用griddedInterpolant
重新采样图像中的像素。对图像重新采样对于调整分辨率和大小很有用,你也可以使用它来平滑缩放后的像素。
加载并显示图像ngc6543a.jpg
这是哈勃太空望远镜拍摄的行星状星云ngc6543。这幅图像显示了一些有趣的结构,如同心气体壳,高速气体喷射,和不寻常的气体节。矩阵一个
表示图像的是一个650 × 600 × 3的矩阵uint8
整数。
一个= imread (“ngc6543a.jpg”);imshow (A)
为图像创建一个网格插值对象。griddedInterpolant
只适用于双精度和单精度矩阵,所以转换uint8
矩阵双
.为了插值图像的每个RGB通道,指定两个网格向量来描述前两个维度上的采样点。网格向量作为单元格数组中的列向量组合在一起{xg1, xg2,…,xgN}
.有了这个配方,griddedInterpolant
将3-D矩阵视为包含在同一网格上定义的多个2-D数据集。
深圳=大小(A);xg = 1:深圳(1);yg = 1:深圳(2);F = griddedInterpolant ({xg, yg},双(A));
使用前两个矩阵的尺寸重新采样图像,使其大小为120%。也就是说,对于原始图像中的每5个像素,插值后的图像有6个像素。用语法计算查询点上的插值F ({xq, yq})
.griddedInterpolant
在查询点计算3d图像中的每个页面。
xq =(0:5/6:深圳(1)';yq =(0:5/6:深圳(2))';vq = uint8 (F ({xq, yq}));imshow (vq)标题(高分辨率的)
类似地,通过查询比原始图像少55%的点的插值来减小图像的大小。虽然您可以简单地对原始图像矩阵进行索引以产生较低分辨率的图像,但插值使您能够在非整数像素位置重新采样图像。
xq =(0:1.55:深圳(1)';yq =(0:1.55:深圳(2))';vq = uint8 (F ({xq, yq}));图imshow (vq)标题(低分辨率的)
当你放大图像时,感兴趣区域的像素会变得更大,图像中的细节很快就会丢失。您可以使用图像重采样来平滑这些缩放工件。
放大原始图像中心的亮点。(索引一个
就是把这个亮点放在图像的中心,这样后续的缩放就不会把它推出帧。)
imshow ((1:570 10:600,:)“InitialMagnification”,“健康”)变焦(10)标题(“原图,10倍放大”)
查询interpolantF
以更高10倍的分辨率复制这张放大的图像(大约)。比较几种不同插值方法的结果。
xq =(1:0.1:深圳(1)';yq =(1:0.1:深圳(2))';F.Method =“线性”;vq = uint8 (F ({xq, yq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”,“健康”)变焦(10)标题(的线性方法)
F.Method =“立方”;vq = uint8 (F ({xq, yq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”,“健康”)变焦(10)标题(“立方方法”)
F.Method =样条的;vq = uint8 (F ({xq, yq}));imshow (vq (1:5700 150:5900,:),“InitialMagnification”,“健康”)变焦(10)标题(“样条方法”)