堆叠 numpy 图像阵列时颜色强度发生变化
Colour intensity is changing when stacking numpy image arrays
我正在从 here 加载图像,该图像另存为 .nii.gz。图像打开良好(尺寸为(497x497)),使用matplotlib显示时,显示正确的强度,如下所示:
当我们试图将它做成3通道图像时,通过堆叠numpy数组,绘制后,强度发生变化,如下所示:
知道如何解决这个问题吗?在 google colaboratory 中重现问题的最少代码如下:
import cv2
import glob
import numpy as np
import nibabel as nib
import skimage.io as io
from nibabel import nifti1
import matplotlib.pyplot as plt
! wget "https://github.com/Jimut123/simply_junk/blob/main/image.nii.gz?raw=true" -O image.nii.gz
image_file_name = "image.nii.gz"
print(image_file_name)
epi_img = nib.load(image_file_name)
epi_img_data = epi_img.get_fdata()
epi_img_data = epi_img_data/epi_img_data.max()
# epi_img_data = epi_img_data[..., np.newaxis]
plt.imshow(epi_img_data)
plt.show()
total_mask = np.stack((epi_img_data,)*3, axis=-1)
plt.imshow(total_mask,cmap='gray')
plt.show()
例如这是一张 3 通道图像 (RGB):
但这看起来完全像灰度版本。对于上图,在堆叠numpy数组时,我无法使图像看起来与灰度图像相似。
如果按照 Cristolph 和 Johan 的描述对其进行缩放,则 3 通道图将变得相同:
epi_img_data -= epi_img_data.min()
epi_img_data /= epi_img_data.max()
total_mask = np.stack((epi_img_data,)*3, axis=-1)
plt.imshow(total_mask)
我正在从 here 加载图像,该图像另存为 .nii.gz。图像打开良好(尺寸为(497x497)),使用matplotlib显示时,显示正确的强度,如下所示:
当我们试图将它做成3通道图像时,通过堆叠numpy数组,绘制后,强度发生变化,如下所示:
知道如何解决这个问题吗?在 google colaboratory 中重现问题的最少代码如下:
import cv2
import glob
import numpy as np
import nibabel as nib
import skimage.io as io
from nibabel import nifti1
import matplotlib.pyplot as plt
! wget "https://github.com/Jimut123/simply_junk/blob/main/image.nii.gz?raw=true" -O image.nii.gz
image_file_name = "image.nii.gz"
print(image_file_name)
epi_img = nib.load(image_file_name)
epi_img_data = epi_img.get_fdata()
epi_img_data = epi_img_data/epi_img_data.max()
# epi_img_data = epi_img_data[..., np.newaxis]
plt.imshow(epi_img_data)
plt.show()
total_mask = np.stack((epi_img_data,)*3, axis=-1)
plt.imshow(total_mask,cmap='gray')
plt.show()
例如这是一张 3 通道图像 (RGB):
但这看起来完全像灰度版本。对于上图,在堆叠numpy数组时,我无法使图像看起来与灰度图像相似。
如果按照 Cristolph 和 Johan 的描述对其进行缩放,则 3 通道图将变得相同:
epi_img_data -= epi_img_data.min()
epi_img_data /= epi_img_data.max()
total_mask = np.stack((epi_img_data,)*3, axis=-1)
plt.imshow(total_mask)