32.1 加载和保存图像

大多数图像处理任务的第一步是将图像加载到Octave中,这是通过imread函数完成的。imwrite函数是将图像写入磁盘的对应函数。

总之,大多数图像处理代码都将遵循以下代码的结构:

I = imread ("my_input_image.img");
J = process_my_image (I);
imwrite (J, "my_output_image.img");
 
[img, map, alpha] = imread (filename)
[…] = imread (url)
[…] = imread (…, ext)
[…] = imread (…, idx)
[…] = imread (…, param1, value1, …)

读取各种文件格式的图像。

从文件filename或在线资源url中以矩阵形式读取图像。如果两者都未指定,但ext已指定,则查找扩展名为ext的文件。

输出的大小和类别取决于图像的格式。彩色图像以MxNx3矩阵的形式返回。灰度和黑白图像的大小为MxN。多页图像将具有额外的第4个维度。

图像的位深度决定了输出的类别:对于灰度和彩色图像为"uint8""uint16""single",对于黑白图像为"logical"。请注意,索引图像始终返回颜色映射表的索引,无论map是否为请求的输出。要获得实际的RGB图像,请使用ind2rgb。当读取多个索引图像时,map从第一幅图像获取。在少数情况下这可能不正确,可以使用imfinfo获取每个图像的颜色映射表。

有关表示图像的更多信息,请参阅Octave手册(参见表示图像)。

某些文件格式,如 TIFF 和 GIF,能够在一个文件中存储多个图像。idx可以是指定要读取的图像索引的标量或向量。默认情况下,Octave 将只读取第一页。

根据文件格式的不同,可以使用parametervalue对来配置图像的读取。支持以下选项:

"Frames" or "Index"

这是指定idx的另一种方法。以这种方式指定时,其值也可以是字符串"all"

"Info"

此参数是为了MATLAB兼容性而存在,但没有实际效果。为了从单个文件读取多个图像时获得最佳性能,请使用"Index"选项。

"PixelRegion"

控制读取的图像区域。该值必须是一个元胞数组,包含两个各有 3 个元素的数组 {[rows], [cols]}。数组中的元素是要读取的开始像素、步进值和结束像素。如果省略步进值,则默认为 1。例如,以下写法都是等效的:

imread (filename, "PixelRegion", {[200 600], [300 700]})
imread (filename, "PixelRegion", {[200 1 600], [300 1 700]})
imread (filename)(200:600, 300:700)

另请参阅: imwrite, imfinfo, imformats.

 
imwrite (img, filename)
imwrite (img, filename, ext)
imwrite (img, map, filename)
imwrite (…, param1, val1, …)

以各种文件格式写入图像。

图像img可以是二进制、灰度、RGB或多维图像。img的大小和类别应与使用imread读取时预期的内容相同:第3和第4维度分别保留给颜色空间和多页。如果是索引图像,还必须指定颜色图map

如果未提供ext,则使用filename的文件扩展名来确定格式。实际支持的格式取决于Octave构建过程中的选项。使用imformats检查对不同图像格式的支持。

根据文件格式的不同,可以使用paramval对来配置图像的写入。支持以下参数:

Alpha

图像的Alpha(透明度)通道。这必须是一个与img具有相同类别、行数和列数的矩阵。在多页图像的情况下,第四维度的大小也必须匹配,并且第三维度必须是单例。默认情况下,图像将完全不透明。

Compression

用于图像的压缩方式。可以是以下其中之一:"none"(默认值)、"bzip""fax3""fax4""jpeg""lzw""rle""deflate"。请注意,并非所有压缩类型都适用于所有图像格式,默认情况下取决于Magick库。

DelayTime

对于接受动画的格式(如GIF),控制帧移动到下一帧之前的显示时间。该值必须是标量(将应用于img中的所有帧),或长度等于im中帧数的向量。该值以秒为单位,必须介于0和655.35之间,默认值为0.5。

DisposalMethod

对于接受动画的格式(如GIF),控制绘制下一帧之前对当前帧的处理方式。其值可以是以下字符串之一:"doNotSpecify"(默认值);"leaveInPlace";"restoreBG";和"restorePrevious",或长度等于img中帧数的字符串元胞数组。

LoopCount

对于接受动画的格式(如 GIF),控制序列重复的次数。值 Inf 表示无限循环(默认值),值 0 或 1 表示序列只播放一次(循环 0 次),而值 2 或以上表示循环该次数(循环 2 次表示完整序列播放 3 次)。当文件写入结束时只有一个图像时,此参数将被忽略。

Quality

设置压缩质量。该值应为 0 和 100 之间的整数,较大的值表示较高的视觉质量和较低的压缩。默认值为 75。

WriteMode

某些文件格式,如TIFF和GIF,能够在一个文件中存储多个图像。此参数指定img是否应追加到文件(如果存在),或者是否应为其创建新文件(可能覆盖现有文件)。值应该是字符串"Overwrite"(默认值)或"Append"

尽管有此参数,但写入多页图像最有效的方法是将4维img传递给imwrite,即使用imread并将参数"Index"设置为"all"时预期会获得的相同矩阵。

另请参阅: imread, imfinfo, imformats.

 
val = IMAGE_PATH ()
old_val = IMAGE_PATH (new_val)
old_val = IMAGE_PATH (new_val, "local")

查询或设置内部变量,该变量指定要在其中搜索图像文件的目录的冒号分隔列表。

当从函数内部使用"local"参数调用时,该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

另请参阅: EXEC_PATH, OCTAVE_HOME, OCTAVE_EXEC_HOME.

可以获得磁盘上图像文件的信息,而无需实际将其读入Octave。这是通过imfinfo函数完成的,它提供对存储在图像文件头中的许多参数的读取访问。

 
info = imfinfo (filename)
info = imfinfo (url)
info = imfinfo (…, ext)

从文件中读取图像信息。

imfinfo返回一个结构体,该结构体包含有关存储在文件filename中的图像的信息。如果没有文件filenameext已指定,它将查找名为filename且扩展名为ext的文件,即名为filename.ext的文件。

输出结构体info包含以下字段:

Filename

图像文件的全名。

FileModDate

上次修改文件的日期。

FileSize

磁盘上图像的字节数。

Format

图像格式(例如 "jpeg")。

Height

图像高度(以像素为单位)。

Width

图像宽度(以像素为单位)。

BitDepth

每个通道每个像素的位数。

ColorType

图像类型。值为 "grayscale""indexed""truecolor""CMYK""undefined"

XResolution

图像的X分辨率。

YResolution

图像的Y分辨率。

ResolutionUnit

图像分辨率的单位。值为 "Inch""Centimeter""undefined"

DelayTime

以 1/100 秒为单位的时间(0 到 65535),在显示动画序列中的下一个图像之前必须经过的时间。

LoopCount

循环动画的迭代次数。

ByteOrder

支持它的格式的字节序参数。值为 "little-endian""big-endian""undefined"

Gamma

图像的Gamma级别。由于显示器的差异,相同颜色的图像在两个不同的工作站上显示时可能看起来不同。

Quality

JPEG/MIFF/PNG 压缩级别。值是一个范围在 [0 100] 的整数。

DisposalMethod

仅对 GIF 图像有效,控制创建 GIF 动画时连续帧的渲染方式(前一帧的处理方式)。值可以是 "doNotSpecify""leaveInPlace""restoreBG""restorePrevious"。对于非 GIF 文件,值为空字符串。

Chromaticities

值是一个1x8矩阵,其中白色、红色、绿色和蓝色点的x、y色度值按顺序排列。

Comment

图片注释。

Compression

压缩类型。值可以是 "none""bzip""fax3""fax4""jpeg""lzw""rle""deflate""lzma""jpeg2000""jbig2""undefined"

Colormap

每个图像的颜色图。

Orientation

图像相对于行和列的方向。值是 TIFF 6 规范中定义的介于 1 和 8 之间的整数,用于 MATLAB 兼容性。

Software

用于生成图像的相机或图像输入设备的软件或固件的名称和版本。

Make

记录设备的制造商。这是一家生产DCS、扫描仪、视频数字化仪或其他生成图像的设备的公司。

Model

"Make"字段中提到的记录设备的型号名称或型号。

DateTime

Exif 标准定义的图像创建日期和时间,即文件更改的日期和时间。

ImageDescription

Exif标准定义的图像标题。

Artist

相机所有者、摄影师或图像创建者的姓名。

Copyright

声称对图像拥有权利的个人或组织的版权声明。

DigitalCamera

具有从Exif标签检索到的信息的结构体。

GPSInfo

具有从Exif标签检索到的地理信息(GPS)的结构体。

另请参阅: imread, imwrite, imshow, imformats.

默认情况下,Octave的图像IO函数(imreadimwriteimfinfo)通过GraphicsMagick库运作。这意味着支持大量的图像格式,但考虑到科学图像格式的庞大规模及其通常的闭源性,不可能有一个能够读取所有图像格式的库。正因为如此,函数imformats维护一个包含可用格式、其扩展名以及图像IO函数应使用的函数的可配置列表。这允许通过创建针对特定文件格式的函数来扩展Octave的图像IO功能。

虽然可以直接调用额外的函数,但正确配置Octave的imformats可以保留从文件格式中抽象出来的统一代码。

需要注意的是,文件格式实际上并不是通过其文件扩展名来定义的。GraphicsMagick能够读取和写入比imformats所列更多的文件格式。这意味着即使扩展名不正确或丢失,图像也可能被正确读取,而且未列出的格式也不一定被支持。

 
imformats ()
formats = imformats (ext)
formats = imformats (format)
formats = imformats ("add", format)
formats = imformats ("remove", ext)
formats = imformats ("update", ext, format)
formats = imformats ("factory")

管理支持的图像格式。

formats是一个结构体,包含关于每个支持的文件格式的信息,或者对于特定格式ext,在字段ext上显示的值。它包含以下字段:

ext

文件格式的名称。这可能与文件扩展名匹配,但 Octave 会自动检测文件格式。

description

文件格式的详细说明。

isa

用于确认文件是否为指定格式的函数句柄。

write

如果文件为指定格式,则用于写入的函数句柄。

read

用于打开指定格式文件的函数句柄。

info

用于获取指定格式的图像信息的函数句柄。

alpha

如果格式支持 alpha 通道(透明或无光),则为逻辑值。

multipage

如果格式支持多页(每个文件多个图像),则为逻辑值。

可以使用选项 "add""remove""update" 更改 Octave 管理文件格式的方式,并提供带有必填字段的结构体 format。选项 "factory" 将配置重置为默认值。

Octave 软件包可以通过使用 PKG_ADD 和 PKG_DEL 命令来扩展 Octave 的图像读取能力。

另请参阅: imfinfo, imread, imwrite.


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4