32.3表示图像

通常,Octave支持四种不同类型的图像,灰度图像、RGB图像、二进制图像和索引图像。灰度图像用M乘N矩阵表示,其中每个元素对应于像素的强度。RGB图像用M×N×3数组表示,其中每个3向量对应于每个像素的红色、绿色和蓝色强度。

灰度或RGBimage中像素值的实际含义取决于矩阵的类别。如果矩阵属于类别double像素强度介于0和1之间(如果属于类)uint8强度在0到255之间,如果属于类uint16强度在0和65535之间。

二值图像是类的M乘N矩阵logical。二进制图像中的像素是黑色的,如果它是false如果是白色的true.

索引图像从M乘N的整数矩阵和C乘3的彩色图组成。每个整数对应于颜色map中的一个索引,颜色map中每一行对应于RGB颜色。颜色图必须是一流的double值介于0和1之间。

以下方便函数可用于图像格式之间的转换。

 
: dimg = im2double (img)
: dimg = im2double (img, "indexed")

将图像转换为双倍精度。

的转换img两倍精度取决于输入图像的类型。支持以下输入类:

uint8, uint16, and int16

类中的值的范围按比例缩放到区间[01]。

logical

True值和false值分别赋值了一个值1和0。

广告
single

值被强制转换为两倍。

广告
double

返回相同的图像。

广告

如果img是索引图像,则第二个参数应该是字符串"indexed"。如果是,那么img必须是浮点类或无符号整数类,并且它将被强制转换为双精度。如果它是一个整数类,则应用+1的偏移量。

详见: double.

广告
 
: img = gray2ind (I)
: img = gray2ind (I, n)
: img = gray2ind (BW)
: img = gray2ind (BW, n)
: [img, map] = gray2ind (…)

将灰度或二进制强度图像转换为索引图像。

索引图像将包括n不同的强度值。如果没有给出n灰度图像默认为64,黑白图像默认为2。

输出img属于uint8类,如果n小于或等于256;否则,返回类为uint16。

详见: ind2gray, rgb2ind.

广告
 
: I = ind2gray (x, map)

将彩色索引图像转换为灰度强度图像。

图像x必须是索引图像,将使用颜色map进行转换map如果map不包含图像所需的足够颜色,中的像素x在转换为灰度之前,将范围外的颜色map到map中的最后一种颜色。

输出I与输入属于同一类x可能是其中之一uint8, uint16, singledouble.

实现说明:有几种方法可以将颜色转换为灰度强度。此函数使用从中获得的亮度值rgb2gray哪个是I = 0.299*R + 0.587*G + 0.114*B。其他可能性包括来自rgb2hsv或使用单一颜色通道ind2rgb.

详见: gray2ind, ind2rgb.

广告
 
: [x, map] = rgb2ind (rgb)
: [x, map] = rgb2ind (R, G, B)

将红-绿-蓝(RGB)颜色空间中的图像转换为索引图像。

输入图像rgb可以指定为大小为MxNx3的单个矩阵或者指定为三个单独的变量,R, GB,它的三种颜色通道,红色、绿色和蓝色。

它输出索引图像x和一张彩色地图map以解释与输入完全相同的图像。不执行抖动或其他形式的色彩量化。索引图像的输出类x可以是uint8、uint16或双色,以指定图像中唯一颜色的数量所需的为准(该数量将等于map整齐

还支持多维索引图像(大小为MxNx3xK),均通过单个输入(rgb)或者它的三个颜色通道是单独的变量。

详见: ind2rgb, rgb2hsv, rgb2gray.

广告
 
: rgb = ind2rgb (x, map)
: [R, G, B] = ind2rgb (x, map)

将索引图像转换为红色、绿色和蓝色分量。

图像x必须是索引图像,将使用颜色map进行转换map如果map不包含图像所需的足够颜色,中的像素x范围之外的颜色被map到map中的最后一种颜色。

输出可以是单个RGB图像(MxNx3矩阵,其中M和Nare是原始图像x尺寸,红色、绿色和蓝色通道中的每一个对应一个)。或者,可以返回大小为MxN的单独的红色、绿色和蓝色矩阵。

还支持多维索引图像(大小为MxNx1xK)。

详见: rgb2ind, ind2gray, hsv2rgb.

广告

Octave还提供了制作和使用电影框架结构体的工具。这些结构体包了图像数据("cdata"字段)以及相应的颜色图("colormap"field

 
: frame = getframe ()
: frame = getframe (hax)
: frame = getframe (hfig)
: frame = getframe (…, rect)

将图形或轴捕获为电影帧结构体。

在没有参数的情况下,捕获当前轴,不包括ticklabels、title和x/y/zlabels。返回的结构体frame有一个字段cdata, 包含NxMx3(RGB)uint8矩阵形式的,在物理显示器中的像素的实际图像数据,以及字段colormap提供给MATLAB兼容性,但总是空的。

如果第一个参数hax是一个轴句柄,然后捕获该轴,而不是从返回的当前轴gca.

如果第一个参数hfig是一个图形句柄,则捕获相应的整个图形画布。

最后,如果第二个参数rect假设它必须是定义要捕获的图形内部区域的四个元素向量([左下宽度高度])。不管数字如何"units"属性rect必须在中定义像素.

详见: im2frame, frame2im, movie.

广告
 
: movie (mov)
: movie (mov, n)
: movie (mov, n, fps)
: movie (h, …)

播放从帧结构体数组定义的电影。

电影mov必须是包含字段的帧的结构体数组"cdata""colormap",从返回getframe作用默认情况下,所有图像在当前轴上以每秒12帧的速度显示一次。

可选参数n是一个标量或整数向量,用于控制电影的显示次数和显示的粒子帧:

First element:
n(1) > 0

播放电影n(1) 时间。

n(1) < 0

播放电影abs (n(1)时间交替地按向前和向后的顺序。

广告
Other elements (if any):

中帧的索引mov将显示。

广告

如果第一个参数是图形或轴的句柄h,在该图或轴中显示的电影,而不是当前轴。

详见: getframe, im2frame, frame2im.

广告
 
: [x, map] = frame2im (frame)

将电影帧转换为索引图像。

电影帧只是一个带有字段的结构体"cdata""colormap".

frame是astruct数组。在这种情况下,x将分别是索引电影和RGB电影的MxNx1xK或MxNx3xK,每个帧连接在第4维度上。

详见: im2frame, getframe.

广告
 
: frame = im2frame (rgb)
: frame = im2frame (x, map)

将图像转换为电影帧。

电影帧只是一个带有字段的结构体"cdata""colormap".

当每个图像投影(RGB图像的矩阵大小MxN和MxNx3)连接到第四维度时,提供了对N维度图像的支持。在这种情况下,返回的值是structarray。

详见: frame2im.

广告

这个colormap函数用于更改当前轴或图形的颜色图。

 
: cmap = colormap ()
: cmap = colormap (map)
: cmap = colormap ("default")
: cmap = colormap (map_name)
: cmap = colormap (hax, …)
: colormap map_name

查询或设置当前颜色map。

在没有输入自变量的情况下,colormap返回当前的颜色map。

colormap (map)将当前颜色贴图设置为map。颜色图应该是n按行3列矩阵。列分别包含红色、绿色和蓝色强度。所有条目必须介于0和1之间(包括0和1)。将返回新的颜色map。

彩色地图("default")恢复默认的颜色map(viridis具有64个条目的map)。将返回默认的颜色map。

map也可以从字符串指定,map_name,是返回颜色map的函数的名称。

如果第一个参数hax是一个轴句柄,则查询或设置这些轴的颜色map。

为了方便起见,也可以将此函数与命令形式一起使用,colormap map_name.

内置颜色map的列表为:

地图 描述
viridis default
turbo colormap traversing blue, cyan, green, yellow, red; modern replacement for jet.
jet colormap traversing blue, cyan, green, yellow, red.
cubehelix colormap traversing black, blue, green, red, white with increasing intensity.
hsv cyclic colormap traversing Hue, Saturation, Value space.
rainbow colormap traversing red, yellow, blue, green, violet.
————- ———————————————————————————————
hot colormap traversing black, red, orange, yellow, white.
cool colormap traversing cyan, purple, magenta.
spring colormap traversing magenta to yellow.
summer colormap traversing green to yellow.
autumn colormap traversing red, orange, yellow.
winter colormap traversing blue to green.
————- ———————————————————————————————
gray colormap traversing black to white in shades of gray.
bone colormap traversing black, gray-blue, white.
copper colormap traversing black to light copper.
pink colormap traversing black, gray-pink, white.
ocean colormap traversing black, dark-blue, white.
————- ———————————————————————————————
colorcube equally spaced colors in RGB color space.
flag cyclic 4-color map of red, white, blue, black.
lines 具有来自轴的颜色的循环颜色图"ColorOrder"属性
prism cyclic 6-color map of red, orange, yellow, green, blue, violet.
————- ———————————————————————————————
white all white colormap (no colors).

详见: viridis, turbo, jet, cubehelix, hsv, rainbow, hot, cool, spring, summer, autumn, winter, gray, bone, copper, pink, ocean, colorcube, flag, lines, prism, white.

广告
 
: tf = iscolormap (cmap)

如果返回truecmap是一个颜色图。

色map是一个实矩阵,类为单或双,有3列。每一行代表一种颜色。这3列分别包含红色、绿色和蓝色强度。

颜色map中的所有值都应在[01]范围内,但这是不强制的。每个函数都必须决定对超出此范围的值执行什么操作。

详见: colormap, rgbplot.

广告

以下函数返回预定义的颜色图,与使用colormap作用

 
: rgbplot (cmap)
: rgbplot (cmap, style)
: h = rgbplot (…)

绘制颜色图的组件。

两种不同styles可用于显示cmap:

profile (default)

绘制每个通道(红色、绿色和蓝色)的颜色图的RGB线轮廓,绘制线颜色适当。每条线表示颜色贴图上RGB组件的强度。

广告
composite

在X轴上绘制颜色图,使实际索引颜色可见,而不是单个颜色组件可见。

广告

可选返回值h是已创建打印的图形句柄。

demo rgbplot查看的示例rgbplot以及每个样式参数。

详见: colormap.

广告
 
: map = autumn ()
: map = autumn (n)

创建颜色map。此颜色图的范围从红色到橙色再到黄色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = bone ()
: map = bone (n)

创建颜色map。此颜色图从黑色到白色不等,色调为灰蓝色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = colorcube ()
: map = colorcube (n)

创建颜色map。此颜色map从RGB颜色空间中尽可能多的等间距颜色(而非灰度)组成。

如果没有一个完美的数字n规则间隔的颜色,则颜色图中剩下的条目是纯红色、绿色、蓝色和灰色的渐变。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = cool ()
: map = cool (n)

创建颜色map。颜色map从青色到品红色不等。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = copper ()
: map = copper (n)

创建颜色map。这种颜色map从黑色到浅铜色都有。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = cubehelix ()
: map = cubehelix (n)
: map = cubehelix (n, start, rots, hue, gamma)

创建cubehelix颜色图。

这种颜色图从黑色到白色不等,穿过蓝色、绿色和红色,同时保持单调增加的强度感。这是通过螺旋线从黑色到白色遍历彩色立方体来实现的,因此得名cubehelix,同时根据1953年的NTSC规范考虑每个通道的感知正确性。

rgbplot (cubehelix (256))

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

参考文献:Green,D.A.,2011,A colour scheme for the display of astronomical intensity images,《印度天文学会公报》,39289。

详见: colormap.

广告
 
: map = flag ()
: map = flag (n)

创建颜色map。随着每个索引的变化,此颜色图在红、白、蓝和黑之间循环。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = gray ()
: map = gray (n)

创建灰色贴图。这张颜色图从黑色到白色,中间有灰色阴影。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = hot ()
: map = hot (n)

创建颜色map。此颜色图的范围从黑色到暗红色、红色、橙色、黄色,再到白色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = hsv ()
: map = hsv (n)

创建颜色map。此颜色map从红色开始,在黄色、绿色、青色、蓝色和品红色之间变化,然后返回红色。

它可用于显示周期函数。通过在保持恒定的最大饱和度和值的同时,通过所有可能的值线性地改变色调来获得该图。等效代码为hsv2rgb ([(0:N-1)'/N, ones(N,2)]).

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = jet ()
: map = jet (n)

创建颜色map。此颜色图的范围从深蓝色到蓝色、青色、绿色、黄色、红色,再到深红色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

编程说明:jet颜色map在感知上是不均匀的。试试viridis如果这很重要的话。为了一滴替代品jet具有更好的感知特征turbo颜色图。

详见: colormap, turbo.

广告
 
: map = lines ()
: map = lines (n)

创建颜色map。此颜色图从当前轴上的颜色列表组成"ColorOrder"属性默认值为蓝色、橙色、黄色、紫色、绿色、浅蓝色和暗红色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = ocean ()
: map = ocean (n)

创建颜色map。这张颜色图从黑色到白色,中间有蓝色阴影。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = pink ()
: map = pink (n)

创建颜色map。这张颜色图从黑色到白色不等,色调为灰粉色。

当在灰度图像上使用时,此颜色map会提供深褐色色调。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = prism ()
: map = prism (n)

创建颜色map。随着每个索引的变化,此颜色图在红色、橙色、黄色、绿色、蓝色和紫色之间循环。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = rainbow ()
: map = rainbow (n)

创建颜色map。此颜色图的范围从红色到橙色、黄色、绿色、蓝色到紫色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = spring ()
: map = spring (n)

创建颜色map。此颜色map从品红色到黄色不等。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = summer ()
: map = summer (n)

创建颜色map。这个颜色图从绿色到黄色不等。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = turbo ()
: map = turbo (n)

创建颜色map。这个颜色图的范围从深蓝色到绿色再到深红色;类似于过时的jet颜色map,但在感知上是一致的。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = viridis ()
: map = viridis (n)

创建颜色map。这个颜色图的范围从深紫蓝色到蓝色、绿色再到黄色。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = white ()
: map = white (n)

创建颜色map。这个颜色图完全是白色的。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: map = winter ()
: map = winter (n)

创建颜色map。这个颜色图从蓝色到绿色不等。

参数n必须是标量。如果未指定,则使用当前颜色map的长度,即64。

详见: colormap.

广告
 
: cmap = contrast (x)
: cmap = contrast (x, n)

返回最大化图像对比度的灰色颜色图。

返回的颜色图将具有n排。如果n则使用当前颜色map的大小。

详见: colormap, brighten.

广告

以下三个函数修改而不是替换现有的颜色map。

 
: map_out = brighten (beta)
: map_out = brighten (map, beta)
: map_out = brighten (h, beta)
: brighten (…)

使颜色图变亮或变暗。

参数beta必须是介于-1和1之间的标量,其中负值会使颜色贴图变暗,正值会使颜色map变亮。

如果map参数被省略,该函数被应用于currentcolormap。

第一个参数也可以是有效的图形句柄h,在这种情况下brighten应用于与该句柄关联的颜色map。

如果没有指定输出,则将结果写入currentcolormap。

详见: colormap, contrast.

广告
 
: spinmap ()
: spinmap (t)
: spinmap (t, inc)
: spinmap ("inf")

循环颜色图t秒,颜色增量为inc.

这两个参数都是可选的。默认循环时间为5秒,默认增量为2。如果参数"inf"然后循环,直到Control-C按下。

旋转时,原始颜色1变为颜色2,颜色2变为颜色3等。允许正增量或负增量,并且的高值为inc将导致更快地循环通过颜色图。

详见: colormap.

广告
 
: whitebg ()
: whitebg (color)
: whitebg ("none")
: whitebg (hfig)
: whitebg (hfig, color)
: whitebg (hfig, "none")

反转当前配色方案中的颜色。

根属性也会反转,以便所有后续打印都将使用新的配色方案。

如果可选参数color则背景颜色设置为color而不是倒置。color可以是呈现八种已知颜色之一的字符串或RGB三元组。specialstring参数"none"将打印恢复为出厂默认颜色。

如果第一个参数hfig是图形句柄或图形句柄列表,然后对这些图形进行操作,而不是对当前图形进行操作gcf。除非0在图形列表中,否则根属性不会更改。

编程说明:whitebg通过更改指定图形的子对象的颜色属性进行操作。只有具有单一颜色的对象才会受到影响。例如,具有单个"FaceColor"将被更改,但有阴影的补丁("interp")不会被修改。对于反转,新颜色只是RGB空间中的反转:cnew = [1-R 1-G 1-B]。当指定了颜色时,轴和图形将设置为新颜色,然后调整子对象的颜色,使其与新背景具有一定的对比度(可见性)。

详见: reset, get, set.

广告

以下函数可用于操作颜色贴图。

 
: [Y, newmap] = cmunique (X, map)
: [Y, newmap] = cmunique (RGB)
: [Y, newmap] = cmunique (I)

转换输入图像X到输出索引图像Y使用尽可能小的颜色图newmap.

当输入是索引图像时(X带彩色地图map)输出是一个颜色图newmap已经从中消除了任何重复的行。输出图像,Y,是调整了索引以匹配新的、可能更小的颜色图的原始输入图像。

当输入是RGB图像(MxNx3数组)时,outputcolormap将为原始图像中的每个唯一颜色包含一个条目。在最坏的情况下,新地图的行数可能与原始图像中的像素数一样多。

当输入是灰度图像时I,输出颜色图将为原始图像中的每个唯一强度值包含一个条目。在最坏的情况下,新map的行数可能与原始图像中的像素数一样多。

支持细节:

newmap始终是Mx3矩阵,即使输入图像是强度灰度图像I(所有三个RGB平面都符号为相同的值)。

如果新颜色map的大小小于或等于256,则输出图像属于uint8类。否则,输出图像属于double类。

详见: rgb2ind, gray2ind.

广告
 
: [Y, newmap] = cmpermute (X, map)
: [Y, newmap] = cmpermute (X, map, index)

重新排列颜色图中的颜色。

当仅用两个自变量调用时,cmpermute随机重新排列颜色图map并返回一个新的颜色mapnewmap。它还返回索引图像Y相当于原始输入图像X显示时使用newmap.

当使用可选的第三个参数调用时,newcolormap中的颜色顺序从定义index.

小心 index不应具有重复的元素,否则函数将失败。

广告

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

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