imresize
调整图像大小
语法
说明
返回图像 B
= imresize(A
,[numrows numcols]
)B
,其行数和列数由二元素向量 [numrows numcols]
指定。
___ = imresize(___,
返回调整大小后的图像,其中名称-值参数控制大小调整操作的各个方面。在所有其他输入参数之后指定名称-值参数。Name,Value
)
示例
使用默认插值方法将图像的长宽缩小二分之一
将图像加载到工作区。
I = imread('ngc6543a.jpg');
将图像的长宽缩小二分之一。
J = imresize(I, 0.5);
显示原始图像和调整大小后的图像。
figure, imshow(I), figure, imshow(J)
使用最近邻点插值缩小图像
将图像加载到工作区。
I = imread('ngc6543a.jpg');
使用最近邻点插值将图像缩小到原始大小的 40%。这是最快的方法,但质量最差。
J = imresize(I,0.4,'nearest');
显示原始图像和调整大小后的图像。
imshow(I)
title('Original Image')
imshow(J)
title('Resized Image Using Nearest Neighbor Interpolation')
通过指定输出图像的大小调整 RGB 图像的大小
将 RGB 图像读取到工作区。
RGB = imread('peppers.png');
将 RGB 图像的大小调整为 64 行。imresize
会自动计算列数。
RGB2 = imresize(RGB,[64 NaN]);
获取调整大小后的图像的大小。
sz = size(RGB2)
sz = 1×3
64 86 3
显示原始图像和调整大小后的图像。
imshow(RGB)
title("Original Image")
imshow(RGB2)
title("Resized Image with 64 Rows")
调整索引图像的大小
将索引图像读取到工作区。
[X,map] = imread("corn.tif");
将索引图像的大小增大 50%。
[Y,newmap] = imresize(X,map,1.5);
显示原始图像和调整大小后的图像。
imshow(X,map)
title("Original Indexed Image and Colormap")
imshow(Y,newmap)
title("Resized Image and Optimized Colormap")
输入参数
A
— 要调整大小的图像
数值数组 | 逻辑数组 | 分类数组
要调整大小的图像,指定为任意维度的数值数组、逻辑数组或分类数组。输入必须为非稀疏的,数值输入必须为实数。
数据类型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
| categorical
scale
— 大小调整因子
正数
大小调整因子,指定为正数。imresize
对行和列维度应用相同的缩放因子。要对每个维度应用不同的大小调整因子,请使用 Scale
名称-值参数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
[numrows numcols]
— 输出图像的行和列维度
由正数组成的二元素向量
输出图像的行和列维度,指定为由正数组成的二元素向量。您可以为 numrows
或 numcols
指定 NaN
值。在这种情况下,imresize
会自动计算该维度的行数或列数,同时保持图像的纵横比。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
X
— 要调整大小的索引图像
实数非稀疏数值数组
要调整大小的索引图像,指定为由正整数组成的实数非稀疏数值数组。
数据类型: double
| uint8
| uint16
map
— 与索引图像关联的颜色图
c×3 数值矩阵
与索引图像 X
相关联的颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 数值矩阵。每行是一个三元素 RGB 三元组,指定颜色图的单个颜色的红、绿和蓝分量。
数据类型: double
method
— 插值方法
字符向量 | 字符串标量 | 二元素元胞数组
插值方法,指定为字符向量、字符串标量或二元素元胞数组。数值图像和逻辑图像的默认值为 "bicubic"
。分类图像的默认值为 "nearest"
。分类图像仅支持值 "nearest"
和 "box"
。
当 method
是字符向量或字符串标量时,它标识下表中列出的特定方法或指定的插值核。
方法 | 描述 |
---|---|
| 最近邻插值;赋给输出像素的值就是其输入点所在像素的值。不考虑其他像素。 |
| 双线性插值;输出像素值是最近 2×2 邻点中的像素的加权平均值 |
| 双三次插值;输出像素值是最近 4×4 邻域中的像素的加权平均值。 注意 双三次插值可能生成在原始范围之外的像素值。 |
插值核 | 描述 |
"box" | 盒形核 |
"triangle" | 三角形核(等效于 "bilinear" ) |
"cubic" | 三次方核(等效于 "bicubic" ) |
"lanczos2" | Lanczos-2 核 |
"lanczos3" | Lanczos-3 核 |
当 method
是二元素元胞数组时,用来定义自定义插值核。元胞数组的形式为 {f,w},其中 f 是自定义插值核的函数句柄,w 是自定义核的宽度。f(x) 在区间 -w/2 <= x < w/2 外的值必须为零。函数句柄 f 可通过标量或向量输入进行调用。对于用户指定的插值核,输出图像可以有一些值稍微超出输入图像中的像素值范围。
有关内置和自定义插值核的详细信息,请参阅Create and Compare Resizing Interpolation Kernels。
数据类型: char
| string
| cell
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
示例: B = imresize(A,0.5,Antialiasing=false)
在缩小图像时不执行消除锯齿。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: B = imresize(A,0.5,"Antialiasing",false)
在缩小图像时不执行消除锯齿。
Antialiasing
— 缩小图像时消除锯齿
true
| false
缩小图像时执行消除锯齿,指定为 true
或 false
。
如果插值
method
为"nearest"
,则Antialiasing
的默认值为false
。如果插值
method
为"box"
,并且输入图像是分类图像,则Antialiasing
的默认值为false
。对于其他所有插值方法,默认值为
true
。
数据类型: logical
Dither
— 执行颜色抖动
true
(默认) | false
执行颜色抖动,指定为 true
或 false
。执行抖动时,会对图像应用一种噪声,以使量化误差随机化并防止出现大范围色块。
Dither
参数仅在调整索引图像大小时有效。
数据类型: logical
Method
— 插值方法
字符向量 | 字符串标量 | 元胞数组
插值方法,指定为字符向量、字符串标量或二元素元胞数组。有关详细信息,请参阅 method
。
数据类型: char
| string
| cell
OutputSize
— 输出图像的大小
由正数组成的二元素向量
输出图像的大小,指定为由正数组成的二元素向量。有关详细信息,请参阅 [numrows numcols]
。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Scale
— 大小调整缩放因子
正数 | 由正数组成的二元素向量
大小调整缩放因子,指定为正数或由正数组成的二元素向量。如果指定标量,则 imresize
对行维度和列维度应用相同的缩放因子。如果指定二元素向量,则 imresize
对每个维度应用不同的缩放值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
输出参数
提示
如果输出图像的大小不是整数,则
imresize
不会使用指定的比例。imresize
在计算输出图像大小时使用ceil
函数。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持用于索引图像的语法,包括名称-值参数
Colormap
和Dither
。不支持自定义插值核。
所有名称-值参数都必须为编译时常量。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
不支持
Colormap
和Dither
名称-值参数。不支持索引图像。
不支持自定义插值核。
所有名称-值对组都必须为编译时常量。
对于某些插值核,MATLAB® 和生成代码之间的结果可能在数值上存在微小差异。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持超过 227 个元素的
gpuArray
输入。gpuArray
输入必须为非稀疏值。不支持基础类型为
categorical
的gpuArray
输入。GPU 不支持索引图像。
如果使用双三次插值,输出图像可以有一些值稍微超出输入图像中的像素值范围。
在 CPU 和 GPU 上使用
imresize
的结果在数值上略有差异。这些差异出现在图像的右边界和下边界,肉眼几乎看不到。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2019a: 支持分类图像
imresize
函数现在支持分类图像。
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)