Image Matlab rgb2hsv()给出uint8s?
我对使用Matlab是新手,我正在尝试获取图像的HSV值,但我需要的结果是uint8。目前,当我读入图像时,我收到以下矩阵:Image Matlab rgb2hsv()给出uint8s?,image,matlab,image-processing,rgb,hsv,Image,Matlab,Image Processing,Rgb,Hsv,我对使用Matlab是新手,我正在尝试获取图像的HSV值,但我需要的结果是uint8。目前,当我读入图像时,我收到以下矩阵: whos im Name Size Bytes Class Attributes im 120x100x3 36000 uint8 当我使用函数rgb2hsv()时,我得到: 有没有办法将其转换为uint8矩阵而不是双精度矩阵?要将结果转换回uint8,只需使用hsv=im
whos im
Name Size Bytes Class Attributes
im 120x100x3 36000 uint8
当我使用函数rgb2hsv()时,我得到:
有没有办法将其转换为uint8矩阵而不是双精度矩阵?要将结果转换回uint8,只需使用
hsv=im2uint8(rgb2hsv(im))
。它不仅可以进行数据类型转换,还可以将图像缩放到uint8的0…255范围
以双格式存储图像时,仅使用范围0…1,而以任何整数(或定点)格式存储图像时,使用intmin
和intmax
之间的完整范围。要将图像转换回原始范围,必须使用im2uint8
或手动执行,首先乘以255,然后转换数据类型。我更喜欢im2uint8
,因为它更健壮,例如im2uint8(im2uint8(I))
返回有效图像。除了HDR图像,我所知道的所有颜色空间都是如此
我知道文档上说它只适用于灰度和rgb图像,但它基本上是一种数据类型转换和自动重缩放 缩放
hsv
值是否安全?他们的“行为”像RGB值吗?@Shai:是的,补充了一些解释。显然,您会遇到一些量化错误,但与RGB没有什么不同。转换为uint8
会产生意外的副作用。如果转换为uint8
,将失去精度。通常,色调表示为0到360之间的角度度量,而饱和度和值表示为0到100或0到1之间的浮点值。转换应该为您提供浮点值。让我问你一个问题:为什么要将结果转换为uint8
?我需要使用这些值作为单独矩阵的索引。如果我失去了一点精度,没关系。你介意解释一下你使用HSV变换作为索引的最终应用是什么吗?它可能提供一些进一步的见解,如果适用的话,我可以对另一种方法进行评论。好的,这更有意义。因此,HSV变换的量化似乎是合理的。非常感谢。Good luck.FYI,hsv
是内置彩色地图的名称。如果使用该配色方案,您可能不想覆盖它。
hsv = rgb2hsv(im);
whos hsv
Name Size Bytes Class Attributes
hsv 120x100x3 288000 double