【发布时间】:2013-11-25 18:43:47
【问题描述】:
我有一个返回grayscale 图像的程序。但是,当我尝试编写图像时,它完全显示为black。这是为什么?我怎样才能写出图像并得到预期的结果?
谢谢。
【问题讨论】:
-
尝试以下之一:imshow(img,[]) 或 imshow(uint8(img))。如果这可行,原因如下面的答案所述。您的值太低而无法显示或不属于正确的类别。
我有一个返回grayscale 图像的程序。但是,当我尝试编写图像时,它完全显示为black。这是为什么?我怎样才能写出图像并得到预期的结果?
谢谢。
【问题讨论】:
首先检查您的数据类型。您可以通过示例 double() 或 uint16() 等来转换数据的类型。(查看类型转换的帮助)。 这是一个示例,您如何将值重新调整到 uint16 的强度范围,无符号整数具有 ~65k 可能的不同值。铸造当然会导致强度值的精度降低。
new_img(:,:) = uint16((new_img(:,:)./max(max(new_img(:,:),[],1)))*65536);
之后您应该能够将数据写入您的文件。
【讨论】:
确保您的灰度图像属于正确的类别。此外检查生成图像中的值。如果它们太低,所有东西都会显示为黑色。如果您能提供更具体的信息,或许可以给出更详尽的答案。
【讨论】:
如果您正在处理二值图像(在转换为灰度之前)并且您即将将其转换为灰度,那么您会突然将像素范围从 [0, 1] 更改为 [0, 255] .所以二进制图像中的值'1'是全白的,而灰度图像中的值几乎是黑色的。
试试这个:
img = imread('image_name.jpg');
imshow(img*50)
它可以确保您的图像是黑色的,或者只是它的像素值不合适。
【讨论】: