大多数图像处理任务的第一步是将图像加载到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 将只读取第一页。
根据文件格式的不同,可以使用parameter、value对来配置图像的读取。支持以下选项:
"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)
(img, filename) ¶(img, filename, ext) ¶(img, map, filename) ¶(…, param1, val1, …) ¶以各种文件格式写入图像。
图像img可以是二进制、灰度、RGB或多维图像。img的大小和类别应与使用imread读取时预期的内容相同:第3和第4维度分别保留给颜色空间和多页。如果是索引图像,还必须指定颜色图map。
如果未提供ext,则使用filename的文件扩展名来确定格式。实际支持的格式取决于Octave构建过程中的选项。使用imformats检查对不同图像格式的支持。
根据文件格式的不同,可以使用param、val对来配置图像的写入。支持以下参数:
图像的Alpha(透明度)通道。这必须是一个与img具有相同类别、行数和列数的矩阵。在多页图像的情况下,第四维度的大小也必须匹配,并且第三维度必须是单例。默认情况下,图像将完全不透明。
用于图像的压缩方式。可以是以下其中之一:"none"(默认值)、"bzip"、"fax3"、"fax4"、"jpeg"、"lzw"、"rle"或"deflate"。请注意,并非所有压缩类型都适用于所有图像格式,默认情况下取决于Magick库。
对于接受动画的格式(如GIF),控制帧移动到下一帧之前的显示时间。该值必须是标量(将应用于img中的所有帧),或长度等于im中帧数的向量。该值以秒为单位,必须介于0和655.35之间,默认值为0.5。
对于接受动画的格式(如GIF),控制绘制下一帧之前对当前帧的处理方式。其值可以是以下字符串之一:"doNotSpecify"(默认值);"leaveInPlace";"restoreBG";和"restorePrevious",或长度等于img中帧数的字符串元胞数组。
对于接受动画的格式(如 GIF),控制序列重复的次数。值 Inf 表示无限循环(默认值),值 0 或 1 表示序列只播放一次(循环 0 次),而值 2 或以上表示循环该次数(循环 2 次表示完整序列播放 3 次)。当文件写入结束时只有一个图像时,此参数将被忽略。
设置压缩质量。该值应为 0 和 100 之间的整数,较大的值表示较高的视觉质量和较低的压缩。默认值为 75。
某些文件格式,如TIFF和GIF,能够在一个文件中存储多个图像。此参数指定img是否应追加到文件(如果存在),或者是否应为其创建新文件(可能覆盖现有文件)。值应该是字符串"Overwrite"(默认值)或"Append"。
尽管有此参数,但写入多页图像最有效的方法是将4维img传递给imwrite,即使用imread并将参数"Index"设置为"all"时预期会获得的相同矩阵。
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中的图像的信息。如果没有文件filename且ext已指定,它将查找名为filename且扩展名为ext的文件,即名为filename.ext的文件。
输出结构体info包含以下字段:
图像文件的全名。
上次修改文件的日期。
磁盘上图像的字节数。
图像格式(例如 "jpeg")。
图像高度(以像素为单位)。
图像宽度(以像素为单位)。
每个通道每个像素的位数。
图像类型。值为 "grayscale"、"indexed"、"truecolor"、"CMYK" 或 "undefined"。
图像的X分辨率。
图像的Y分辨率。
图像分辨率的单位。值为 "Inch"、"Centimeter" 或 "undefined"。
以 1/100 秒为单位的时间(0 到 65535),在显示动画序列中的下一个图像之前必须经过的时间。
循环动画的迭代次数。
支持它的格式的字节序参数。值为 "little-endian"、"big-endian" 或 "undefined"。
图像的Gamma级别。由于显示器的差异,相同颜色的图像在两个不同的工作站上显示时可能看起来不同。
JPEG/MIFF/PNG 压缩级别。值是一个范围在 [0 100] 的整数。
仅对 GIF 图像有效,控制创建 GIF 动画时连续帧的渲染方式(前一帧的处理方式)。值可以是 "doNotSpecify"、"leaveInPlace"、"restoreBG" 或 "restorePrevious"。对于非 GIF 文件,值为空字符串。
值是一个1x8矩阵,其中白色、红色、绿色和蓝色点的x、y色度值按顺序排列。
图片注释。
压缩类型。值可以是 "none"、"bzip"、"fax3"、"fax4"、"jpeg"、"lzw"、"rle"、"deflate"、"lzma"、"jpeg2000"、"jbig2" 或 "undefined"。
每个图像的颜色图。
图像相对于行和列的方向。值是 TIFF 6 规范中定义的介于 1 和 8 之间的整数,用于 MATLAB 兼容性。
用于生成图像的相机或图像输入设备的软件或固件的名称和版本。
记录设备的制造商。这是一家生产DCS、扫描仪、视频数字化仪或其他生成图像的设备的公司。
"Make"字段中提到的记录设备的型号名称或型号。
Exif 标准定义的图像创建日期和时间,即文件更改的日期和时间。
Exif标准定义的图像标题。
相机所有者、摄影师或图像创建者的姓名。
声称对图像拥有权利的个人或组织的版权声明。
具有从Exif标签检索到的信息的结构体。
具有从Exif标签检索到的地理信息(GPS)的结构体。
默认情况下,Octave的图像IO函数(imread、imwrite和imfinfo)通过GraphicsMagick库运作。这意味着支持大量的图像格式,但考虑到科学图像格式的庞大规模及其通常的闭源性,不可能有一个能够读取所有图像格式的库。正因为如此,函数imformats维护一个包含可用格式、其扩展名以及图像IO函数应使用的函数的可配置列表。这允许通过创建针对特定文件格式的函数来扩展Octave的图像IO功能。
虽然可以直接调用额外的函数,但正确配置Octave的imformats可以保留从文件格式中抽象出来的统一代码。
需要注意的是,文件格式实际上并不是通过其文件扩展名来定义的。GraphicsMagick能够读取和写入比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上显示的值。它包含以下字段:
文件格式的名称。这可能与文件扩展名匹配,但 Octave 会自动检测文件格式。
文件格式的详细说明。
用于确认文件是否为指定格式的函数句柄。
如果文件为指定格式,则用于写入的函数句柄。
用于打开指定格式文件的函数句柄。
用于获取指定格式的图像信息的函数句柄。
如果格式支持 alpha 通道(透明或无光),则为逻辑值。
如果格式支持多页(每个文件多个图像),则为逻辑值。
可以使用选项 "add"、"remove" 和 "update" 更改 Octave 管理文件格式的方式,并提供带有必填字段的结构体 format。选项 "factory" 将配置重置为默认值。
Octave 软件包可以通过使用 PKG_ADD 和 PKG_DEL 命令来扩展 Octave 的图像读取能力。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4