“双重”vs。输入使用“uint8 imshow”功能
360年visualizzazioni (ultimi 30 giorni)
Mostra commenti较少recenti
当使用命令,“imshow(图片),I get an error when "image" has type "double". If I convert "image" to type "uint8", then "imshow" produces the image. Why is there an error with type "double"?
4 Commenti
沃尔特·罗伯森
伊尔21杂志2022
//www.tatmou.com/matlabcentral/answers/22785-double-vs-uint8-input-using-imshow-function comment_2066009包含一个详尽的清单的可能性。
Risposta accettata
丹尼斯Vreshtazi
伊尔2018年11月11日
转换图像存储类
你可以uint8和uint16数据转换为双精度使用MATLAB函数,翻倍。然而,存储类之间的转换改变了MATLAB工具箱解释图像数据。如果你想要生成的数组被正确地作为图像数据,您需要重新调节或抵消数据转换的时候。
存储类的简单转换,使用其中一个工具箱函数:im2double im2uint8, im2uint16。这些函数自动处理原始数据的重新调节和补偿。例如,这个命令将一个双精度RGB图像数据在区间[0,1]uint8 RGB图像数据的范围[0255]。
RGB2 = im2uint8 (RGB1);
失去的信息转换
当你转换为一个类,它使用更少的比特来表示数字,通常你失去一些的信息在你的形象。例如,uint16强度图像可以存储多达65536种不同深浅的灰色,但是uint8强度图像可以存储只有256种不同深浅的灰色。当你uint16强度图像转换为uint8强度图像,im2uint8数字转换原始图像的灰色阴影。换句话说,所有的值从0到127的原始图像成为uint8形象,0值从128年到385年都变成1,等等。这损失的信息通常不是一个问题,然而,自256年以来仍然超过了许多深浅的灰色眼睛辨别。
将索引图像
不可能总是将索引图像从一个存储类到另一个。在索引图像,图像矩阵只包含指标colormap,而不是数据本身的颜色,所以没有量化的颜色数据转换是可能的。
例如,uint16或双索引图像不能转化为uint8 300颜色,因为uint8数组只有256个不同值。如果你想执行这个转换,您必须首先减少使用imapprox函数图中不同的颜色。这个函数执行colormap颜色上的量化,减少图像中不同颜色的数量。有关更多信息,请参见减少索引图像的颜色。
4 Commenti
稍risposte (9)
Junaid
il 1 Dic 2011
uint8使用unsigned 8位整数。像素的范围。我们不能在像素值超过2 ^ 8 1。因此,对于图像uint8类型使用。而双是用于处理非常大的数字。有许多功能只花两倍作为输入卵形的内存范围。
很容易转换双uint8或otherway。
说我有矩阵uin8吧。
然后把它翻倍你只需要这样做
一个=双(A);
或将其转换回uint8。
= uint8 ();
4 Commenti
Vinai Datta Thatiparthi
伊尔2019年3月27日
Modificato:Vinai Datta Thatiparthi
他2020年2月28日
这就跟你问声好!添加到线程,
所有图片存储和表示为一个矩阵(2 d或3 d)。默认设置为存储矩阵在Matlab是双精度或数组信息。它使用64位来存储任何数量。然而,internsity像素的图像,通常是0 - 255之间。8位是suffecient来描述这个信息。作为一种手段来节省内存和更有效的表征,我们使用uint8, uint16, uint32 uint64等等…
我= imread (“random_picture.jpg”);
imshow (im);
imshow(双(im));
你可以更好地理解的差异Uint8 &双通过这个例子。
另外,你可以从一个类定型容易直接到另一个使用的命令。对于更详细,我们可以有像素的强度范围到(2 ^ 16 1),(2 ^ 32 1)等等……
为一个扩展,这里的8位代表所需的比特数来存储一个平面的图像信息。RGB图像,色彩深度,这是总所需的比特数来表示所有的图像信息,将成为24。对于灰度图像,色彩深度只会是8,因为它只有一个平面。
希望这有助于:)
1 Commento
香港成
伊尔2017年4月26日
我想也许你遇到他们当你读一个图像。如果这是真的,当你读一个图像使用
一个= imread (”picture.png”)
函数,那么你会得到一个变量
一个
这样的a * b * 3 unit8,其值从0到255,但如果你把这个变量
一个
使用
B = im2double (A)
然后你会得到一些变量
B
像一个* * 3双,其值从0到1的不同
之后,使用函数
灰色= rgb2gray (I2)
你会得到一个像a * b双变量
2 Commenti
沃尔特·罗伯森
il 1 Giu 2021
一个数值数组的数据类型是相同的整个数组。你不能有一个数值数组元素是双精度但其他人不双精度。
你应该写信给一个新数组,如
星展银行(i1) =双(bs (i1));
或者你应该将整个数组,喜欢
dbs =双(bs);
Pranit帕蒂尔
伊尔2018年3月8日
我读一个rgb图像图像的直方图,但当我给命令imhist (xyz.jpg)给了我错误的策划只是x - y轴而不是图。这完全是白色的。请帮我和图像已经在uint8。
1 Commento
MathWorks支金宝app持团队
他2020年2月27日
一个
n白人图像显示
发生在
图像数据不在默认图像显示范围。的图像类
“双”,范围是[0,1]。基于“增大化现实”技术的工作
一样,使用“
DisplayRange
与“imshow”。 参数
例如,
考虑下面的命令,输入参数是一个热感摄像机图像
图像处理工具箱
:
imshow (“hotcoffee.tif”)
如果你检查图像中的像素值,它们的默认范围,如23.6268
,因此图像显示都是白色的。
如果您指定显示范围使用空方括号[],然后“imshow”计算显示范围和显示图像的正确:
imshow (“hotcoffee.tif”,“DisplayRange”[])
0 Commenti
穆罕默德suhaan dar
伊尔21集2021
Modificato:沃尔特·罗伯森
伊尔24创2022
假设
p
是一个
uint8
像素的值
20.
和
问
是一个
uint8
像素的值
210年
。下面哪个选项将显示为黑色像素?
im2double (p 40)
im2double (p) - 40
p - 40
q + 40
im2double (q-40)
im2double (q) - 40
5 Commenti
沃尔特·罗伯森
伊尔2022年3月25日
在MATLAB中,只有少数的可能性
- 你有一个3 d数据类型的整数数组,和第三个维度是长度3,对于一个给定的位置,所有三个组件是完全可能的最小值为整数数据类型。在这种情况下,像素将是黑色的。
- 你有一个3 d数组数据类型单()或双(),第三个维度是长度3,对于任何给定的位置,所有三个组件都非容积;在这种情况下,像素将是黑色的
- 你有一个3 d数据类型的整数数组,和第三个维度是长度3,对于任何给定的位置,所有三个组件都一模一样,不是零。在这种情况下,像素将是白色的。
- 你有一个3 d数组数据类型单()或双(),第三个维度是长度3,对于任何给定的位置,如果你用最小(组件(1)结果将非零和相等的65536年在一个部分;在这种情况下,像素将是白色的。例如,[π,sqrt (2), 1], min()对1片段(1 1 1)都是平等的;结果将是白色的
- 你有一个3 d数组长度与第三维度是3,但以上4例应用;在这种情况下,像素将在黑色和白色(它将颜色)
- 你有一个标量、向量或2 d整数或浮点数组。在这种情况下,颜色的像素就会出现取决于轴这一属性(可由caxis()),和在轴或图Colormap属性(可由Colormap ())。在这种情况下,颜色可能是任何东西,可以通过颜色表达地图。
你列出所有的6例落入最后一例,标量,矢量或二维数组,所以你没有足够的信息来确定他们是否会显示为黑色或白色或其他东西。例如,
p = uint8 (20);
图像(p + 50);
colormap(粉色)
这是黑色和白色。用不同colormap当然可以变成黑色,也可以变成白色,也可以是蓝色或紫色的天空,也可以是紫色或它可以是任何你想要的。