【问题标题】:Using skimage.color.gray2rgb produces a wrong output image使用 skimage.color.gray2rgb 会产生错误的输出图像
【发布时间】:2019-06-11 00:22:50
【问题描述】:

您好,我只是想编写一个代码来将灰度图像设置为三通道图像格式,然后显示它。我正在使用 skimage.color 函数 gray2rgb ,它确实改变了单比例图像矩阵的形状。但是,当想要绘制该转换的结果时,我得到了一个意想不到的图像作为输出。

我也很难创建一个空的 3 通道图像来填充我想要的任何单尺度信息。显然由于图像的性质为 uint16,matplotlib 存在一些问题

我已经尝试过 np.vstack、skimage.color.gray2rgb。它们都产生相同的输出。 我尝试使用 np.uint8 将最大像素值从 65535 转换为 255,但它不起作用。看来除法是有效的

from skimage.io import imread, imshow
import matplotlib.pyplot as plt
import os
import numpy as np
img = imread('516.jpg')
img_uint8 = np.uint8(img)
from skimage.color import gray2rgb
from skimage import img_as_float
img_rgb = gray2rgb(img_uint8, alpha=None)
print(img_rgb.shape)
plt.imshow(img_rgb)

显示的图像不是预期的!!!!

我希望图像类似于原始图像,但可能具有不同的颜色,因为它应该是所有 3 个通道中的相同图像。 我认为问题出在我的图像的 np.uint8 上。我用摄影师图像测试过,没有问题

【问题讨论】:

标签: image-processing grayscale


【解决方案1】:

我不知道为什么,但似乎使用 img_as_ubyte 可以在三个通道中复制灰度图像并能够显示类似于原始图像的图像

from skimage import img_as_ubyte
i = imread('516.jpg')
i_8 = img_as_ubyte(i)
imshow(i_8)
print(i_8)
i_8rgb = gray2rgb(i_8)
plt.imshow(i_8rgb, cmap='gray')

不知道为什么 np.uint8 会产生改变的结果。不知何故,使用 openCV 作为读取似乎总是将图像放在 uint8 范围内,这可能很方便。 我等你的cmets

Original Image used for testing This is what np.uint8 seems to be producing

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2017-03-19
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多