Использование skimage.color.gray2rgb приводит к неправильному выводу изображения - PullRequest
0 голосов
/ 11 июня 2019

Здравствуйте. Я просто пытался создать код для настройки изображения в градациях серого в виде трехканального формата изображения, а затем отобразить его. Я использую функцию 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 для моего изображения. Я тестировал изображение оператора и не испытывал проблем

1 Ответ

0 голосов
/ 11 июня 2019

Я не знаю почему, но кажется, что использование 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, что может быть удобно. Жду ваших комментариев

Исходное изображение, использованное для тестирования Это то, что, по-видимому, производит np.uint8

...